У меня есть два приложения Apple и Pear, которые используют вышеупомянутый класс для прослушивания настроенной очереди JMS в WildFly (10.1.0).Конфигурация 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) будет читать сообщение из очереди JMS outQueue.Сообщение обновляется, и AppleMessageListener записывает сообщение в «outQueue» с senderId, установленным в «PEAR_ID», так что PearMessageListener будет читать сообщение.AppleMessageListener будет ожидать ответа от приложения Pear на другой «inQueue» или тайм-аут.
К сожалению, происходит то, что AppleMessageListener записывает сообщение в «outQueue».Тайм-аут AppleMessageListener ожидает ответа.Только после этого таймаута PearMessageListener считывает сообщение из «outQueue».Это как если бы AppleMessageListener ожидал ответа, PearMessageListener не может прочитать сообщение.
Любые мысли о том, почему это так, пожалуйста.Спасибо за вашу помощь.
Пит