JMS demande / réponse dans Apache Camel
-
02-10-2019 - |
Question
Je suis en train de créer une route Camel Apache qui envoie un message jms à un sujet et si elle ne reçoit pas de réponse dans un certain laps de temps, il commence un itinéraire à l'aide DSL Spring.
Le problème que j'ai est qu'il semble l'appel foTopic est asynchrone. Je pense à bloquer et attendre un message ou jusqu'à ce que le délai d'attente est atteint, mais il envoie le message au sujet et fonctionne à l'autre processeur. Lorsque le délai d'attente se produit, il appelle à nouveau le processeur. Mes attentes au sujet du mauvais jms composant ou dois-je quelque chose mal configuré?
NOTE:. J'utilise des pots de chameau 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>
La solution
Ce fut une mauvaise configuration de ma part. Il était en effet fonctionnant de manière synchrone. J'avais initialement placé l'étiquette doCatch au mauvais endroit qui a été à l'origine de flux de messages étranges dans les journaux (ce qui m'a amené à poster cette question en premier lieu).