正确关闭ActiveMQ嵌入式代理

时间:2012-02-03 12:52:25

标签: java spring activemq

我有一个简单的Spring配置用于单元测试,包括ActiveMQ嵌入式代理,JMS生成器和JMS监听器。测试成功通过,但当关闭所有内容时,我看到一些例外。像这样:

[ WARN] [ActiveMQ Connection Executor: tcp://localhost/127.0.0.1:61616 03:16:23] (SingleConnectionFactory.java:onException:301) Encountered a JMSException - resetting the underlying JMS Connection
javax.jms.JMSException: java.io.EOFException

我的配置:

<beans>
  <amq:queue id="defaultDestination" physicalName="example.A"/>
  <bean id="jmsProducerTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="connectionFactory"/>
    <property name="defaultDestination" ref="defaultDestination"/>
  </bean>

  <bean id="jmsMessageSender" class="package.JMSMessageSender"/>

  <amq:broker id="broker" useJmx="false" persistent="false" destroyApplicationContextOnStop="true" >
    <amq:transportConnectors>
      <amq:transportConnector uri="tcp://localhost:61616"/>
    </amq:transportConnectors>
  </amq:broker>

  <bean id="messageListener" class="package.MessageReceiver"/>

  <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory" depends-on="broker">
    <property name="targetConnectionFactory">
      <amq:connectionFactory brokerURL="tcp://localhost:61616"/>
    </property>
  </bean>

  <jms:listener-container connection-factory="connectionFactory" container-type="default">
    <jms:listener destination="example.A" ref="messageListener"/>
  </jms:listener-container>
</beans>

我认为经纪人正在关闭,然后连接工厂失去连接。但depends-on没有帮助。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

据我所知,没有这些例外情况,无法关闭嵌入式AMQ。 AMQ代码将EOF视为相对无害的事件,但它会记录该异常。您可以尝试在Apache ActiveMQ项目中打开JIRA。