我正在使用Camel ActiveMQ组件生成ActiveMQ实例:
<camel:log message="YMA_IN" />
<camel:inOnly uri="activemqBroker:queue:queue.test" id="activemqBrokerTestQueue"/>
<camel:log message="YMA_OUT" />
端点上唯一的jms配置是TTL和池连接工厂。
<amq:connectionFactory id="jmsConnectionFactory" brokerURL="${config.jms.broker.url}" />
<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop">
<property name="maxConnections" value="15" />
<property name="connectionFactory" ref="jmsConnectionFactory" />
</bean>
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="pooledConnectionFactory"/>
<property name="timeToLive" value="${config.jms.time.to.live}" />
</bean>
<!-- Broker configuration -->
<bean id="activemqBroker" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="configuration" ref="jmsConfig"/>
</bean>
如果经纪人关闭,交易所仍然停留在inonly(登录但不是OUT),看似无限期,直到经纪人重新开始。没有例外,没有超时等...
如果经纪人关闭,这是预期的行为吗?我期待一个例外?我缺少一些配置吗?
Camel 2.10.1
答案 0 :(得分:1)
还有使用同步发送的选项,然后客户端将更快地检测到错误(而不必等待超时)并且能够抛出Camel可以检测到的异常。
了解一些细节答案 1 :(得分:0)
实际上这似乎是预期的行为:需要在代理URL本身上配置超时。
以下答案显示了如何配置它:
https://stackoverflow.com/a/15416704/609452
然后一个简单的try / catch JMSException工作
答案 2 :(得分:0)
使用此配置,一旦ActiveMQ代理崩溃,我就让骆驼使消息失败:
ActiveMQConnectionFactory mqConnectionFactory = new ActiveMQConnectionFactory();
mqConnectionFactory.setUseAsyncSend(true);
mqConnectionFactory.setCloseTimeout(closeTimeout);
mqConnectionFactory.setBrokerURL(brokerUrl);
mqConnectionFactory.setUserName(userName);
mqConnectionFactory.setPassword(password());
PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory();
pooledConnectionFactory.setMaxConnections(maxConnections);
pooledConnectionFactory.setConnectionFactory(mqConnectionFactory);
JmsConfiguration jmsConfiguration = new JmsConfiguration();
jmsConfiguration.setConnectionFactory(pooledConnectionFactory);
jmsConfiguration.setTransacted(false);
ActiveMQComponent amqComponent = new ActiveMQComponent();
amqComponent.setConfiguration(jmsConfiguration);