5

したがって、以下では、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>

CamelとActiveMQの間で25秒のソケットタイムアウト(on )を明示的に強制したいと思います。Socket.read()したがって、CamelがActiveMQとの間でメッセージをルーティングしようとしたときに、ActiveMQがその応答を完了するのに25秒以上かかる場合は、スレッドを正常に終了する必要があります。明らかに、メッセージを失うだけでなく、ある種のフェイルオーバーを設定することも可能であれば(タイムアウトした要求を将来再生できるようにするため)、これは非常に好ましいことです。

どうすればこれを達成できますか?前もって感謝します!

更新:Camel / JMS / ActiveMQがこれをすぐにサポートしない場合は、ThreadManager25秒後にスレッドを中断/停止する独自の ""を記述してもかまいませんが、実装するインターフェイス/クラスがわかりません。 / extend、そしてその後私のSpringBeanに接続します。

4

2 に答える 2

1

デフォルトでは、Camel activemq リクエストは 20 秒後にタイムアウトします。

送信タイムアウトについては、org.apache.activemq.ActiveMQConnectionFactory に sendTimeout プロパティがあります。また、JMSConfiguraiton の requesttimeout オプションも確認してください。

フェールオーバーの場合、ブローカー URL でフェールオーバー トランスポートを設定できます。

于 2013-03-09T05:01:20.800 に答える
1

timeoutあなたのブローカーURLにプロパティを設定するだけです

failover:(tcp\://localhost\:61616)?timeout=25000

これにより、プロデューサーにエラーが伝播されるため、スレッドを永久にブロックする代わりに処理できます...

于 2013-03-14T17:55:26.673 に答える