Apache Camel - Использование с Spring
Теперь мы воссоздадим приложение из предыдущей главы с помощью Spring. Это даст нам представление о том, как создать маршрутизацию Camel в XML, а не в DSL.
Создание нового проекта
Создать новый Maven проект и укажите следующее -
GroupId: BasketWithSpring
ArtifactId: BasketWithSpring
Выберите расположение по умолчанию для вашего проекта или, если вы предпочитаете, укажите каталог по вашему выбору.
Добавление зависимостей
В дополнение к основным зависимостям, которые вы использовали в предыдущем приложении, вам необходимо добавить еще несколько зависимостей для использования Spring. Зависимости добавляются в pom.xml. Теперь откройте pom.xml и добавьте следующие зависимости -
<dependencies>
...
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.15.2</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.15.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring</artifactId>
<version>2.15.1</version>
</dependency>
</dependencies>
Создание Java DSL для Spring
Давайте теперь создадим новый класс Java с именем DistributeOrderXML. Добавьте к нему следующий код -
public class DistributeOrderXML {
public static void main(String[] args) throws Exception {
ApplicationContext appContext = new ClassPathXmlApplicationContext(
"SpringRouteContext.xml");
CamelContext camelContext = SpringCamelContext.springCamelContext(appContext, false);
try {
camelContext.start();
ProducerTemplate orderProducerTemplate = camelContext.createProducerTemplate();
InputStream orderInputStream = new FileInputStream(ClassLoader.getSystemClassLoader()
.getResource("order.xml").getFile());
orderProducerTemplate.sendBody("direct:DistributeOrderXML", orderInputStream);
} finally {
camelContext.stop();
}
}
}
в main метод, сначала мы создаем экземпляр ApplicationContext, который является центральным интерфейсом в приложении Spring. В его конструкторе мы указываем имя XML-файла, который содержит нашу информацию о маршрутизации и фильтрации.
ApplicationContext appContext = new ClassPathXmlApplicationContext(
"SpringRouteContext.xml");
Далее мы создаем CamelContext указав созданный выше ApplicationContext в его параметре.
CamelContext camelContext = SpringCamelContext.springCamelContext(appContext, false);
На этом этапе наша маршрутизация и фильтрация настроены. Поэтому мы начинаемCamelContext используя его startметод. Как и в предыдущем случае, мы определяем конечную точку для загрузки файла order.xml и начинаем обработку. Теперь давайте разберемся, как в XML определяется маршрутизация.
Создание контекста приложения
Добавьте в проект новый XML-файл и назовите его SpringRouteContext.xml. Вырежьте и вставьте в этот файл следующее содержимое.
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd ">
<camelContext xmlns = "http://camel.apache.org/schema/spring">
<route>
<from uri = "direct:DistributeOrderXML"/>
<log message = "Split by Distribute Order"/>
<split>
<xpath>//order[@product = 'Oil']/items</xpath>
<to uri = "file:src/main/resources/order/"/>
<to uri = "stream:out"/>
</split>
</route>
</camelContext>
</beans>
Здесь мы определяем запрос xpath следующим образом, обратите внимание, что теперь мы выбираем все заказы для «нефти».
<xpath>//order[@product = 'Oil']/items</xpath>
Выходных конечных точек несколько. Первая конечная точка указываетorder папка, а вторая указывает на консоль.
<to uri = "file:src/main/resources/order/"/>
<to uri = "stream:out"/>
Запустите приложение.
Результаты теста
Когда вы запустите приложение, вы увидите на экране следующий результат.
<items>
<item>
<Brand>Cinthol</Brand>
<Type>Original</Type>
<Quantity>4</Quantity>
<Price>25</Price>
</item>
<item>
<Brand>Cinthol</Brand>
<Type>Lime</Type>
<Quantity>6</Quantity>
<Price>30</Price>
</item>
</items>
Проверьте orderпапку по указанному вами пути. Вы найдете только что созданный файл, содержащий указанный выше код XML.
Вывод
Camel предоставляет готовую к использованию структуру, которая реализует EIP для облегчения ваших проектов интеграции. Он поддерживает кодирование на предметно-ориентированных языках, а также использование XML.