JMS队列(点对点消息)究竟是如何工作的?

How exactly works JMS queue (point to point message)?

我正在学习 Spring 核心认证,我对 JMS 的工作原理以及 Spring 如何处理它有一些疑问。

所以我知道 JMS 核心组件 是:

  1. 留言
  2. 目的地
  3. 连接
  4. 会话
  5. MessageProducer
  6. 消息消费者

据我了解,消息 是发送并与其他实体(必须使用此数据的其他产品)共享的内容,消息可以有不同的形状:TextMessageObjectMessageMapMessageBytesMessageStreamMessage.

好的,据我了解,JMS 核心组件的 Destination 组件定义了接收消息的人员以及分发消息的逻辑。

所以我知道我有两种目的地:

  1. Queue: 定义 点对点 消息。据我了解,我可以有一些 Message Producer 将生成的消息放入队列,然后我有一些 MessageConsumer 可以使用消息。每条消息可由单个 MessageConsumer.

    使用

    现在我的疑问是:MessageConsumer 消费了由特定的 MessageProducer 放入队列的消息(有类似 1 到1 MessageConsumerMessageProducer 之间的关系)或 MessageProducer 放置与特定 [=30] 相关的 id =]MessageConsumer 必须读取它放入队列的消息?

例如,在第一种情况下,如果我有 2 个 MessageProducer 分别命名为 Producer-1Producer -2 我需要有 2 个 MessageConsumer 命名为 Consumer-1Consumer-2 其中 Consumer-1 消费从 Producer-1 产生的消息和 Consumer-2 消费从**制作人-2).

在第二种情况下,Consumer-1 可以使用 Producer-1 产生的消息Produer-2 因为 MessageProducer 将一条消息放入队列中,指定谁是必须使用该消息的 MessageConsumer

具体是如何运作的?正确的逻辑是什么?

if I have 2 MessageProducer respectivelly named Producer-1 and Producer-2 I need to have 2 MessageConsumer named Consumer-1 and Consumer-2 where Consumer-1 consume messages produced from Producer-1 and Consumer-2 consume messages produced from **Producer-2).

不是真的。消息使用者连接到 queue 并且它将接收放入 queue 中的所有消息,而不考虑生产者。因此,如果您有两个生产者,每个生产者都在 queue 中放置一条消息,那么它将被连接到它的单个消费者消费。

如果您希望让不同生产者针对特定消费者生成的消息,您应该使用一个称为 'message selectors' 的概念。为此,消息生产者应将 'headers' 添加到消息(系统 header 或自定义消息),然后消息侦听器可以指定他们接收与特定 header 匹配的消息。