JMS中的点对点和发布/订阅模型

22

我对JMS还不熟悉。我从一个Java应用程序向Topic发布消息并从客户端(node.js Javascript)监听消息开始进行“hello world”操作。我阅读了维基百科入口,但是根据我之前的理论理解还有一些问题。

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

在发布/订阅模型的情况下,与点对点几乎相同,除了我们使用Topic而不是Queue。在此模型中,主题上可以有多个消费者。一旦消息被发布,所有订阅者都会收到通知。现在,如果订阅者中的任何一个发送有关已发布消息的确认,则消息将被视为已被消耗,并且不再对新订阅者可用?

1个回答

37

点对点(Point to Point)是指从一个应用程序(生产者或发送者)通过队列向另一个应用程序(消费者/接收方)发送消息。队列上可能会有多个消费者监听,但只能有一个消费者获取消息。因此,这是一种点对点或一对一的传输。

另一方面,发布/订阅(Publish/Subscribe)是另一种消息传递模型,其中一个消息(或常称为发布)通过主题(topic)发送给多个消费者(或订阅者)。主题(topic)是发布者和订阅者之间的链接。订阅者可能会确认已发布的消息,也可能不会确认。像JMS这样的实现会向消息提供程序而不是消息发送者确认消息。所有订阅者(持久和非持久)均会接收到公告,除非它是保留的(retained)公告,否则在同一主题上的任何新订阅者都将无法获得该公告。

我建议您进一步阅读以下内容:

  1. 持久订阅(Durable subscription)
  2. 非持久订阅(Non-durable subscription)
  3. 保留公告(Retained publication)

4
这篇文章介绍了点对点和发布/订阅两种JMS消息模型之间的差异。原文中以表格形式呈现了相同的信息。 - Alexey
@Alexey,你的链接已经失效了。 - Justin Bertram
1
因此,您可以使用Web存档:https://web.archive.org/web/20170608175309/verticalhorizons.in/difference-between-point-to-point-and-publishsubscribe-jms-messaging-models/ - Alexey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接