我遇到的问题是我可以在另一台从机上创建系统。但我不知道如何将零件分配到不同的机器上。IE master、slave1 和 slave2 最终都在同一台机器上,而不是分别位于 101,102 和 103 上。
我正在使用主服务器从本质上管理通过多个服务器的消息工作流。所以主服务器启动创建主服务器参与者,然后执行以下操作:
- 掌握:
- 向从站 1 发送启动消息
- 从从站 1 获取成功消息并将消息传递给从站 2
- 从slave 2获取成功消息然后关闭系统
- Slave1:从服务器获取消息并成功回复主服务器
- Slave2:从服务器获取消息并成功回复主服务器
后来我想水平缩放这些中的每一个 - 但是在此之前遇到了一个问题。所有远程的东西只能在一台机器上运行。
我正在使用远程,因此部分配置如下所示:
akka {
actor {
provider = "akka.remote.RemoteActorRefProvider"
deployment {
"/masterCreatorActor/*" {
remote = "akka.tcp://RemoteActorSystem@192.168.56.101:2552"
}
"/slave1Actor/*" {
remote = "akka.tcp://RemoteActorSystem@192.168.56.102:2552"
}
"/slave2Actor/*" {
remote = "akka.tcp://RemoteActorSystem@192.168.56.103:2552"
}
}
}
创建actorSystem和主actor的代码
val config = ConfigFactory.load("remotecreation")
val system = ActorSystem("PromoAnalysisSystem", config)
def act = system.actorOf(Props(classOf[MasterCreatorActor],OnFinished _),
name = "masterCreatorActor" )
然后在主actor内部我使用slave1,当它收到一条消息时这样做:
val slave1 = context.actorOf(Props[Slave1Actor],name = "slave1Actor")
slave1 ! slave1StartMessage
所以我可以将系统全部托管在一台机器上。我也可以在一台机器上启动它并让它在另一台远程机器上运行。但是我不能让配置中的每个参与者都在不同的机器上运行。
我很愚蠢,但看不到以什么方式!;)