Java 中的 Akka Actor 模型实现

Akka Actor Model implementation in Java

Akka 库中的 AbstractorActor 和 UntypedActor 类 有什么区别。 类 都用于创建演员。但是他们有什么区别?!

它们是分开的 API 以在 Java 中创建 Actors,UntypedActor 已弃用并已被 AbstractActor 取代,开始于 [=29] =] 8 多亏了 which 的 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();
  }
}

这里是使用正确电流 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。