Java 同时配置两个路由器的Akka路由
我有一个简单的非类型转换器,它有一组订阅者。Actor可以处理两种类型的消息(“SUB”-将发送者添加到订阅者”,“UNSUB”-从订阅者中删除发送者)和其他重新发送到订阅者的消息Java 同时配置两个路由器的Akka路由,java,akka,Java,Akka,我有一个简单的非类型转换器,它有一组订阅者。Actor可以处理两种类型的消息(“SUB”-将发送者添加到订阅者”,“UNSUB”-从订阅者中删除发送者)和其他重新发送到订阅者的消息 private static class Dispatcher extends UntypedActor { private Set<ActorRef> subscribers; public Dispatcher() { subscribers = Sets.newHa
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());
}
}
}
每个路由器将创建个人路由器组,但它不适合我。我希望路由器使用相同的参与者,因为我有以下用例:
因此,问题是如何在两个不同的路由器参与者中重用参与者?对于您的用例,您不需要两个不同的路由器,因为您只需发送包含您的订阅请求的
akka.routing.Broadcast
消息,它将被路由到RoundRobinRouter的所有路由对象
通常,如果您想使用两个不同的路由器路由到同一组目标,那么您需要分别创建路由对象,并将它们传递给所讨论的路由器(向下滚动一点)
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");