Как работает конвейер Camel с конечной точкой jms

1

Я пытаюсь понять поведение конвейера Верблюда. Ниже приведен фрагмент маршрута, который я использую, чтобы понять это:

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"?

Любая помощь оценивается.

Теги:
apache-camel

2 ответа

2

"(Jms: queue") в середине первой очереди будет действовать как другие конечные точки запроса/ответа: сообщение "Hello" отправляется как сообщение JMS, обработанное вторым маршрутом (вплоть до "file://target/inbox "), а результат, созданный конечной точкой файла, отправляется как сообщение JMS в очередь" replyTo ", которая, в свою очередь, принимается в первом маршруте" mock: toThirdEndpoint ",

  • 0
    Спасибо за ваш комментарий. Что делать, если вместо конечной точки файла у меня есть jmsqueue (например, jms: queue: one), за которым следует другой jmsqueue (например, jms: queue: two) .. что-то вроде цепочки очередей. Предположим, что есть некоторая обработка между очередью: одна и очередью: две. То, что отправляется в mock: toThirdEndpoint, выводится в конце «queue: one» или в конце «queue: two».
  • 0
    Краткий ответ: ответ, предоставленный jms: queue.two
Показать ещё 2 комментария
0

Ответ на исходный вопрос исходит из определения конвейера и шаблона обмена, применяемого к конечным точкам, участвующим в конвейере.

  • Структура конвейера (http://camel.apache.org/pipes-and-filters.html) гарантирует, что каждый этап должен получать выходные данные на предыдущем этапе.
  • Схема обмена (http://camel.apache.org/exchange-pattern.html) определяет, как маршрут взаимодействует с различными конечными точками (каналами).

В нижней строке, если шаблон обмена явно не указан, по умолчанию 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. Однако шаблон по умолчанию может быть указан на маршруте.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню