我正在使用AKKA 2.1和Scala 2.10。
我需要多台机器来启动actor系统并实例化一些actor。在此之后,每个系统都需要访问所有其他系统并使用“actorFor(...)”收集对其actor的引用。
但是,我需要一种方法让一个actor系统在连接之前等待其他系统启动,否则我会收到错误。
如果演员系统A在B离线时连接到B,我的程序将失败。但是,如果A连接到B并在B上存在之前获得远程actor引用,则一旦B实际实例化actor,程序就会继续。
简而言之,在尝试连接之前,我需要以某种方式等待B上的创建事件。在Scala + AKKA中有一个很好的方法吗?
答案 0 :(得分:2)
您可能希望查看Akka的群集支持。它允许您在其他计算机加入群集并可用于通信时侦听事件。
答案 1 :(得分:2)
99%的时间解决人们的问题会让你与演员解决问题。 想象一下它是建筑物(ActorSystems)和人物(演员)。
您可以创建一个“接待员”演员,该演员在ActorSystem启动时创建(Akka Extensions可以配置为在ActorSystem启动时加载)在“/ user / receptionist”之类的公共路径下然后告诉接待员挂钩当他/她上线时你和演员X / Y / Z,然后让X / Y / Z与接待员注册。 因此,如果外部演员要求X / Y / Z不存在,它会将请求存储到某个超时或X / Y / Z“报告”。
答案 2 :(得分:0)
首先,actorSelection
现在是获取参与者参考的建议机制,尤其是在整个网络中。见:Akka Docs
这在异步和分布式系统中是一个非常重要的问题。 akka集群支持使用从其类似Dynamo的框架中采用的各种机制。如果你想象你的每个演员都是人,每个演员系统都是建筑物中的人,那么你的任务就像询问鲍勃是否已进入街对面的建筑物。你可以:
actorRef
直到成功并处理错误