JMS队列(点对点消息)的工作原理如何?

时间:2015-03-05 11:29:09

标签: java spring java-ee jms spring-jms

我正在攻读Spring Core认证,我对 JMS 如何工作以及Spring如何处理它有一些疑问。

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

  1. 消息
  2. 目标
  3. 连接
  4. 会话
  5. 的MessageProducer
  6. 的MessageConsumer
  7. 根据我的理解,消息是与其他实体(必须使用此数据的其他产品)发送和共享的内容,并且消息可以具有不同的形状: TextMessage ObjectMessage MapMessage BytesMessage StreamMessage

    好的,根据我的理解,JMS核心组件的目的地组件定义了谁接收消息以及调度消息的逻辑。

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

    1. 队列,用于定义点对点消息。根据我的理解,我可以有一些 Message Producer 将生成的消息放入队列,然后我有一些消耗消息的 MessageConsumer 。每条消息都可以由单个 MessageConsumer 消费。

      现在我的疑问是: MessageConsumer 消耗由特定的 MessageProducer 放入队列的消息( MessageConsumer <之间存在类似于1对1的关系/ strong>和 MessageProducer )或 MessageProducer 放置与特定 MessageConsumer 相关的ID,必须读取它放入队列的消息

    2. 例如,在第一种情况下,如果我有2个 MessageProducer ,分别命名为 Producer-1 Producer-2 ,我需要2 MessageConsumer 命名为 Consumer-1 Consumer-2 ,其中 Consumer-1 使用生产者生成的消息-1 Consumer-2 使用** Producer-2生成的消息。

      而在第二种情况下,消费者-1 可以消除由 Producer-1 Produer-2 生成的消息,因为< strong> MessageProducer 在队列中放入一条消息,指明必须使用该消息的 MessageConsumer

      究竟如何运作?什么是正确的逻辑?

1 个答案:

答案 0 :(得分:0)

  

如果我有2个MessageProducer,分别命名为Producer-1和   Producer-2我需要有2个MessageConsumer,名为Consumer-1和   Consumer-2,其中Consumer-1使用Producer-1生成的消息   和Consumer-2使用** Producer-2生成的消息。

不是真的。消息使用者连接到队列,它将接收放入队列中的所有消息,而不管生产者。因此,如果您有两个生成器将每个消息放入队列中,则它将由连接到它的单个使用者使用。

如果您希望将不同制作者制作的消息定位到特定消费者,则应使用称为“消息选择器”的概念。为实现这一目标,消息生产者应添加标题&#39;消息(系统标头或自定义消息)然后消息监听器可以指定它们接收与特定标头匹配的消息。