Untyped Actors(Java + Akka):重新排列未处理的消息

时间:2013-08-27 14:28:11

标签: java akka actor

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

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

public void onReceive(Object msg) throws Exception {
  if(msg instanceof MsgType1){ ... }
  else if(msg instanceof MsgType2){ ... }
  else unhandled(msg);
}

但是,如果演员只对单一类型的msg感兴趣呢? 是否可以实现选择性接收,以便actor等待某个msg(并且系统会自动重新排队所有其他类型的消息)???

1 个答案:

答案 0 :(得分:3)

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

所以代码看起来像这样

public void onReceive(Object msg) throws Exception {
    if(msg instanceof MsgType1){ ... }
    else if(msg instanceof MsgType2){ ... }
    else stash();
}

在消息处理的某个时刻,您将切换到另一个状态(可能是通过调用getContext().become)。您还可以进行unstashAll()调用,以便将您忽略的邮件重新附加到该邮箱之前。

相关问题