В этой части статьи мы переходим к практической стороне интеграции с использованием шаблонов. В качестве реализации EIP я буду использовать интеграционную платформу Apache Camel.
Основной единицей работы в Apache Camel является маршрут. Маршрут — это просто поток EIP, где выход одного EIP является входом другого. Итак, начнем с простого примера.
Я хотел бы отсортировать файлы XML на основе их содержимого. Когда элемент xml, обозначающий город человека, имеет значение «Лондон», файл необходимо скопировать в
каталог messages / uk , в другом случае — в
каталог messages / others . Дополнительно я хочу регистрировать каждую операцию копирования. Вот поток EIP, реализующий описанную выше логику:
Ниже вы можете увидеть конфигурацию контекста Apache Camel:
1: <code style="color: black; word-wrap: normal;">1: <camelContext xmlns="http://camel.apache.org/schema/spring"> 2: <route> 3: <from uri="file:src/data?noop=true"/> 4: <choice> 5: <when> 6: <xpath>/person/city = 'London'</xpath> 7: <log message="UK message"/> 8: <to uri="file:target/messages/uk"/> 9: </when> 10: <otherwise> 11: <log message="Other message"/> 12: <to uri="file:target/messages/others"/> 13: </otherwise> 14: </choice> 15: </route> 16: </camelContext> </code><code style="color: black; word-wrap: normal;"> </code>
Как следует из названия,
from является объявлением конечной точки источника, которая прослушивает события / события опросов. В этом примере конечная точка является файловым поллером. На веб-сайте
http://camel.apache.org/components.html вы можете найти список всех доступных компонентов Apache Camel, каждый из которых содержит подробное описание
конфигурации URI .
Следующим элементом в конфигурации является
выбор, когда в противном случае , это маршрутизатор на основе контента. В нашем примере,
когда условие является
выражением xpath / person / city = ‘London’. Узел
в противном случае выбирается , когда ни один из
, когда условия не выполняются. Для регистрации сообщений вы можете использовать
журналэлемент. Последний узел находится
на который является целевой конечной точкой.
XML слева копируется в
messages / uk, а XML справа копируется в
сообщения / другие.
<person user="james"> <firstName>James</firstName> <lastName>Strachan</lastName> <city>London</city> </person> |
<person user="michal"> <firstName>Michał</firstName> <lastName>Warecki</lastName> <city>Warszawa</city> </person> |
В
следующем разделе будет показано, как запустить вышеупомянутый пример.