Apache Camel: конечная точка "direct: start" - что это значит? - PullRequest
45 голосов
/ 09 марта 2012

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

http://camel.apache.org/http

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

Спасибо.

Ответы [ 5 ]

52 голосов
/ 09 марта 2012

Выше «direct: start» просто означает, что маршрут начинается с компонента Direct с именем «start».

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

ProducerTemplate template = context.createProducerTemplate();

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

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

7 голосов
/ 22 августа 2015

Предположим, как прямой маршрут в качестве метода с именем 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>
6 голосов
/ 16 декабря 2017

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

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

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

...

.to(“direct:populateHeaders”)

...

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

3 голосов
/ 13 марта 2014

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

2 голосов
/ 23 апреля 2018

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

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

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

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

...