题
我正在尝试创建一个Apache骆驼路由,该路由将JMS消息发送到一个主题,如果它在一定时间内未收到答复,则使用Spring DSL启动路线。
我遇到的问题是,似乎fotopic呼叫是异步的。我希望它会阻止并等待消息,或直到到达超时为止,但它将消息发送到主题并运行到下一个处理器。当超时发生时,它将再次调用处理器。我对JMS组件的期望是错误的,还是我对某些内容进行了错误的配置?
注意:我正在使用骆驼2.3.0罐。
<endpoint id="foTopic"
uri="jms:topic:${jms.fotopic.topicName}?pubSubNoLocal=true&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标签放在错误的位置,这导致日志中奇怪的消息流(这首先是我发布了这个问题)。
不隶属于 StackOverflow