共享为远程 类
Akka Remote shared classes
我有两个不同的 Java 8 个项目,它们将存在于不同的服务器上,并且都将使用 Akka(特别是 Akka Remoting)相互通信。
例如,一个应用可能会向另一个应用发送 Fizzbuzz
消息:
public class Fizzbuzz {
private int foo;
private String bar;
// Getters, setters & ctor omitted for brevity
}
我以前从未使用过 Akka Remoting。我假设我需要创建第三个项目,一个 library/jar 用于保存共享消息(例如 Fizzbuzz
和其他),然后将该库作为依赖项拉入两个项目。
有这么简单吗?是否有影响这些 "shared" 消息设计的任何序列化(或其他 Akka and/or 网络)注意事项?提前致谢!
共享库肯定是一种可行的方法,但确实存在序列化问题:
When using remoting for actors you must ensure that the props and messages used for those actors are serializable. Failing to do so will cause the system to behave in an unintended way.
For more information please see Serialization.
基本上,您需要为演员道具和发送的消息提供和配置序列化(当然包括所有嵌套 类)。如果我没记错的话,默认设置会让你启动 运行 而无需任何配置,前提是你通过网络发送的所有内容都是 java-serializable.
然而,default config uses default Java serialization,这是众所周知的非常低效的——所以你可能想切换到 protobuf、kryo,甚至 json。在这种情况下,将序列化实现和绑定作为共享库提供是有意义的 - 无论是专用库还是您在问题中提到的“共享模型”库的一部分 - 取决于您是否想在其他地方重用它并且mind/don不介意到处都是与序列化相关的传递依赖项。
最后,如果你允许一些个人意见,我建议首先尝试 protobuf - 它是二进制格式(阅读:高效)并且得到广泛支持(有其他语言的绑定)。 Kryo 也工作得很好(我有一些闭源的 akka-cluster 应用程序在生产中使用 kryo 序列化),但在 collection/map 处理方面有一些怪癖。
我有两个不同的 Java 8 个项目,它们将存在于不同的服务器上,并且都将使用 Akka(特别是 Akka Remoting)相互通信。
例如,一个应用可能会向另一个应用发送 Fizzbuzz
消息:
public class Fizzbuzz {
private int foo;
private String bar;
// Getters, setters & ctor omitted for brevity
}
我以前从未使用过 Akka Remoting。我假设我需要创建第三个项目,一个 library/jar 用于保存共享消息(例如 Fizzbuzz
和其他),然后将该库作为依赖项拉入两个项目。
有这么简单吗?是否有影响这些 "shared" 消息设计的任何序列化(或其他 Akka and/or 网络)注意事项?提前致谢!
共享库肯定是一种可行的方法,但确实存在序列化问题:
When using remoting for actors you must ensure that the props and messages used for those actors are serializable. Failing to do so will cause the system to behave in an unintended way.
For more information please see Serialization.
基本上,您需要为演员道具和发送的消息提供和配置序列化(当然包括所有嵌套 类)。如果我没记错的话,默认设置会让你启动 运行 而无需任何配置,前提是你通过网络发送的所有内容都是 java-serializable.
然而,default config uses default Java serialization,这是众所周知的非常低效的——所以你可能想切换到 protobuf、kryo,甚至 json。在这种情况下,将序列化实现和绑定作为共享库提供是有意义的 - 无论是专用库还是您在问题中提到的“共享模型”库的一部分 - 取决于您是否想在其他地方重用它并且mind/don不介意到处都是与序列化相关的传递依赖项。
最后,如果你允许一些个人意见,我建议首先尝试 protobuf - 它是二进制格式(阅读:高效)并且得到广泛支持(有其他语言的绑定)。 Kryo 也工作得很好(我有一些闭源的 akka-cluster 应用程序在生产中使用 kryo 序列化),但在 collection/map 处理方面有一些怪癖。