如何在 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
的引用,交换一些消息,然后失败并在没有引用的情况下重新启动怎么办b
? b
是 "everybody" 的一部分吗?谁负责再找演员b
?怎么可能知道 b
还活着?
但是,如果您有一个特定的 actor 系统,带有通配符的路径 selection 可以满足您的需求。像这样的东西可能会完成这项工作:
mySystem.actorSelection("akka://mySystemName/**")
此演员 selection 然后可用于 tell
(!
) 您向系统上的每个演员广播消息。您可能还考虑限制更多一些,select 仅 /user
下的参与者,而不触及系统参与者。
免责声明:我刚刚在 REPL 中设置的一个临时演员系统不会抱怨上述路径,但我没有对其进行彻底测试。可运行的玩具示例可能会有所帮助。
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
的引用,交换一些消息,然后失败并在没有引用的情况下重新启动怎么办b
? b
是 "everybody" 的一部分吗?谁负责再找演员b
?怎么可能知道 b
还活着?
但是,如果您有一个特定的 actor 系统,带有通配符的路径 selection 可以满足您的需求。像这样的东西可能会完成这项工作:
mySystem.actorSelection("akka://mySystemName/**")
此演员 selection 然后可用于 tell
(!
) 您向系统上的每个演员广播消息。您可能还考虑限制更多一些,select 仅 /user
下的参与者,而不触及系统参与者。
免责声明:我刚刚在 REPL 中设置的一个临时演员系统不会抱怨上述路径,但我没有对其进行彻底测试。可运行的玩具示例可能会有所帮助。