我正在尝试创建一个Apache骆驼路由,该路由将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>
有帮助吗?

解决方案

这对我来说是一个错误的配置。确实是同步运行的。我最初将Docatch标签放在错误的位置,这导致日志中奇怪的消息流(这首先是我发布了这个问题)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top