gpt4 book ai didi

java - 同时使用两个路由器配置的 Akka 路由

转载 作者:行者123 更新时间:2023-12-01 13:47:18 25 4
gpt4 key购买 nike

我有简单的UntypedActor,它有一组订阅者。 Actor 可以处理 2 种类型的消息('SUB' - 将发送者添加到订阅者,'UNSUB' - 从订阅者中删除发送者)以及重新发送给订阅者的其他消息。

private static class Dispatcher extends UntypedActor {
private Set<ActorRef> subscribers;

public Dispatcher() {
subscribers = Sets.newHashSet();
}

@Override
public void onReceive(Object o) throws Exception {
if ("SUB".equals(o)) {
subscribers.add(getSender());
return;
}

if ("UNSUB".equals(o)) {
subscribers.remove(getSender());
return;
}

for (ActorRef subscriber : subscribers) {
subscriber.tell(o, getSender());
}
}
}

我想创建具有两种不同策略的路由器:广播、循环。

    final int routeeCount = 2;

BroadcastRouter broadcastRouter = new BroadcastRouter(routeeCount);
RoundRobinRouter roundRobinRouter = new RoundRobinRouter(routeeCount);

ActorRef broadCastRef = actorSystem.actorOf(Props.create(Dispatcher.class)
.withRouter(broadcastRouter), "Broadcast");
ActorRef roundRobinRef = actorSystem.actorOf(Props.create(Dispatcher.class)
.withRouter(roundRobinRouter), "RoundRobin");

每个路由器都会创建个人路由器组,但这不适合我。我想使用相同的参与者的路由器,因为我有以下用例:

  1. 参与者ABbroadCastRef发送消息'SUB'
  2. broadCastRef 向其自己的 2 个子 Actor(X1X2)广播消息 (routeeCount = 2);
  3. 从现在开始,我将使用roundRobinRef将消息传递给参与者AB

所以问题是如何在两个不同的路由器actor中重用actor?

最佳答案

对于您的用例,您不需要两个不同的路由器,因为您只需发送包含订阅请求的 akka.routing.Broadcast 消息,它将被路由到 RoundRobinRouter 的所有路由.

一般来说,如果您想使用两个不同的路由器路由到同一组目标,那么您需要单独创建路由并将它们传递给路由器,如here所述。 (向下滚动一点)。

关于java - 同时使用两个路由器配置的 Akka 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20265725/

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