繁体   English   中英

Java中的Akka Actor模型实现

[英]Akka Actor Model implementation in Java

Akka库中的AbstractorActor和UntypedActor类之间有什么区别? 这两个类都用于创建演员。 但是什么使它们分开呢?

它们是在Java中创建Actor的独立API,不赞成使用UntypedActor并已在Java 8上被AbstractActor取代,这要归功于lambda表达式,与以前的方法相比,receive函数的实现要好得多。

旧的(从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();
  }
}

这是使用正确的当前API的相同代码段: AbstractActor ,它是当前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();
  }

}

您会注意到铸造的需求已经消失了,确保手动调用未处理的需求也消失了。 总体而言,新API更容易执行正确的操作。 随着Akka Typed在2018年初投入生产,它将在2018年变得更好-请密切注意这一点。

总体而言,如果您要使用Java的Akka来构建新事物,只需忽略UntypedActor的存在。 过去只有使用过它的人才能使用它,以便他们可以在2.5的生命周期内平稳地转换为AbstractActor。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM