Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JMS队列(点对点消息)究竟是如何工作的?_Java_Spring_Jakarta Ee_Jms_Spring Jms - Fatal编程技术网

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放入队列的消息(在MessageConsumerMessageProducer之间存在类似于1对1的关系)或者MessageProducer放入一个与特定MessageConsumer相关的id,该id必须读取放入队列的消息

  • 那么比如说,,在第一种情况下,如果我有2个MessageProducer分别命名为Producer-1Producer-2,我需要有2个MessageConsumer命名为Consumer-1Consumer-2其中Consumer-1消费从中生成的消息Producer-1Consumer-2使用**Producer-2)生成的消息

    相反,在第二种情况下,MessageProducer-1可以使用由Producer-1Produer-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个使用者。