Apache Camel:конечная точка" direct: start " - что это значит?


Я новичок в Apache Camel. Может ли кто-нибудь объяснить, что означает "прямой старт" в верблюде? Пожалуйста, смотрите

Http://camel.apache.org/http

from("direct:start")
.to("http://myhost/mypath");

Спасибо.

5 38

5 ответов:

"Прямой:старт "выше просто говорит, что маршрут начинается с прямого компонента с именем"старт".

Прямая конечная точка обеспечивает синхронный вызов маршрута. Если вы хотите отправить Exchange в конечную точку direct: start, вы должны создать ProducerTemplate и использовать различные методы отправки.
ProducerTemplate template = context.createProducerTemplate();

template.sendBody("direct:start", "This is a test message");

В этом имени нет ничего особенного start. Это просто имя, которое вы собираетесь использовать, когда ссылаетесь на конечную точку и могли бы так же легко быть direct:foo.

Предположим, что прямой маршрут является методом с именем start, поэтому нам нужно вызвать метод start /direct route для выполнения определенной операции. Приведенный ниже пример поможет .

Первый маршрут будет запущен, когда входной файл будет доступен в местоположении XXXX , и когда он достигнет линии, фактический поток перейдет на второй маршрут. В основном прямой маршрут с конечной точкой будет спровоцирована какая-то конечная точка производителем.

<route id="fileRoute">
   <from uri="file:XXXX">
      ..
   <to uri="direct:start">
</route>

<route id="directStartRoute">
    <from uri="direct:start">
    <to uri="http://myhost/mypath">
</route>

Apache Camel direct в основном предназначен для отправки обмена с одного маршрута на другой в том же контексте Camel. Итак, предположим, вы получаете сообщение от AMQ, и вы хотите заполнить заголовки для каждого сообщения, которое вы получаете, а затем отправить его в список получателей почты. Поэтому здесь вам нужно создать новый маршрутизатор, который имеет следующее описание

from(“direct:populateHeaders”)
.setHeader(“myHeader”, “myHeaderValue”)
.end()

И с любого маршрута вы можете отправить свой объект обмена на этот маршрут, написав

...

.to(“direct:populateHeaders”)

...

Важно иметь в виду, что это не сработает. из вашего верблюжьего контекста.

Direct: start предоставляет синхронные способы связи между 2 конечными точками, и это используется только в том случае, если вы хотите общаться с помощью сообщений camel, а не общих файлов или xml-сообщений.

Рассмотрим это следующим образом : Есть две вещи, когда вы отправляете сообщение в camel route. 1. Схема URI, которая определяет способ доставки Вашего сообщения. И к какому типу компонентов он будет доставлен. 2. URI-путь, который определяет экземпляр этого компонента.

Теперь, к вашему прямому: начальному местоположению. "direct" говорит, что это сообщение должно синхронно передаваться компоненту Direct. 'start' сообщает, какой экземпляр прямого компонента это сообщение должны быть доставлены.

Важность различных путей URI: Теперь подумайте, не приходится ли вам по разным маршрутам. И хочет производить сообщение из двух разных потоков синхронно. Использование 'direct: start' в качестве начальной точки для маршрутов не будет работать. Если у вас нет какого-то условного компонента обработки, забудьте об этом, если вы новичок. Для успешной доставки сообщений на оба маршрута вам нужно будет добавить 2 записи, например "direct: somename1" и "direct:somename2". "старт" - это не обязательная вещь , вы можете дать любое имя, которое вам нравится.

Я рекомендую вам прочитать несколько глав из книг Мартина Фаулера по EIP. Это замечательный ресурс для начала. Это позволит вам очень легко понять верблюда.