Akka 在远程参与者创建期间,参与者是否序列化?
假设我有两个远程节点A和B,它们都通过TCP彼此可见,并且都运行ActorSystems 节点A的类路径中有一个包含Actor Foo的jar。节点B不存在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上的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"