我有一条 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>}
我强烈怀疑这发生在消息总线重新启动后,但由于我无法直接访问消息总线,我不确定这一点。我不知道那很重要。
对我来说关键是:
- 如何以编程方式检测这种情况?似乎没有引发任何异常或类似情况,我看到的唯一方法是解析日志文件。
- 检测到后如何修复?我需要
start()
和stop()
路线还是有更清洁的方法?
最后,确实看到了一些建议,这种情况应该由activemq处理,使用failover
方案。如上所示,我正在使用failover
,这仍然会发生。