Java 添加将侦听不同RabbitMQ队列的多个侦听器不工作

Java 添加将侦听不同RabbitMQ队列的多个侦听器不工作,java,rabbitmq,spring-amqp,Java,Rabbitmq,Spring Amqp,我有以下SpringXML配置 <bean id="connectionFactory" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory"> <constructor-arg value="xxxxxxxx"/> <property name="usernam

我有以下SpringXML配置

<bean id="connectionFactory"
          class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
 <constructor-arg value="xxxxxxxx"/>
        <property name="username" value="xxxxx"/>
        <property name="password" value="xxxxx"/>
        <property name="channelCacheSize" value="25"/>
        <property name="virtualHost" value="/"/>
        <property name="port" value="3453"/>
 </bean>

 <rabbit:template id="tutorialTemplate" connection-factory="connectionFactory"/>
 <!-- 1st queue -->             
 <rabbit:queue id="veliteQueue" name="ES_queue" durable="true" auto-delete="false" exclusive="false"/>
    
 <rabbit:direct-exchange id="myExchange" durable="true" name="ES_exchange">
     <rabbit:bindings>
        <rabbit:binding queue="veliteQueue" key="logstash"></rabbit:binding>
     </rabbit:bindings>
 </rabbit:direct-exchange>

  <!-- 2nd Queue -->
 <rabbit:queue id="veliteQueue1" name="ES_queue_Temp" durable="true" auto-delete="false" exclusive="false"/> 

  <rabbit:direct-exchange id="myExchange1" durable="true" name="ES_exchange_temp">
    <rabbit:bindings>
        <rabbit:binding queue="ES_queue_Temp" key="logstash_temp"></rabbit:binding>
    </rabbit:bindings>
   </rabbit:direct-exchange> 
   <!-- 2 Listeners for 2 queue's mentioned above --> 
   <bean id="aListener" class="com.vzw.es.cosumer.SpringMessageListener" autowire="byName"/>
<bean id="aListener1" class="com.vzw.es.cosumer.SpringMessageListener1" autowire="byName"/>

<rabbit:listener-container id="myListenerContainer" connection-factory="connectionFactory" acknowledge="auto" prefetch="750" concurrency="1">
    <rabbit:listener ref="aListener" queues="veliteQueue"/>
    <rabbit:listener ref="aListener1" queues="veliteQueue1"/>
</rabbit:listener-container>

现在在我的Java代码中有两个侦听器类:com.vzw.es.cosumer.SpringMessageListener和com.vzw.es.cosumer.SpringMessageListener1。现在,当我运行我的主类时,只调用了1个侦听器的onMessage方法,即SpringMessageListener1,我确实从RabbitMQ prespective进行了检查,两个队列都有足够的消息可以使用


另外,当我从xml SpringMessageListener中注释掉第二个队列及其侦听器时,它工作得非常好。

这是容器解析器中的一个错误,每个侦听器都有自己的容器(名称空间只是指定公共属性的一种方便方式)。如果删除
id=“myListenerContainer”
,它将起作用,因为每个容器都会得到一个(不同的)生成名称。使用指定的id,两个bean获得相同的名称,最后一个定义替换第一个定义

或者,声明两个单独的容器元素,具有不同的ID,并且每个元素只有一个侦听器

谢谢你找到这个

请打开一个


编辑:这个问题是。

创建了一张JIRA票证,并将其分配给您:)顺便说一句,在删除id字段后,它对我有效。谢谢是否可以有两个侦听器容器,每个容器都有多个侦听器?这对我不起作用。是的,当然你可以有多个容器和多个侦听器。”“这对我不起作用”的信息太少了。我建议你开始一个新的问题,而不是在这里评论,包括配置和你所说的“不工作”的确切含义。