Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同时配置两个路由器的Akka路由_Java_Akka - Fatal编程技术网

Java 同时配置两个路由器的Akka路由

Java 同时配置两个路由器的Akka路由,java,akka,Java,Akka,我有一个简单的非类型转换器,它有一组订阅者。Actor可以处理两种类型的消息(“SUB”-将发送者添加到订阅者”,“UNSUB”-从订阅者中删除发送者)和其他重新发送到订阅者的消息 private static class Dispatcher extends UntypedActor { private Set<ActorRef> subscribers; public Dispatcher() { subscribers = Sets.newHa

我有一个简单的非类型转换器,它有一组订阅者。Actor可以处理两种类型的消息(“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());
        }
    }
}
每个路由器将创建个人路由器组,但它不适合我。我希望路由器使用相同的参与者,因为我有以下用例:

  • 参与者A和B向broadCastRef发送消息“SUB”
  • broadCastRef将消息广播给它自己的2个子角色(X1和X2)(routeeCount=2)
  • 从现在起,我将使用roundRobinRef向参与者A和B传递消息

  • 因此,问题是如何在两个不同的路由器参与者中重用参与者?

    对于您的用例,您不需要两个不同的路由器,因为您只需发送包含您的订阅请求的
    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");