0

我遇到的问题是我可以在另一台从机上创建系统。但我不知道如何将零件分配到不同的机器上。IE master、slave1 和 slave2 最终都在同一台机器上,而不是分别位于 101,102 和 103 上。

我正在使用主服务器从本质上管理通过多个服务器的消息工作流。所以主服务器启动创建主服务器参与者,然后执行以下操作:

  • 掌握:
    1. 向从站 1 发送启动消息
    2. 从从站 1 获取成功消息并将消息传递给从站 2
    3. 从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  

所以我可以将系统全部托管在一台机器上。我也可以在一台机器上启动它并让它在另一台远程机器上运行。但是我不能让配置中的每个参与者都在不同的机器上运行。

我很愚蠢,但看不到以什么方式!;)

4

1 回答 1

0
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"
      }
    }
  }
于 2014-05-14T21:23:24.330 回答