Използване на Apache Camel с пролетта

1. Общ преглед

Тази статия ще демонстрира как да конфигурирате и използвате Apache Camel с Spring.

Apache Camel предлага доста полезни компоненти, които поддържат библиотеки като JPA, Hibernate, FTP, Apache-CXF, AWS-S3 и, разбира се, много други - всичко това да помогне за интегрирането на данни между две различни системи.

Например, използвайки компонентите Hibernate и Apache CXF, можете да изтеглите данни от база данни и да ги изпратите на друга система чрез REST API извиквания.

В този урок ще разгледаме един прост пример за Camel - четене на файл и преобразуване на съдържанието му в главни и след това обратно в малки букви. Ще използваме File компонента на Camel и Spring 4.2.

Ето пълните подробности за примера:

  1. Прочетете файла от директорията на източника
  2. Конвертирайте съдържанието на файла в главни букви с помощта на персонализиран процесор
  3. Напишете преобразуван изход в директорията на местоназначението
  4. Конвертирайте съдържанието на файла в малки букви с помощта на Camel Translator
  5. Напишете преобразуван изход в директорията на местоназначението

2. Добавете зависимости

За да използвате Apache Camel с Spring, ще са ви необходими следните зависимости във вашия POM файл:

 2.16.1 4.2.4.RELEASE    org.apache.camel camel-core ${env.camel.version}   org.apache.camel camel-spring ${env.camel.version}   org.apache.camel camel-stream ${env.camel.version}   org.springframework spring-context ${env.spring.version}  

И така, имаме:

  • ядро на камила - основната зависимост за Apache Camel
  • camel-spring - позволява ни да използваме Camel с Spring
  • camel-stream - незадължителна зависимост, която можете да използвате (например) за показване на някои съобщения на конзолата, докато маршрутите се изпълняват
  • spring-context - стандартната пролетна зависимост, необходима в нашия случай, тъй като ще изпълняваме маршрути на Camel в контекст на Spring

3. Пролетен контекст на камилата

Първо ще създадем файла Spring Config, където по-късно ще дефинираме нашите маршрути на Camel.

Забележете как файлът съдържа всички необходими пространства от имена и местоположения на Apache Camel и Spring:

The елемент представлява (не е изненадващо) контекста на Camel, който може да се сравни с контекста на приложението Spring. Сега вашият контекстен файл е готов да започне да определя маршрутите на Camel.

3.1. Камилски маршрут с персонализиран процесор

След това ще напишем първия си маршрут за преобразуване на съдържанието на файла в главни букви.

Трябва да дефинираме източник, от който маршрутът да чете данни. Това може да бъде база данни, файл, конзола или произволен брой други източници. В нашия случай ще бъде файл.

След това трябва да дефинираме процесора на данните, които ще се четат от източника. За този пример ще напишем потребителски клас процесор. Този клас ще бъде пролетен боб, който ще внедри стандартния интерфейс на процесор Camel.

След като данните бъдат обработени, трябва да кажем на маршрута до къде да насочим обработените данни. Още веднъж, това може да бъде един от голямо разнообразие от изходи, като база данни, файл или конзола. В нашия случай ще го съхраним във файл.

За да настроите тези стъпки, включително вход, процесор и изход, добавете следния маршрут към контекстния файл на Camel:

Освен това трябва да дефинираме боб myFileProcessor :

3.2. Персонализиран главен процесор

Сега трябва да създадем персонализиран файлов процесор, който определихме в нашия боб. Той трябва да реализира интерфейса на Camel Processor , дефинирайки един метод на процес , който приема обект на Exchange като свой вход. Този обект предоставя подробности за данните от входния източник.

Нашият метод трябва да прочете съобщението от Exchange , да заглави съдържанието и след това да зададе това ново съдържание обратно в Exchange обекта:

public class FileProcessor implements Processor { public void process(Exchange exchange) throws Exception { String originalFileContent = (String) exchange.getIn().getBody(String.class); String upperCaseFileContent = originalFileContent.toUpperCase(); exchange.getIn().setBody(upperCaseFileContent); } }

Този метод на процеса ще бъде изпълнен за всеки вход, получен от източника.

3.3. Малък регистър процесор

Сега ще добавим още един изход към нашия маршрут на Камила. Този път ще преобразуваме данните на същия входен файл в малки букви. Този път обаче няма да използваме персонализиран процесор; ще използваме функцията за превод на съобщения на Apache Camel. Това е актуализираният маршрут на Камила:

     ${body.toLowerCase()}   

4. Стартиране на приложението

За да бъдат обработени нашите маршрути, просто трябва да заредим контекстния файл на Camel в контекст на Spring приложение:

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("camel-context.xml"); 

След като маршрутът бъде изпълнен успешно, ще бъдат създадени два файла: един със съдържание с главни букви и един със съдържание с малки букви.

5. Заключение

Ако се занимавате с интеграция, Apache Camel определено може да улесни нещата. Библиотеката предлага plug-and-play компоненти, които ще ви помогнат да намалите кода на шаблона и да се съсредоточите върху основната логика на обработката на данните.

И ако искате да разгледате подробно концепциите за Enterprise Integration Patterns, трябва да разгледате тази книга, написана от Грегор Хоп и и Боби Улф, които много ясно концептуализират EIP.

Примерът, описан в тази статия, е достъпен в проект на GitHub.