Java中的Akka Actor模型实现

bum*_*bee 1 java actor akka

什么是Akka库中的AbstractorActor和UntypedActor类之间的区别.这两个类都用于创建actor.但是它们之间的区别是什么?!

Kon*_*ski 6

它们是用于在Java中创建Actors的单独API UntypedActor,已被弃用,并且已被AbstractActorJava 8的开头取代,这要归功于哪个lambda表达式接收函数比旧方法更好实现.

旧的(已弃用,自2.5.0开始)方式:

// this is DEPRECATED -----------vvvvvvvvvvvv
class My_OLD_STYLE_Actor extends UntypedActor {
  @Override
  public void onReceive(Object msg) {
    if (msg instanceof RequestMonies) {
      RequestMonies req = (RequestMonies) msg;
      // ...
    } else if (msg instanceof CheckStatus) {
      CheckStatus check = (CheckStatus) msg;
      // ...
    } else unhandled();
  }
}
Run Code Online (Sandbox Code Playgroud)

AbstractActor这是使用适当的当前API的相同代码段: 这是当前的API(从2.5.0开始):

public class JavaStyleActor extends AbstractActor {

  @Override
  public Receive createReceive() {
    return receiveBuilder()
      .match(RequestMonies.class, req -> {
        // handle request monies...
      })
      .match(CheckStatus.class, check -> {
        // ...
      })
      .build();
  }

}
Run Code Online (Sandbox Code Playgroud)

您会注意到铸造的需要已经消失,而且还需要确保手动调用未处理.总体而言,新API更容易做正确的事情.随着Akka Typed在2018年初投入生产,它将在2018年变得更加美好 - 请密切注意这一点.

总的来说,UntypedActor如果你正在使用Akka和Java构建新东西,那么简单地忽略它的存在.对于那些过去使用它的人来说,它仍然存在,以便他们可以在2.5的生命周期内顺利地转换为AbstractActor.