Запрашивать только обмен сообщениями с direct-vm на верблюжьих маршрутах

Как мы можем обрабатывать direct-vm асинхронно?

У меня есть следующее определение маршрутов Camel:

<route id="routeA">
<from uri="activemq:queue:queueA" />
<to uri="direct-vm:someProcessing" />
<to uri="direct-vm:processAsync" />
</route>

<route id="routeB">
<from uri="direct-vm:processAsync">
<threads executorServiceRef="someRef">
 <inOnly uri="direct-vm:timeTakingRoute" />
<threads>
<route>

Когда потребитель очереди потребляет сообщение и отправляет его на routeB и вызывает direct-vm:timeTakingRoute с помощью DSL потоков, вызывающий поток, который является queueA, все еще ждет, пока поток, созданный с использованием DSL потока, не завершится.

Как мы можем обработать это асинхронно (поток вызывающего абонента не должен ждать, пока поток, созданный с использованием потока DSL, завершится)?


person Mr9    schedule 13.05.2015    source источник


Ответы (2)



Вы можете выбрать компонент seda или vm. При использовании seda обратите внимание, что очереди видны только в CamelContext. Если вам нужна взаимосвязь между CamelContext, используйте компонент vm, который является расширением компонента seda. Подробнее: seda vm

person Jayarajan    schedule 13.05.2015
comment
Спасибо, я тоже так подумал. Я видел заявку на создание асинхронного режима direct-vm. Используя vm или seda, поток всегда прослушивает запрос и пытается этого избежать. - person Mr9; 13.05.2015