如何在 Akka 中广播所有内容?

How to broadcast-all in Akka?

Java/Akka (v2.3.9) 在这里。我的每个 Akka UntypedActor 子类都能够响应多个“generic”消息,例如 ExecuteOrder66:

// Groovy pseudo-code
class StormTrooper extends UntypedActor {
    @Override
    void onReceive(Object message) throws Exception {
        if(message instanceof ExecuteOrder66) {
            // Betray the Jedi, serve only the emperor.
        }
    }
}

假设我有 100 个不同的 actor 子类,每个都支持 ExecuteOrder66。我需要一种方法将此消息的 broadcast 个实例发送给我的每个演员;所以就像一个 public 广播宣布 每个人 得到。

我认为上面的 Akka 文档 link 让我很接近,但我没有看到向我的每个演员发送 ExecuteOrder66 的文档。有什么想法吗?

问题是“大家”是谁不是很清楚。如果某个 actor a 从远程 actor 系统获取来自其他 actor b 的握手消息,存储 b 的引用,交换一些消息,然后失败并在没有引用的情况下重新启动怎么办bb 是 "everybody" 的一部分吗?谁负责再找演员b?怎么可能知道 b 还活着?

但是,如果您有一个特定的 actor 系统,带有通配符的路径 selection 可以满足您的需求。像这样的东西可能会完成这项工作:

mySystem.actorSelection("akka://mySystemName/**")

此演员 selection 然后可用于 tell (!) 您向系统上的每个演员广播消息。您可能还考虑限制更多一些,select 仅 /user 下的参与者,而不触及系统参与者。

免责声明:我刚刚在 REPL 中设置的一个临时演员系统不会抱怨上述路径,但我没有对其进行彻底测试。可运行的玩具示例可能会有所帮助。