21

我是 JMS 的新手。我从“hello world”开始,我在主题上发布来自 java 应用程序的消息并从客户端(node.js Javascript)监听它。我已经浏览了这个维基百科条目,但根据我之前的理论理解,我有一些问题。

根据我的理解,点对点是队列实现,最多可以有一个消费者订阅队列,并且只能被那个消费者消费。生产者和消费者都不知道彼此。在我的例子中,队列托管在消息代理上 Apache ActiveMQ。队列可以由生产者在发布消息之前创建(也可以提前从控制台创建)。

在发布/订阅模型的情况下,它几乎与点对点相同,只是我们使用主题而不是队列。在此模型中,该主题可能会有更多的消费者。消息发布后,将通知所有订阅者。现在,如果有任何订阅者,发送已发布消息的确认,消息将被视为已消费并且不再可供新订阅者使用?

4

1 回答 1

36

点对点意味着消息通过队列从一个应用程序(生产者或发送者)发送到另一个应用程序(消费者/接收者)。可以有多个消费者在一个队列上监听,但只有一个消费者会收到消息。因此它是点对点或一对一。

另一方面,发布/订阅是另一种消息传递模型,其中消息(或通常称为的发布)通过主题发送给多个消费者(或订阅者)。主题是发布者和订阅者之间的链接。订阅者可能会或可能不会确认发布的消息。JMS 等实现向消息传递提供者确认消息,但不确认消息的发送者。所有订阅者都将收到出版物,包括持久版和非持久版。除非它是保留的发布,否则同一主题的任何新订阅者都不会获得该发布。

我建议您进一步阅读,

  1. 持久订阅
  2. 非持久订阅
  3. 保留出版物
于 2012-11-15T04:26:04.837 回答