java - JMS 中的点对点与发布/订阅模型

标签 java jms publish-subscribe mom

我是 JMS 的新手。我从“hello world”开始,我在主题上发布来自 java 应用程序的消息, 从客户端(node.js Javascript)收听它。我经历了this wikipedia entry , 但我有一些问题基于我以前的理论理解。

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

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

最佳答案

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

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

我建议您进一步阅读,

  1. Durable subscription
  2. Non-durable subscription
  3. Retained publication

关于java - JMS 中的点对点与发布/订阅模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13377703/

相关文章:

java - 在 EMR 上找不到类 Main$MapClass

java - 使用 thymeleaf、Spring Boot 获取复选框列表的值

java - jms如何与底层数据库交互?

jms - WS02 Websphere MQ 的 JMS 传输

javascript - 全局观察者对象与 mixin 的优缺点

java - 对 Java 多线程网络应用程序进行单元测试

java - 消息卡在 activemq 队列中

qt - 如何在 Qt 中模拟消息总线?

java - 发布者和订阅者是否在同一个线程上

java - 多模块vaadin应用问题