问题的原因是在默认情况下,activemq只有当topic/queue有数据时候才会保持它在内存中的存在。所以当队列或者主题中没有数据时,activemq将不断进行启动和停止的操作。
要解决这一现象,必须在spring配置文件中的activemq的listenercontainer声明时,加上<property name="cacheLevelName" value="CACHE_CONNECTION"/>这句。
加上之后,重新启动,everything done。
如下所示:
<bean id="queueListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="cacheLevelName" value="CACHE_CONNECTION"/> <property name="connectionFactory" ref="jmsConnectionFactory" /> <property name="destination" ref="QUEUE" /> <property name="messageListener" ref="queueListener" /> <property name="transactionManager" ref="jmsTransactionManager" /> <!-- 使用外部事务管理器时设置为true,默认false --> <property name="sessionTransacted" value="true" /> <property name="concurrency" value="1-100" />
参考资料:
http://forum.springsource.org/showthread.php?86482-ActiveMQ-infinitive-loop-Connector-start-stop