从Camel路由强制ActiveMQ上的套接字超时?

IAm*_*aja 5 java sockets activemq-classic timeout apache-camel

所以下面我有Camel(通过Spring DSL)成功地将我的bean与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>
Run Code Online (Sandbox Code Playgroud)

我想在Camel和ActiveMQ之间明确强制执行套接字超时(on Socket.read()) - 25秒.因此,当Camel尝试将消息路由到ActiveMQ或从ActiveMQ路由消息时,如果ActiveMQ需要超过25秒来完成该响应,我希望线程正常退出.显然,如果还可以设置某种故障转移(以便将来可以重播超时的请求),这比丢失消息更受欢迎!

我怎么能做到这一点?提前致谢!

更新:如果Camel/JMS/ActiveMQ不支持开箱即用,我不介意编写自己的" ThreadManager",在25秒后中断/停止线程,但我不确定要实现哪些接口/类/ extend,然后连接到我的Spring bean.

tec*_*oma 1

默认情况下,Camel activemq 请求在 20 秒后超时。

对于发送超时,org.apache.activemq.ActiveMQConnectionFactory 上有一个 sendTimeout 属性。另请检查 JMSConfiguraiton 的 requesttimeout 选项。

对于故障转移,您可以在代理 URL 中设置故障转移传输。