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