Java 添加将侦听不同RabbitMQ队列的多个侦听器不工作
我有以下SpringXML配置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
<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字段后,它对我有效。谢谢是否可以有两个侦听器容器,每个容器都有多个侦听器?这对我不起作用。是的,当然你可以有多个容器和多个侦听器。”“这对我不起作用”的信息太少了。我建议你开始一个新的问题,而不是在这里评论,包括配置和你所说的“不工作”的确切含义。