我有一个队列(Active MQ)。我有一个生产者将消息发送到队列,我有一个消费者从队列中读取消息。消费者委托将消息处理到新线程,并处理另一条消息。
我的使用者实现了javax.jms.MessageListener及其onMessage()方法。
它是一个Spring应用程序。 使用者的applicationContext.xml包含以下内容:
<!-- ActiveMQ broker -->
<amq:connectionFactory id="jmsFactory" brokerURL="${jms.brokerURL}" />
<!-- JMS Consumer Configuration -->
<bean id="jmsConsumerConnectionFactory"
class="org.springframework.jms.connection.SingleConnectionFactory"
p:targetConnectionFactory-ref="jmsFactory"/>
<jms:listener-container container-type="default"
connection-factory="jmsConsumerConnectionFactory"
acknowledge="client">
<jms:listener destination="myQueue" ref="myConsumer" />
</jms:listener-container>
另外,我的consumer bean有init()方法(使用@PostConstruct注释),它在启动时使用@Autowired生产者服务将一些消息写入队列。
一切正常。但是当我多次重启消费者时,它会停止接收任何消息。 Active MQ控制台将消息显示为挂起。 重新启动Active MQ可以解决问题,而消费者会收到所有待处理的消息。
任何想法都会非常感激。 感谢