首页 > 解决方案 > Sping .jms.listener 阻止另一个侦听器读取 JMS 消息

问题描述

我有两个应用程序 Apple 和 Pear,它们使用上述类来侦听 WildFly ( 10.1.0 ) 中配置的 JMS 队列。Spring 配置如下所示。

<bean id="appleMessageListenerContainer"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer"
    depends-on="transactionManager">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="destination" ref="outQueue" />
    <property name="destinationResolver" ref="jmsDestinationResolver" />
    <property name="messageListener" ref="AppleMessageListener" />
    <property name="messageSelector" value="ID='APPLE_ID'" />
    <property name="transactionManager" ref="transactionManager" />
</bean>

<bean id="pearMessageListenerContainer"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer"
    depends-on="transactionManager">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="destination" ref="outQueue" />
    <property name="destinationResolver" ref="jmsDestinationResolver" />
    <property name="messageListener" ref="PearMessageListener" />
    <property name="messageSelector" value="ID='PEAR_ID'" />
    <property name="transactionManager" ref="transactionManager" />
</bean>

预期过程如下:-

Apple 应用程序侦听器 ( AppleMessageListener ) 将从“outQueue”JMS 队列中读取消息。消息被更新,AppleMessageListener 将把消息写到“outQueue”,senderId 设置为“PEAR_ID”,这样 PearMessageListener 就会读取消息。AppleMessageListener 将在不同的“inQueue”或超时等待 Pear 应用程序的响应。

不幸的是,AppleMessageListener 将消息写入“outQueue”。AppleMessageListener 等待响应超时。只有在此超时之后,PearMessageListener 才会从“outQueue”中读取消息。就好像在 AppleMessageListener 等待响应时,PearMessageListener 被阻止读取消息。

请对为什么会这样的任何想法。谢谢您的帮助。

皮特

标签: javaspringspring-jmswildfly-10

解决方案


推荐阅读