【问题标题】:Akka Remote shared classesAkka Remote 共享课程
【发布时间】:2018-10-27 14:03:19
【问题描述】:

我有两个不同的 Java 8 项目,它们将存在于不同的服务器上,它们都将使用 Akka(特别是 Akka Remoting)相互通信。

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

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

    // Getters, setters & ctor omitted for brevity
}

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

就这么简单吗?是否有任何影响这些“共享”消息设计的序列化(或其他 Akka 和/或网络)注意事项?提前致谢!

【问题讨论】:

  • 为什么是DV?这个问题是主题,不是骗子,显示研究并且是SSCCE
  • 您能否说明您的问题与this one 有何不同?
  • 是的先生,它的不同有两个原因:(1) 即,因为其他问题及其接受的答案都没有提到序列化问题(用某事或让他们implement Serializable等)这是我上面提到的主要问题之一......
  • 不确定您所说的“支持的项目”是什么意思,但最后一次发布是 9 月 27 日:github.com/akka/akka/releases,几天前最后一次提交给 master:github.com/akka/akka/commits/master。所以是的,它正在发展,不,StackOverflow 不是官方支持渠道:)
  • 看你想要什么样的官方支持。由于 akka 是由 Lightbend “发明”的,我相信他们对此有付费支持(他们肯定有一些订阅产品可以提供更高级的东西),所以你可能想与 Lightbend merketing 谈谈以获得它 - 但前提是你真的需要 官方 支持 :) 否则,如果“社区支持”就足够了 - 请查看 akka README.md:github.com/akka/akka#community - 有一些指向社区“引力中心”的链接

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


【解决方案1】:

共享库是一种肯定的方法,除了确实存在序列化问题:

Akka-remoting docs:

当对 Actor 使用远程处理时,您必须确保用于这些 Actor 的道具和消息是可序列化的。否则将导致系统以意想不到的方式运行。

更多信息请见Serialization

基本上,您需要为发送的 actor 道具和消息(当然包括所有嵌套类)提供和配置序列化。如果我没记错的话,默认设置会让你在没有任何配置的情况下启动并运行,前提是你通过网络发送的所有内容都是 java-serializable。

但是,default config uses default Java serialization,众所周知,它的效率非常低 - 因此您可能想要切换到 protobuf、kryo 甚至 json。在这种情况下,将序列化实现和绑定提供为共享库是有意义的 - 无论是专用库还是您在问题中提到的“共享模型”的一部分 - 取决于您是否想在其他地方重用它并且介意/不介意到处都有与 serailization 相关的传递依赖。

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

【讨论】:

    猜你喜欢
    • 2013-01-25
    • 2010-12-10
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    相关资源
    最近更新 更多