2015-05-13 4 views
3

Как мы можем обрабатывать 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 потока)?

ответ

3

Прямой компонент предназначен для синхронной http://camel.apache.org/direct-vm.html

Пожалуйста, попробуйте использовать Седа вместо:

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

<route id="routeB"> 
    <from uri="seda:processAsync" /> 
    <to uri="direct-vm:timeTakingRoute" /> 
</route> 
+0

Спасибо, я тоже думал то же самое. Я видел билет, чтобы сделать асинхронный прямой vm. Используя vm или seda, поток всегда прослушивается для запроса и пытается избежать этого. – Mr9

1

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

+0

Спасибо, я тоже думал то же самое. Я видел билет, чтобы сделать асинхронный прямой vm. Используя vm или seda, поток всегда прослушивается для запроса и пытается избежать этого. – Mr9

 Смежные вопросы

  • Нет связанных вопросов^_^