繁体   English   中英

等待akka actor系统可用

[英]Wait for akka actor system to become available

我正在将AKKA 2.1与Scala 2.10一起使用。

我需要多台机器来启动actor系统并实例化一些actor。 此后,每个系统都需要访问所有其他系统,并使用“ actorFor(...)”来收集对其参与者的引用。

但是,我需要一种actor系统在连接之前等待其他系统引导的方法,否则会出错。

如果角色系统A在B脱机时连接到B,则我的程序失败。 但是,如果A连接到B并在它存在于B之前获得了远程actor引用,则一旦B实际上实例化actor,程序就可以继续进行。

简而言之,在尝试连接到B之前,我需要某种方式等待创建事件。 在Scala + AKKA中有什么好方法吗?

您可能需要研究对Akka的群集支持。 它使您可以在其他计算机加入群集并可以进行通信时侦听事件。

99%的时间解决与人的问题会让您与演员解决。 想象它是建筑物(演员系统)和人员(演员)。

您可以在“ / user / receptionist”这样的通用路径下创建一个在ActorSystem启动时创建的“接待员” actor(可以在ActorSystem启动时将Akka Extensions配置为加载)创建,然后告诉接待员与您联系演员X / Y / Z上线后,让X / Y / Z向接待员注册。 因此,如果外部参与者提出要求时,如果X / Y / Z不存在,它将存储请求直到超时或X / Y / Z“报告”。

首先, actorSelection现在是建议的机制,用于获取对参与者的引用,尤其是在整个网络中。 参见: Akka文档

在异步和分布式系统中,这是一个不平凡的问题。 akka群集支持使用了从类似于dynamo的框架中采用的各种机制。 如果您想象每个参与者都是人,每个参与者系统都是建筑物中的人,则您的任务类似于询问鲍勃是否已穿过马路进入建筑物。 您可以:

  • 继续呼叫该建筑物,直到鲍勃接听为止。 即发送一条消息,尝试获取actorRef直到成功并处理错误
  • 当鲍勃到来时叫鲍勃给你打电话。 但这确实是一个难关,因为鲍勃(Bob)也不知道你在你的大楼里。
  • 您可以引入一个“种子” actor系统,所有其他actor系统在创建时都会隐式地意识到这一点,并且一旦有actor就会向该位置发送一条消息。 这实际上将创建一个集中式存储库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM