pub/sub和点对点中的消息选择器



在阅读《Java Message Service》一书时,我遇到了以下一行,我无法理解:

pub/sub和p2p模型之间的另一个主要区别在于,对于pub/sub模型,当消息被复制到每个订阅者;而对于p2p模型,在将消息添加到队列

我理解pub/sub的说法:在broker将消息发送给订阅者之前,它会应用消息选择器,但对于点对点(队列),假设有2个接收者注册了消息,而不是应用消息选择器时?

pub/sub和p2p模型之间的另一个主要区别在于,对于pub/sub模型,当消息被复制到每个订阅者。

由于pub/sub向所有订阅者发送消息,如果订阅者处的选择器与消息不匹配,则该消息可能会在子订阅者处丢弃。代理不在乎哪些订阅者接收到基于选择器的消息,因为pub/sub在设计上会传递给所有订阅者。根据摘录,这是我的看法。

而对于p2p模型,消息选择器是在消息已添加到队列中。

对于队列,代理必须保证任何给定消息的"精确一次"传递,因此选择首先发生在代理端。假设我们有3个消费者在同一个队列上侦听,并且他们都有相同的选择器。在这种情况下,代理选择一个消费者,并仅将消息传递给该消费者。如果没有消费者具有与消息匹配的选择器,则代理将保留消息,直到它找到消费者,或者直到消息过期。

最新更新