Akka远程共享课程

时间:2018-10-23 15:11:20

标签: serialization java-8 akka akka-remote-actor

我有两个不同的Java 8项目,这些项目将生活在不同的服务器上,并且都将使用Akka(特别是Akka Remoting)相互通信。

例如,一个应用程序可能向另一应用程序发送Fizzbuzz消息:

public class Fizzbuzz {
    private int foo;
    private String bar;

    // Getters, setters & ctor omitted for brevity
}

我以前从未使用过Akka Remoting。我假设我需要创建第3个项目,一个用于保存共享消息(例如Fizzbuzz和其他消息)的库/ jar,然后将该库作为依赖项拉入两个项目。

就这么简单吗?是否有任何序列化(或其他Akka和/或网络)考虑因素会影响这些“共享”消息的设计?预先感谢!

1 个答案:

答案 0 :(得分:1)

可以肯定地使用共享库,除了确实存在序列化方面的问题:

Akka-remoting docs

  

对演员使用远程处理时,必须确保用于这些演员的道具和消息可序列化。否则,将导致系统异常运行。

     

有关更多信息,请参见Serialization

基本上,您需要为演员道具和发送的消息(当然包括所有嵌套类)提供并配置序列化。如果我没有记错的话,默认设置将使您无需任何配置即可启动并运行,前提是您通过网络发送的所有内容都可以通过Java序列化。

不过,default config uses default Java serialization效率很低-因此您可能想要切换到protobuf,kryo甚至json。在这种情况下,将序列化实现和绑定作为共享库(您在问题中提到的专用的“共享模型”的一部分或一部分)提供,取决于是否要在其他地方重用它,以及介意/不介意与Serailization相关的传递性依赖点突然出现。

最后,如果您允许一些个人意见,我建议您首先尝试protobuf-它是二进制格式(读取:有效),并且得到了广泛支持(存在其他语言的绑定)。 Kryo也很好用(我在生产中有一些带有kryo序列化的开源akka-cluster应用程序),但是在收集/地图处理方面有一些怪癖。