Насколько я понимаю, и сервлет, и конечные точки причала в Camel являются обменом сообщениями Request Reply (InOut), ожидающими исходящего сообщения.

Поэтому я предполагаю, что когда я отправляю HTTP-запрос этим конечным точкам, ответ будет отправлен только после того, как все процессоры маршрута завершат работу.

Можно ли вызвать эти конечные точки в режиме «запустил и забыл», то есть просто запустить маршрут и получить немедленный ответ, не дожидаясь завершения всей обработки?

1
Ronald 16 Апр 2016 в 16:51

2 ответа

Лучший ответ

В конце я использовал seda, чтобы сделать его асинхронным. Обратите внимание, что это выполнялось асинхронно только при использовании тега inOnly:

<route autoStartup="true" id="x-service">
     <from uri="servlet:/xService"/>
     <inOnly uri="seda:x-service-execute-async" />
     <transform>
         <constant>OK</constant>
     </transform>
 </route>

 <route autoStartup="true" id="x-service-execute-async">
     <from uri="seda:x-service-execute-async"/>
     ...
 </route>
0
Ronald 29 Апр 2016 в 06:40

Конечно, вам просто нужно добавить в маршрут какой-нибудь асинхронный шаг (EIP или компонент) ...

Например ... этот маршрут будет отправлять все запросы в очередь JMS (или seda и т. д.), которые могут обрабатываться асинхронно и ACK обратно HTTP-клиенту, когда сообщение находится в очереди ...

from("http://localhost:9001/inbound")
    .to("activemq:inboundQ");

from("activemq:inboundQ")
    .to(...inbound processing...);
0
Ben ODay 16 Апр 2016 в 14:26