Akka:订阅者处理多个主题

时间:2017-04-11 11:53:44

标签: akka akka-cluster

public class Subscriber扩展了UntypedActor {

public Subscriber() {
    ActorRef mediator =
            DistributedPubSub.get(getContext().system()).mediator();
    // subscribe to the topic named "content"
    mediator.tell(new DistributedPubSubMediator.Subscribe("content", getSelf()),
            getSelf());
    mediator.tell(new DistributedPubSubMediator.Subscribe("content_2", getSelf()),
            getSelf());
}

public void onReceive(Object msg) {
    if (msg instanceof String)
        System.out.println("Message received: " + msg );
    else if (msg instanceof DistributedPubSubMediator.SubscribeAck)
        System.out.println("subscribing");
    else
        unhandled(msg);
}

}

现在假设两个主题具有相同的结构名称(例如foo)但具有不同的类型。在这种情况下,订户将如何从哪个主题收到“foo”消息?

1 个答案:

答案 0 :(得分:0)

所以DistributedPubSub(DPS)只是一种向演员发送消息的方法。接收循环并不关心消息是通过tell,ask还是通过DPS发送的,它只知道消息在其收件箱中。更重要的是,DPS只是一个路由器,因为它对收到的消息调用forward(),因此它不会重写发送消息给DPS的发送者信息。所以你的问题的答案是你不知道它的DPS是什么,我认为如果重要的是设计可能有问题。我无法想出为什么这将是重要的,而不是原始消息的发件人或消息本身的实际类型。所以我会切换和检查类型,如果我需要知道它来自哪里,从ActorRef的路径。