Подтвердить что ты не робот

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

Я новичок в Apache Camel. Может кто-нибудь объяснить, что означает "direct: start" в Camel. См.

http://camel.apache.org/http

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

Спасибо.

4b9b3361

Ответ 1

"direct: start" выше просто говорит, что маршрут начинается с Direct Component с именем "start".

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

ProducerTemplate template = context.createProducerTemplate();

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

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

Ответ 2

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

Ответ 3

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

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

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

...

.to("direct:populateHeaders")

...

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

Ответ 4

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

Ответ 5

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

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

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

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

Ответ 6

забудь о старте. начало - это просто название точки остановки (прямой).

Прямой компонент можно рассматривать как мост между маршрутами в одном контексте.