Apache Camel:конечная точка" direct: start " - что это значит?
Я новичок в Apache Camel. Может ли кто-нибудь объяснить, что означает "прямой старт" в верблюде? Пожалуйста, смотрите
from("direct:start")
.to("http://myhost/mypath");
Спасибо.
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. Это замечательный ресурс для начала. Это позволит вам очень легко понять верблюда.