Тема интеграции актуальна для большинства программистов. В этой книге описаны паттерны интеграции. Apache Camel является реализацией этих паттернов. Уже очень много сказано о том что может Camel, а мне было интересно понять чего он не может. В этой, возможно капитанской, заметке мои выводы по этой теме.

Первая идея заключается в том, что интеграционные и распределенные приложения - разные вещи. Интеграция - это процесс объединения нескольких несвязанных систем в одну. Если объединяются не системы, а специализированные компоненты, то это уже не интеграция, а создание распределенного приложения. Распределенное приложение отличается от интеграционного следующим:

  • большая связанность (общие библиотеки, протоколы и т.д.)
  • компоненты, в отличии от систем, отдельно никому не нужны и должны работать вместе в одно и то же время
  • компоненты часто доступны для изменения

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

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

Уровень преобразования Объект преобразования Инструмент Пример
Транспортный Коммуникационные протоколы (TCP/IP, HTTP, SOAP, JMS) паттерн “Адаптер канала” Передача данных из JMS в SOAP сервис
Представления данных Форматы данных (XML, CSV, кодировка текста) паттерн “Транслятор” Преобразование почтового индекса в строку, слияние полей Имя, Фамилия в одно
Тип данных Структура данных: имена полей, объединение полей, ограничения на значения полей, трансляция справочных значений паттерн “Транслятор”, обращение к внешним источникам данных Слияние полей Имя и Фамилия в одно, преобразование телефонного номера в поле адреса
Структуры данных Сущность, понятие Паттерны “Фильтр”, “Маршрутизатор”, “Транслятор”, “Ресеквенсор” и т.д. Тансформация данных о финансовых операциях в объект счета

Каждый следующий уровень сложнее предыдущего. Из своего опыта могу сказать, что преобразования на уровне структур данных настолько сложны, что имеет смысл выйти за рамки паттернов и написать свой “велосипед”.

В остальных случаях Apache Camel позволяет решить задачу очень быстро и просто. Спасибо за внимание, интересно было бы прочитать в комментариях другие мысли по теме.