我有一个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>}
我强烈怀疑在消息总线重新启动后会发生这种情况,但由于我无法直接访问消息总线,所以我肯定不知道。我不知道那很重要。
我的关键是:
start()
和stop()
路线还是更清洁?最后,我确实看到了一些建议,即使用failover
方案,activemq应该处理这个案例。如上所示,我正在使用failover
,但这仍然会发生。