Я новичок в Apache Camel. Может кто-нибудь объяснить, что означает "direct: start" в Camel. См.
from("direct:start")
.to("http://myhost/mypath");
Спасибо.
Я новичок в Apache Camel. Может кто-нибудь объяснить, что означает "direct: start" в Camel. См.
from("direct:start")
.to("http://myhost/mypath");
Спасибо.
"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
.
Предположим, что прямой маршрут - это метод с запуском имени, поэтому нам нужно вызвать метод 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 в основном предназначен для отправки Exchange с одного маршрута на другой в SAME контексте Camel. Поэтому давайте скажем, что вы получаете сообщение от AMQ, и хотите заполнить заголовки для каждого полученного сообщения, а затем отправить его в список получателей почты. Итак, здесь вам нужно создать новый маршрутизатор, который имеет следующее описание
from("direct:populateHeaders")
.setHeader("myHeader", "myHeaderValue")
.end()
И с любого маршрута вы можете отправить свой объект Exchange на этот маршрут, написав
...
.to("direct:populateHeaders")
...
Важно помнить, что это не будет работать из вашего контекста верблюда.
direct: start предоставляет синхронные способы связи между двумя конечными точками, и это используется только в том случае, если вы хотите общаться с помощью сообщений верблюдов, а не общих файлов или XML-сообщений.
Рассмотрим это так: при отправке сообщения на верблюжий маршрут отправляются две вещи. 1. Схема URI, которая определяет, как ваше сообщение будет доставлено. И к какому типу компонента он будет доставлен. 2. Путь URI, который определяет экземпляр этого компонента.
Теперь по вашему прямому: начальное местоположение. 'direct' говорит о том, что это сообщение должно отправляться синхронно к компоненту Direct. 'start' указывает, какому экземпляру Direct Component следует доставить это сообщение.
Важность другого пути URI: Теперь рассмотрим, есть ли у вас разные маршруты. И хочет создать сообщение из двух разных потоков синхронно. Использование 'direct: start' в качестве начальной точки для маршрутов не будет работать. Если у вас нет какого-либо компонента условной обработки, забудьте об этом, если вы новичок. Для успешной доставки сообщений на оба маршрута вам нужно будет добавить 2 записи, то есть "direct: somename1" и "direct: somename2". "начало" не является обязательным, вы можете дать любое имя, которое вам нравится.
Я рекомендую вам прочитать некоторые главы из EIP-книг Мартина Фаулера. Это прекрасный ресурс для начала. Это поможет вам понять верблюда.
забудь о старте. начало - это просто название точки остановки (прямой).
Прямой компонент можно рассматривать как мост между маршрутами в одном контексте.