收到“Connection.start()”消息时,在camel中重新启动activemq路由

时间:2012-10-18 18:00:19

标签: activemq apache-camel

我有一个activemq camel路由,它在某些时候停止接收消息并需要重启。我不知道如何以编程方式检测并修复这种情况。

我的路线如下:

from("activemq:queue:Consumer.app.VirtualTopic.msg?messageConverter=#convertMsg")

所有这些都是在Spring中配置的:

<!-- Configure the Message Bus Factory -->
<bean id="jmsFactory" class="com.local.messaging.activemq.SpringSslContextConnectionFactory">
  <property name="brokerURL" value="${jms.broker.url}" />
  <property name="sslContext" ref="sslContext" />
</bean>

<!-- Connect the Message Bus Factory to Camel.  The 'activemq' bean
     name is necessary for Camel to pick it up automatically -->
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent" depends-on="jmsFactory">
  <property name="usePooledConnection" value="true" />
  <property name="connectionFactory">
    <bean class="org.apache.activemq.pool.PooledConnectionFactory">
      <property name="maxConnections" value="20" />
      <property name="maximumActive" value="10" />
      <property name="connectionFactory" ref="jmsFactory" />
    </bean>
  </property>
</bean>

最后,代理URL的配置如下:

jms.broker.url=failover://(ssl://amq1:61616,ssl://amq1:61616)

这开始很好,大部分时间都像冠军一样。但是,我经常在日志中看到这条消息:

Received a message on a connection which is not yet started. Have you forgotten to call Connection.start()? Connection: ActiveMQConnection {<details>}

我强烈怀疑在消息总线重新启动后会发生这种情况,但由于我无法直接访问消息总线,所以我肯定不知道。我不知道那很重要。

我的关键是:

  1. 如何以编程方式检测此情况?似乎没有抛出任何异常等,我看到的唯一方法是通过解析日志文件。
  2. 检测到后,我该如何解决?我需要start()stop()路线还是更清洁?
  3. 最后,我确实看到了一些建议,即使用failover方案,activemq应该处理这个案例。如上所示,我正在使用failover,但这仍然会发生。

0 个答案:

没有答案