所以下面我有駱駝(通過Spring DSL)成功整合我的豆子和ActiveMQ隊列:在駱駝路由的ActiveMQ上強制套接字超時?
<!-- Note: this code is just a snippet; if you need to see more, please let me know! -->
<camelContext id="my-camel-context" xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="activemq-myinstance:queue:myqueue" />
<onException>
<exception>java.lang.Exception</exception>
<redeliveryPolicy maximumRedeliveries="2" />
<to uri="activemq-myinstance:queue_failures" />
</onException>
<to uri="bean:myBean?method=doCommand" />
</route>
</camelContext>
<bean id="jmsConnectionFactory-myqueue" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${activemq.instance.url}" />
</bean>
<bean id="pooledConnectionFactory-myqueue" class="org.apache.activemq.pool.PooledConnectionFactory">
<property name="maxConnections" value="64" />
<property name="maximumActive" value="${max.active.consumers}" />
<property name="connectionFactory" ref="jmsConnectionFactory-myqueue" />
</bean>
<bean id="jmsConfig-myqueue" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="pooledConnectionFactory-myqueue"/>
<property name="concurrentConsumers" value="${max.active.consumers}"/>
</bean>
<bean id="activemq-myqueue" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="configuration" ref="jmsConfig-myqueue"/>
</bean>
我想明確地強制執行套接字超時(上Socket.read()
) - 之間的駱駝和ActiveMQ的 - 的25秒。因此,當Camel嘗試向/從ActiveMQ發送消息時,如果ActiveMQ花費超過25秒來完成該響應,我希望該線程正常退出。顯然,如果可以設置某種故障轉移(以便可以在將來重新發送超時的請求),這比僅僅丟失消息更受歡迎!
我該如何做到這一點?提前致謝!
更新:如果駱駝/ JMS/ActiveMQ的不支持此開箱,我不介意寫我自己的「ThreadManager
」,它中斷25秒後/停止線程,但我不確定實現/擴展什麼接口/類,然後連接到我的Spring bean。
或許,如果我在我的'PooledConnectionFactory'上設置了'expiryTimeout'? – IAmYourFaja 2013-03-08 21:22:04