- java/
- Java JMS队列(点对点消息)究竟是如何工作的?
Java JMS队列(点对点消息)究竟是如何工作的?
Java JMS队列(点对点消息)究竟是如何工作的?,java,spring,jakarta-ee,jms,spring-jms,Java,Spring,Jakarta Ee,Jms,Spring Jms,我正在学习Spring核心认证,我对JMS如何工作以及Spring如何处理它有些怀疑
因此我知道JMS核心组件是:
信息
目的地
联系
会议
消息生产者
消息消费者
据我所知,消息是与其他实体(必须使用此数据的其他产品)发送和共享的内容,消息可以有不同的形状:文本消息,对象消息,映射消息,字节消息和流消息
好的,据我所知,JMS核心组件的目的地组件定义了谁接收消息以及发送消息的逻辑
所以我知道我有两种目的地:
队列:定义点到点的消息。据我所知,我可以让一些消息生产者将生成的消息放入队列,然后让一
我正在学习Spring核心认证,我对JMS如何工作以及Spring如何处理它有些怀疑
因此我知道JMS核心组件是:
信息
目的地
联系
会议
消息生产者
消息消费者
据我所知,消息是与其他实体(必须使用此数据的其他产品)发送和共享的内容,消息可以有不同的形状:文本消息,对象消息,映射消息,字节消息和流消息
好的,据我所知,JMS核心组件的目的地组件定义了谁接收消息以及发送消息的逻辑
所以我知道我有两种目的地:
队列:定义点到点的消息。据我所知,我可以让一些消息生产者将生成的消息放入队列,然后让一些消息消费者使用消息。每条消息都可以由一个消息消费者使用
现在我的疑问是:MessageConsumer消费由特定的MessageProducer放入队列的消息(在MessageConsumer和MessageProducer之间存在类似于1对1的关系)或者MessageProducer放入一个与特定MessageConsumer相关的id,该id必须读取放入队列的消息
那么比如说,,在第一种情况下,如果我有2个MessageProducer分别命名为Producer-1和Producer-2,我需要有2个MessageConsumer命名为Consumer-1和Consumer-2其中Consumer-1消费从中生成的消息Producer-1和Consumer-2使用**Producer-2)生成的消息
相反,在第二种情况下,MessageProducer-1可以使用由Producer-1和Produer-2生成的消息,因为MessageProducer将消息放入队列中,指定谁是必须使用该消息的MessageConsumer
具体是如何工作的?正确的逻辑是什么
如果我有两个消息生产者,分别命名为生产者-1和
Producer-2我需要2个名为Consumer-1的MessageConsumer和
Consumer-2,其中Consumer-1使用从Producer-1生成的消息
和Consumer-2使用**Producer-2)生成的消息
不是真的。消息使用者连接到队列,它将接收放入队列中的所有消息,而与生产者无关。因此,如果有两个生产者将消息分别放入队列中,那么它将被连接到它的单个消费者使用
如果您希望由不同的生产者针对特定的消费者生成消息,则应使用称为“消息选择器”的概念。为了实现这一点,消息生产者应该向消息(系统头或自定义头)添加“头”,然后消息侦听器可以指定接收与特定头匹配的消息 好的,那么你是说消息包含类似于ID的内容,它指定了消费者必须阅读的内容?还是怎样如果我有两个生产者将消息放入队列,两个消费者在同一队列中会发生什么情况?不。我想说的是,如果需要生产者1将其消息传递给消费者1,生产者1必须**向消息**显式添加id,消费者1必须指定它只侦听包含此类id的消息(id是消息头)。默认情况下,消息将不包含任何id。如果您没有添加任何可用作消息选择器**和**的头,则有2个使用者连接到它,无法保证谁会收到什么。唯一可以保证的是,消息将恰好传递给1个使用者。