В этой главе мы обсудим, что такое Apache Camel и как он эффективно маршрутизирует данные между конечными точками, а также несколько примеров.
Что такое Apache Camel?
Apache Camel — это интегрированная среда с открытым исходным кодом, которая была запущена в начале 2007 года.
Это подход на основе EIP (Enterprise Integration Pattern), который предоставляет несколько готовых реализаций шаблонов, которые можно использовать для решения проблем интеграции предприятия. EIP — это не что иное, как проверенные решения хорошо документированных и повторяющихся проблем корпоративной интеграции.
Camel также известен как механизм маршрутизации и посредничества, поскольку он эффективно маршрутизирует данные между конечными точками, принимая на себя большую нагрузку, такую как преобразование форматов данных, подключение конечных точек и многое другое.
Основной пример
Предварительные условия для использования Apache Camel:
- Джава
- специалист
- Redhat JBoss Fuse 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
Установить проект в предохранитель
Запустите Fuse с помощью Fuse.bat / start.bat . Если вы запускаете Fuse с помощью start.bat , используйте client.bat для подключения к Fuse. Вы должны получить пользовательский интерфейс, как показано на следующем скриншоте.
Это CLI для доступа к командам Karaf и Fuse.
install –s mvn:com.tutorialpoint.app/camel-firt-app/1.0-SNAPSHOT
Проверьте, работает ли ваш проект
Теперь ваше приложение должно быть установлено в Fuse. Скопируйте каталог данных в camel-first-app и поместите его в D: / src /, и он должен скопировать сообщение с названием city = London в D: / target / merssages / uk .
Поместите входной файл в D: / src / data
вход
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>
Выход
В 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