Использование Apache Camel с Spring

Использование Apache Camel с Spring

1. обзор

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

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

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

В этом руководстве мы рассмотрим простой пример Camel - чтение файла и преобразование его содержимого в верхний регистр, а затем обратно в нижний регистр. Мы собираемся использовать CamelFile component и Spring 4.2.

Вот полные детали примера:

  1. Читать файл из исходного каталога

  2. Преобразование содержимого файла в верхний регистр с помощью настраиваемогоProcessor

  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 с Spring

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

  • spring-context - стандартная зависимость Spring, необходимая в нашем случае, поскольку мы собираемся запускать маршруты Camel в контексте Spring.

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

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

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




    
            
    

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

3.1. Camel Route с пользовательским процессором

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

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

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

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

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


     
     
     

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

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

Теперь нам нужно создать собственный файловый процессор, который мы определили в нашем bean-компоненте. Он должен реализовывать интерфейс CamelProcessor, определяя единственный метод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. Строчный процессор

Теперь мы добавим еще один вывод к нашему маршруту Camel. На этот раз мы преобразуем данные того же входного файла в нижний регистр. Однако на этот раз мы не будем использовать специальный процессор; мы будем использоватьMessage Translator feature Apache Camel. Это обновленный маршрут Camel:


    
    
    
    
        ${body.toLowerCase()}
    
    

4. Запуск приложения

Для обработки наших маршрутов нам просто нужно загрузить файл контекста Camel в контекст приложения Spring:

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

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

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

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

И если вы хотите подробно изучить концепциюEnterprise Integration Patterns, вам следует взглянуть наthis book, написанный Грегором Хопом и Бобби Вульфом, которые очень четко концептуализируют EIP.

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