如何在非对称系统中将对象发送到远程 akka 演员

Posted

技术标签:

【中文标题】如何在非对称系统中将对象发送到远程 akka 演员【英文标题】:How to send objects to remote akka actors in an asymmetric system 【发布时间】:2013-04-20 15:29:52 【问题描述】:

在 Joe Armstrong 的 Programming Erlang 中,第 16.1 节,作者描述了一种使用 Erlang 的 OTP 框架进行代码热交换的方法。我希望能够用 Akka 做到这一点。

给定一个非对称 Akka 系统,其中 Comp A 和 Comp B 已建立远程通信。 A 想将 Int => Int 类型的函数 f 发送给 comp B 进行处理。然而,f 的定义在 Comp B 的类路径中不存在。是否可以在不提前传输 A 的 jar 文件并使用自定义引导加载程序(即 OSGI)添加它的情况下完成这项工作?

【问题讨论】:

您应该能够做到这一点,但是您必须读取并发送代表您的函数的类的字节码,并使用线路另一端的自定义 ClassLoader 来加载和实例化它. 【参考方案1】:

我认为这行不通。如果接收 JVM 没有代表要发送的函数的匿名类定义,那么您最终会得到 ClassNotFoundException 或其他类似的东西。我以前试过这个,但没有成功。这与 Java 中的 RMI 类型情况非常相似,在这种情况下,系统的双方都必须有适当的类定义才能正确通信。我猜这就是处理 JVM(和对象序列化)时野兽的本性。

【讨论】:

正如 Steve Waldman 评论的那样,这应该是可能的,但远程类加载并不是 Akka 想要进入的(它是一罐蠕虫);在消息中发送字节并创建 ClassLoader 原则上应该可以工作,但是您必须手动序列化和反序列化函数。

以上是关于如何在非对称系统中将对象发送到远程 akka 演员的主要内容,如果未能解决你的问题,请参考以下文章

Remote Sender akka Actor在其他群集中30秒后终止

Akka 在生成期间键入发送消息

使用 akka 演员休眠

Akka演员(Scala)如何在内存不足时获得堆转储[重复]

如何从演员本身中获取 Akka 演员的名字?

Akka actor 可以参与 XA 交易吗?