0

我正在尝试创建一个向主题发送 jms 消息的 Apache Camel 路由,如果它在一定时间内没有收到回复,它将使用 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>
4

1 回答 1

0

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

于 2010-09-16T17:45:16.127 回答