Рубрики
Без рубрики

Использование Apache Camel с пружиной

Эта статья продемонстрирует, как настроить и использовать Apache Camel с Spring Framework на простом практическом примере.

Автор оригинала: baeldung.

1. Обзор

В этой статье будет показано, как настроить и использовать Apache Camel с Spring.

Apache Camel предоставляет довольно много полезных компонентов, поддерживающих библиотеки, такие как JPA , Hibernate , FTP , Apache-CXF , AWS-S3 и, конечно, многие другие – все для интеграции данных между двумя различными системами.

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

В этом уроке мы рассмотрим простой пример верблюда – чтение файла и преобразование его содержимого в верхний регистр, а затем обратно в нижний. Мы собираемся использовать компонент Camel File и 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}
    

Итак, у нас есть:

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

3. Весенний верблюжий контекст

Сначала мы создадим конфигурационный файл Spring, в котором позже определим наши маршруты верблюдов.

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




	
            
	

Элемент представляет (неудивительно) контекст Camel, который можно сравнить с контекстом приложения Spring. Теперь ваш контекстный файл готов начать определять маршруты верблюдов.

3.1. Маршрут Верблюда С Пользовательским Процессором

Далее мы напишем ваш первый маршрут для преобразования содержимого файла в верхний регистр.

Нам нужно определить источник, из которого маршрут будет считывать данные. Это может быть база данных, файл, консоль или любое количество других источников. В нашем случае это будет файл.

Затем нам нужно определить процессор данных, которые будут считываться из источника. Для этого примера мы собираемся написать пользовательский класс процессора. Этот класс будет представлять собой Spring bean, который будет реализовывать стандартный интерфейс процессора Camel .

Как только данные будут обработаны, нам нужно указать маршрут, куда направить обработанные данные. Опять же, это может быть один из самых разнообразных выходов, таких как база данных, файл или консоль. В нашем случае мы собираемся сохранить его в файле.

Чтобы настроить эти шаги, включая ввод, процессор и вывод, добавьте следующий маршрут в файл контекста Camel:


     
     
     

Кроме того, мы должны определить myFileProcessor bean:

3.2. Пользовательский процессор верхнего регистра

Теперь нам нужно создать пользовательский файловый процессор, который мы определили в нашем компоненте. Он должен реализовать интерфейс Camel Processor , определяющий один метод process , который принимает объект 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, которые помогут вам сократить шаблонный код и сосредоточиться на основной логике обработки данных.

И если вы хотите подробно изучить Модели интеграции предприятий концепции, вам следует взглянуть на эту книгу , написанную Грегором Хоп и Бобби Вулфом, которые очень четко концептуализируют EIPs.

Пример, описанный в этой статье, доступен в проекте на GitHub .