Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
非类型参与者(Java+;Akka):重新查询未处理的消息_Java_Akka_Actor - Fatal编程技术网

非类型参与者(Java+;Akka):重新查询未处理的消息

非类型参与者(Java+;Akka):重新查询未处理的消息,java,akka,actor,Java,Akka,Actor,我正在使用Java+Akka创建一个参与者系统。 特别是,我通过提供onReceive()方法的实现来定义非类型化的参与者 在该方法中,我通过定义接收消息时要执行的逻辑来实现参与者的行为。它可能是: public void onReceive(Object msg) throws Exception { if(msg instanceof MsgType1){ ... } else if(msg instanceof MsgType2){ ... } else unhandled(m

我正在使用Java+Akka创建一个参与者系统。 特别是,我通过提供onReceive()方法的实现来定义非类型化的参与者

在该方法中,我通过定义接收消息时要执行的逻辑来实现参与者的行为。它可能是:

public void onReceive(Object msg) throws Exception {
  if(msg instanceof MsgType1){ ... }
  else if(msg instanceof MsgType2){ ... }
  else unhandled(msg);
}
然而,如果演员只对单一类型的味精感兴趣怎么办? 是否可以实现选择性接收,以便参与者等待某个消息(系统自动重新排队等待所有其他类型的消息)?

这种“a la Erlang”消息处理模式在Akka AFAIK中不可用。但是,您可以使用来获得想要的效果

所以代码应该是这样的

public void onReceive(Object msg) throws Exception {
    if(msg instanceof MsgType1){ ... }
    else if(msg instanceof MsgType2){ ... }
    else stash();
}
在消息处理的某个时刻,您将切换到另一个状态(可能是通过调用
getContext().been
)。您还需要执行一个
unstashAll()
调用,以便将忽略的邮件重新附加到邮箱中