公共类订阅服务器扩展了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“消息是从哪个主题收到的?
发布于 2017-04-12 13:58:07
因此,DistributedPubSub (DPS)只是将消息传递给参与者的一种手段。接收循环并不关心消息是通过tell、ask还是通过DPS发送的,它只知道消息在其收件箱中。更重要的是,DPS只是一个路由器,它对收到的消息调用forward(),因此不会重写将消息发布到DPS的发送者信息。所以你的问题的答案是,你不会知道它是在什么DPS上出现的,我认为如果这很重要,可能是设计出了问题。我想不出比原始消息的发送者或消息本身的实际类型更重要的有效原因。所以我会在类型上进行切换和检查,如果我需要知道它来自哪里,从ActorRef的路径。
https://stackoverflow.com/questions/43345172
复制相似问题