Akka 在远程参与者创建期间,参与者是否序列化?

Akka 在远程参与者创建期间,参与者是否序列化?,akka,Akka,假设我有两个远程节点A和B,它们都通过TCP彼此可见,并且都运行ActorSystems 节点A的类路径中有一个包含Actor Foo的jar。节点B不存在 如果节点A上的ActorSystem告诉节点B在其ActorSystem中远程创建一个Foo Actor,这会起作用吗?Foo的字节码是否会通过网络发送给B,或者节点B是否需要/期望在其类路径中包含Foo?不,它不会工作。当节点A上的actor系统告诉节点B上的actor系统创建一个Fooactor时,节点A不会创建actor并通过线路发送

假设我有两个远程节点A和B,它们都通过TCP彼此可见,并且都运行ActorSystems

节点A的类路径中有一个包含Actor Foo的jar。节点B不存在


如果节点A上的ActorSystem告诉节点B在其ActorSystem中远程创建一个Foo Actor,这会起作用吗?Foo的字节码是否会通过网络发送给B,或者节点B是否需要/期望在其类路径中包含Foo?

不,它不会工作。当节点A上的actor系统告诉节点B上的actor系统创建一个
Foo
actor时,节点A不会创建actor并通过线路发送它。相反,节点A向节点B发送
Foo
Props
(即,创建
Foo
参与者的配方),并让节点B创建
Foo
的实例(
Foo
Props
必须是可序列化的)。此外,节点B的actor系统的类加载器必须有一个包含
Foo
类的jar。从:

远程创建参与者

如果要在Akka远程处理中使用创建功能,则必须以以下方式进一步修改
application.conf
文件(仅显示部署部分):

上述配置指示Akka在创建路径为
/sampleActor
的参与者时做出反应,即使用
system.actorOf(Props(…),“sampleActor”)
。这个特定的actor不会被直接实例化,而是会要求远程系统的远程守护进程创建actor,在这个示例中,它对应于
sampleActorSystem@127.0.0.1:2553

配置上述属性后,您将在代码中执行以下操作:

actor类SampleActor必须对使用它的运行时可用,即actor系统的类加载器必须有一个包含该类的JAR。

在同一部分的较低位置:

请注意,远程部署不是远程代码加载,要部署到远程系统上的Actors类需要存在于该远程系统上


不,不行。当节点A上的actor系统告诉节点B上的actor系统创建一个
Foo
actor时,节点A不会创建actor并通过线路发送它。相反,节点A向节点B发送
Foo
Props
(即,创建
Foo
参与者的配方),并让节点B创建
Foo
的实例(
Foo
Props
必须是可序列化的)。此外,节点B的actor系统的类加载器必须有一个包含
Foo
类的jar。从:

远程创建参与者

如果要在Akka远程处理中使用创建功能,则必须以以下方式进一步修改
application.conf
文件(仅显示部署部分):

上述配置指示Akka在创建路径为
/sampleActor
的参与者时做出反应,即使用
system.actorOf(Props(…),“sampleActor”)
。这个特定的actor不会被直接实例化,而是会要求远程系统的远程守护进程创建actor,在这个示例中,它对应于
sampleActorSystem@127.0.0.1:2553

配置上述属性后,您将在代码中执行以下操作:

actor类SampleActor必须对使用它的运行时可用,即actor系统的类加载器必须有一个包含该类的JAR。

在同一部分的较低位置:

请注意,远程部署不是远程代码加载,要部署到远程系统上的Actors类需要存在于该远程系统上

akka {
  actor {
    deployment {
      /sampleActor {
        remote = "akka.tcp://sampleActorSystem@127.0.0.1:2553"
      }
    }
  }
}
val actor = system.actorOf(Props[SampleActor], "sampleActor")
actor ! "Pretty slick"