Apache Camel中的JMS请求/回复

时间:2010-09-14 22:59:57

标签: jms apache-camel

我正在尝试创建一个Apache Camel路由,该路由向主题发送jms消息,如果在一定时间内没有收到回复,则使用Spring DSL启动路由。

我遇到的问题是看起来foTopic调用是异步的。我希望它阻止并等待消息或直到达到超时,但它将消息发送到主题并运行到下一个处理器。发生超时时,它会再次调用处理器。我对jms组件的期望是错误的还是我的配置不正确?

注意:我正在使用骆驼2.3.0罐。

    <endpoint id="foTopic"
          uri="jms:topic:${jms.fotopic.topicName}?pubSubNoLocal=true&amp;requestTimeout=5000"/>

    <route id="foMasterRegistration" startupOrder="10">
        <!-- Fire this route once on startup. -->
        <from uri="timer:foStartTimer?period=0"/>
        <to uri="foPreProcessor"/>
        <doTry>
            <setExchangePattern pattern="InOut"/>
            <to uri="foTopic"/>
            <to uri="foProcessor"/>
            <doCatch>
                <exception>java.util.concurrent.TimeoutException</exception>
                <exception>org.apache.camel.ExchangeTimedOutException</exception>
                <to uri="foProcessor"/>
            </doCatch>
        </doTry>
    </route>

1 个答案:

答案 0 :(得分:0)

这是我的错误配置。它确实同步运作。我最初把doCatch标签放在错误的位置,导致日志中出现奇怪的消息流(导致我首先发布这个问题)。