1

我有一条 activemq 骆驼路线,它在某些时候停止接收消息并需要重新启动。我不确定如何以编程方式检测和解决这种情况。

我的路线如下所示:

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()路线还是有更清洁的方法?

最后,确实看到了一些建议,这种情况应该由activemq处理,使用failover方案。如上所示,我正在使用failover,这仍然会发生。

4

0 回答 0