我正在攻读Spring Core认证,我对 JMS 如何工作以及Spring如何处理它有一些疑问。
所以我知道 JMS核心组件是:
根据我的理解,消息是与其他实体(必须使用此数据的其他产品)发送和共享的内容,并且消息可以具有不同的形状: TextMessage , ObjectMessage , MapMessage , BytesMessage 和 StreamMessage 。
好的,根据我的理解,JMS核心组件的目的地组件定义了谁接收消息以及调度消息的逻辑。
所以我知道我有两种目的地:
队列,用于定义点对点消息。根据我的理解,我可以有一些 Message Producer 将生成的消息放入队列,然后我有一些消耗消息的 MessageConsumer 。每条消息都可以由单个 MessageConsumer 消费。
现在我的疑问是: MessageConsumer 消耗由特定的 MessageProducer 放入队列的消息( MessageConsumer <之间存在类似于1对1的关系/ strong>和 MessageProducer )或 MessageProducer 放置与特定 MessageConsumer 相关的ID,必须读取它放入队列的消息
例如,在第一种情况下,如果我有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 。
究竟如何运作?什么是正确的逻辑?
答案 0 :(得分:0)
如果我有2个MessageProducer,分别命名为Producer-1和 Producer-2我需要有2个MessageConsumer,名为Consumer-1和 Consumer-2,其中Consumer-1使用Producer-1生成的消息 和Consumer-2使用** Producer-2生成的消息。
不是真的。消息使用者连接到队列,它将接收放入队列中的所有消息,而不管生产者。因此,如果您有两个生成器将每个消息放入队列中,则它将由连接到它的单个使用者使用。
如果您希望将不同制作者制作的消息定位到特定消费者,则应使用称为“消息选择器”的概念。为实现这一目标,消息生产者应添加标题&#39;消息(系统标头或自定义消息)然后消息监听器可以指定它们接收与特定标头匹配的消息。