Я пытаюсь понять поведение конвейера Верблюда. Ниже приведен фрагмент маршрута, который я использую, чтобы понять это:
from("direct:from").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setBody("Hello");
}
}).to("direct:one").to("mock:toThirdEndpoint");
from("direct:one").setBody(constant("Second To Fourth Endpoint")).to("file://target/inbox");
Орган биржи отправлен в "direct: one" is "Hello". Орган биржи, посланный в "mock: toThirdEndpoint", является "второй-четвертой конечной точкой". Я хочу знать, что было бы поведением, если бы первая конечная точка была конечной точкой "jms: queue" вместо "direct: one". Каким было бы содержание обмена отправить "mock: toThirdEndpoint"?
Любая помощь оценивается.
"(Jms: queue") в середине первой очереди будет действовать как другие конечные точки запроса/ответа: сообщение "Hello" отправляется как сообщение JMS, обработанное вторым маршрутом (вплоть до "file://target/inbox "), а результат, созданный конечной точкой файла, отправляется как сообщение JMS в очередь" replyTo ", которая, в свою очередь, принимается в первом маршруте" mock: toThirdEndpoint ",
Ответ на исходный вопрос исходит из определения конвейера и шаблона обмена, применяемого к конечным точкам, участвующим в конвейере.
В нижней строке, если шаблон обмена явно не указан, по умолчанию Request Reply используется для прямых конечных точек, а для конечной точки используется Event Message, используя компоненты JMS, SEDA и File.
В результате вышеописанных шаблонов конечные точки сообщения события не возвращают никакого ответа, поэтому конвейер переходит с входным сообщением предыдущего этапа. Следовательно, приведенный ниже пример будет игнорировать то, что возвращает конечный потребитель SEDA. Пользователь прямой конечной точки с возвратом выводит сообщение, которое будет перенаправлено на следующий этап конвейера.
from("direct:from").process(exchange -> exchange.getIn().setBody("Bob"))
.to("direct:step1")
.to("seda:step2")
.log("${body}");
from("direct:step1").process(exchange -> exchange.getOut().setBody("Hi, "+exchange.getIn().getBody()));
from("seda:step2").process(exchange -> exchange.getOut().setBody(exchange.getIn().getBody()+"!"));
В этом примере компоненты Direct и SEDA использовались для демонстрационных целей, поэтому прямые изображения используются для использования шаблона запроса и использования сообщения SEDA. Однако шаблон по умолчанию может быть указан на маршруте.