У меня два запроса: 1. Можем ли мы иметь неблокирующие асин c маршруты на верблюде. Я вижу asyn c с seda
, но тогда, если разгрузки работают на другой поток, который блокирует. 2. Если да, можем ли мы использовать многоадресную рассылку в таких маршрутах. Следующее - мой многошаговый верблюжий маршрут, который, кажется, работает. Но не уверен, что это асин c или неблокирующий асин c.
from("direct:multiStep")
.to("bean:routeHandler?method=monoReturningMethod1")
.process(new UnwrapStreamProcessor())
.to("bean:routeHandler?method=monoReturningMethod2")
.process(new UnwrapStreamProcessor())
Выше работ, и веб-запрос имеет ответ от monoReturningMethod
. В этом случае я хочу убедиться, что весь процесс не блокируется.
Для многоадресной передачи я экспериментирую со следующим маршрутом. Не уверен, куда поставить UnwrapStreamProcessor
. Я пытался поставить его после end()
, но он не работает. Нужен ли кастом Processor
? Или как я могу ie все Mono
вернуть в одном?
from("direct:incoming")
.multicast()
.parallelProcessing()
.to("bean:routeHandler?method=monoReturningMethod1", "bean:routeHandler?method=monoReturningMethod2")
.end()
Я использую apache `верблюд 3.0.1 с пружинным загрузчиком.
@Component("routeHandler")
public class RouteHandler {
Mono<Entity> monoReturningMethod1(Exchange exchange) {
//make some WebClient request which returns Mono.
}
Mono<Entity> monoReturningMethod2(Exchange exchange) {
//make some WebClient request which returns Mono.
}
}
Этот маршрут обрабатывает входящий веб-запрос. Как сделать так, чтобы вся обработка маршрута была неблокируемой и asyn c. Я попытался использовать process(new UnwrapStreamProcessor())
в качестве шага процесса после monoReturningMehtod
, и если я делаю это последовательно, это работает. Но он не работает с многоадресной рассылкой и не допускает перезаписи исходного сообщения. Любые предложения?
PS: я запускаю свой асин c поток, как показано ниже: producerTemplate.asyncSend("RouteName", exchange)