2010-09-14 2 views
0

Я пытаюсь создать маршрут Apache Camel, который отправляет сообщение jms в тему, и если он не получит ответа в течение определенного времени, он начнет маршрут с использованием Spring DSL.JMS-запрос/ответ в Apache Camel

Проблема, с которой я столкнулась, заключается в том, что она выглядит как асинхронный вызов 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> 

ответ

0

Это была неправильная конфигурация с моей стороны. Это действительно действовало синхронно. Я изначально разместил тег doCatch в неправильном месте, что вызывало странный поток сообщений в журналах (что заставило меня опубликовать этот вопрос в первую очередь).