JBoss Fuse - Apache Camel
В этой главе мы обсудим, что такое Apache Camel и как он эффективно маршрутизирует данные между конечными точками, а также на нескольких примерах.
Что такое Apache Camel?
Apache Camel - это платформа интеграции с открытым исходным кодом, которая была запущена в начале 2007 года.
Это подход на основе EIP (Enterprise Integration Pattern), который предоставляет несколько готовых реализаций шаблонов, которые можно использовать для решения проблем корпоративной интеграции. EIP - это не что иное, как проверенное решение хорошо задокументированных и повторяющихся проблем корпоративной интеграции.
Camel также известен как механизм маршрутизации и посредничества, поскольку он эффективно маршрутизирует данные между конечными точками, принимая на себя большую нагрузку, такую как преобразование форматов данных, подключение конечных точек и многое другое.
Базовый пример
Предпосылки для использования Apache Camel:
- Java
- Maven
- Предохранитель Redhat JBoss 6.1-GA-379
Создать базовый каркас приложения
mvn:archetype generate
–DgroupId = com.tutorialpoint.app
–DartifactId = camel-first-app
–DarchetypeGroupId = org.apache.camel.archetypes
–DarchetypeArtifactId = camel-archetype-spring
–DinteractiveMode = false -X
Это должно создать следующую структуру каталогов.
Это базовый скелет нашего создаваемого приложения Camel.
Отредактируйте camel-context.xml
редактировать camel-first-app → src → main → resources → META-INF\spring\camel-context.xml для соответствия, как показано ниже
<?xml version = "1.0" encoding = "UTF-8"?>
<!-- Configures the Camel Context-->
<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">
<!-- here is a sample which processes the input file
(leaving them in place - see the 'noop' flag)
then performs content based routing on the message using XPath -->
<route>
<from uri = "file:///d:/src/data?noop=false"/>
<choice>
<when>
<xpath>/person/city = 'London'</xpath>
<log message = "UK message"/>
<to uri = "file:///d:/target/messages/uk"/>
</when>
<otherwise>
<log message = "Other message"/>
<to uri = "file:///d:/target/messages/others"/>
</otherwise>
</choice>
</route>
</camelContext>
</beans>
Отредактируйте pom.xml
Добавьте следующий код внутри <plugins> </plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.4</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>
${project.artifactId}
</Bundle-SymbolicName>
<Import-Package>*</Import-Package>
</instructions>
</configuration>
</plugin>
Изменить тип упаковки с jar → bundle.
<packaging>bundle</packaging>
Соберите проект, используя следующую команду -
mvn clean install
Установить Project в Fuse
Запустите предохранитель, используя Fuse.bat/start.bat. Если вы запустите Fuse, используяstart.bat, используйте client.batдля подключения к предохранителю. Вы должны получить пользовательский интерфейс, как показано на следующем снимке экрана.
Это интерфейс командной строки для доступа к командам Karaf и Fuse.
install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT
Проверьте, работает ли ваш проект
Теперь ваше приложение должно быть установлено во Fuse. Скопируйте каталог данных внутриcamel-first-app и поместите это в D:/src/ и он должен скопировать сообщение с городом = Лондон в D:/target/merssages/uk.
Поместите входной файл в D:/src/data
Input
Message1.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "james">
<firstName>James</firstName>
<lastName>Strachan</lastName>
<city>London</city>
</person>
Message2.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "hiram">
<firstName>Hiram</firstName>
<lastName>Chirino</lastName>
<city>Tampa</city>
</person>
Output
В D: / target / messages / uk
<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "james">
<firstName>James</firstName>
<lastName>Strachan</lastName>
<city>London</city>
</person>
В D: / target / messages / others
<?xml version = "1.0" encoding = "UTF-8"?>
<person user = "hiram">
<firstName>Hiram</firstName>
<lastName>Chirino</lastName>
<city>Tampa</city>
</person>