gpt4 book ai didi

java - Akka(java),对所有 child 的非阻塞广播

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:52:58 26 4
gpt4 key购买 nike

假设我有一个地区 Actor ,每个地区都有一定数量的人。你如何向所有人广播消息,知道人员列表可以随时间变化,广播路由器似乎是选择,但问题是他们有最大数量的路由,而且我不能动态地将人员附加到一个路由器。

我的问题是:我知道有一个 EventBus,我可以让我的人订阅事件总线,但我不希望他们收到发布的每条消息,我希望他们收到该地区的消息。

现在在 akka 中,我们必须创建一个具有一定数量路由的路由器,示例:

Router router = new router(person1, person2)

这很糟糕,因为一开始该地区没有人,我不知道哪些人会加入我的地区。

有没有办法制作一种动态路由器:示例:

Region region = new region()
region.router = new Router()
Person person1 = new Person()
region.router.subscribe(person1);
region.router.tell("hello",null);

最佳答案

您的解决方案已经非常接近:您需要一个路由器,但不是特制的预制路由器。相反,只需编写一个将消息转发给订阅者的 Actor :

class MyRouter extends UntypedActor {
final Set<ActorRef> subscribers = new HashSet<ActorRef>();

@Override public void onReceive(Object msg) {
if (msg instanceof Subscribe) {
subscribers.add(getSender());
} else if (msg instanceof Unsubscribe) {
subscribers.remove(getSender());
} else {
for (ActorRef target: subscribers) {
target.tell(msg, getSender());
}
}
}
}

关于java - Akka(java),对所有 child 的非阻塞广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15721741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com