Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/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 Spring JMS MessageListenerContainer是否同时接收消息?_Java_Jms_Mq_Spring Jms - Fatal编程技术网

Java Spring JMS MessageListenerContainer是否同时接收消息?

Java Spring JMS MessageListenerContainer是否同时接收消息?,java,jms,mq,spring-jms,Java,Jms,Mq,Spring Jms,我想知道如果指向某个主题的MessageListenerContainer同时收到2条(或更多)消息会发生什么情况 例如,应用程序的两个用户同时触发发布,因此2个jmstemplate调用向同一主题发送两条不同的消息 容器将如何处理此问题 容器是否会同时创建两个线程来调用MessageListenerAdapter(应该实现为线程安全的) 或者容器是否只有一个线程串行(顺序)调用MessageListenerAdapter 并发性设置控制有多少侦听器同时使用消息。对于主题,您不应使用多个使用者,

我想知道如果指向某个主题的MessageListenerContainer同时收到2条(或更多)消息会发生什么情况

例如,应用程序的两个用户同时触发发布,因此2个jmstemplate调用向同一主题发送两条不同的消息

容器将如何处理此问题

  • 容器是否会同时创建两个线程来调用MessageListenerAdapter(应该实现为线程安全的)
  • 或者容器是否只有一个线程串行(顺序)调用MessageListenerAdapter

  • 并发性设置控制有多少侦听器同时使用消息。对于主题,您不应使用多个使用者,否则,该消息可能在同一节点上使用两次

    <jms:listener-container
      container-type="default"
      connection-factory="connectionFactory"
      acknowledge="auto"
      concurrency="1"     
      cache="consumer">
      <jms:listener destination="TEST.FOO" 
                    ref="simpleMessageListener"
                    method="onMessage" />
    </jms:listener-container>
    
    
    
    看到这个了吗。。。

    春季文档。。。
    并发设置控制有多少侦听器同时使用消息。对于主题,您不应使用多个使用者,否则,该消息可能在同一节点上使用两次

    <jms:listener-container
      container-type="default"
      connection-factory="connectionFactory"
      acknowledge="auto"
      concurrency="1"     
      cache="consumer">
      <jms:listener destination="TEST.FOO" 
                    ref="simpleMessageListener"
                    method="onMessage" />
    </jms:listener-container>
    
    
    
    看到这个了吗。。。

    春季文档。。。

    谢谢您的回复。但是如果我将并发设置为1,这是否意味着容器/适配器同时接收的2条消息将被串行处理,而不是并行处理?是的,对于每个节点有1个侦听器的主题,将串行处理2条单独的消息。如果为同一主题设置
    concurrency>1
    ,则每个侦听器将并行处理相同的消息;这对于主题来说是毫无意义的。你的用例是什么;留言里有什么?如果是新闻广播或类似内容,请使用主题,但如果您需要对任何唯一消息(例如,客户订单)进行一次处理,请使用队列并设置
    concurrency>1
    以并行处理许多消息。谢谢您的回复。但是如果我将并发设置为1,这是否意味着容器/适配器同时接收的2条消息将被串行处理,而不是并行处理?是的,对于每个节点有1个侦听器的主题,将串行处理2条单独的消息。如果为同一主题设置
    concurrency>1
    ,则每个侦听器将并行处理相同的消息;这对于主题来说是毫无意义的。你的用例是什么;留言里有什么?如果是新闻广播或类似内容,请使用主题,但如果您需要对任何唯一消息(例如,客户订单)进行一次处理,请使用队列并设置
    concurrency>1
    以并行处理多条消息。