Добрый день, уважаемый читатель.
Существует такой класс продуктов как ESB. Как упоминается в Википедии это — связующее программное обеспечение, обеспечивающее централизованный и унифицированный событийно-ориентированный обмен сообщениями между… и далее по тексту. Примеров таких ESB не так много и применяются они достаточно узко. Одним из таких ESB является IBM Integration Bus (IIB), до 9 версии именовался IBM Message Broker.
Несколько лет назад я столкнулся с таким продуктом как IIB. Пытаясь понять, что это за зверь, я обнаружил, что упоминаний о нём в русскоязычном интернете крайне мало. Данный пост позволит представить эту самую интеграционную шину во всей красе и помочь таким же ищущим как я.
В России данных продукт применяется достаточно ограниченно в банковской, страховой и логистической сфере. Именно там, где большой документооборот и высокие требования к надёжности. Также недавно большой газовый проект искал специалистов по IIB. Как там применяется шина я до конца не знаю, но возможно для телеметрии (MQTT).
Суть данного программного обеспечения связать N систем между собой, даже если эти системы имеют абсолютно разные интерфейсы и форматы. Скажем система X создаёт в своей БД запись в таблице и при её появлении мы хотим вызывать REST API другого приложения с JSON внутри, где будут передаваться поля нашей записи, и проставлять метку об отправке в другой таблице приложения X. И это всё с поддержкой транзакционности и гарантированной доставкой. (Когда одно приложение лезет в базу другого это плохо, но такое бывает!) Вот так выглядит типичная задача для потока IIB.
На чём ведётся разработка в IIB
Одной из самых удобных вещей в IIB это графическое программирование. Когда в среде Eclipse на поле вытягиваешь с палитры ноды, соединяешь их между собой и вжух, всё работает.
Выглядит это так:
Но писать код обычно тоже нужно. Для трансформации сообщений или логики основной язык это ESQL (Extend SQL). Синтаксически похож на PL/SQL, но заточен для работы с древовидными структурами данных.
CREATE PROCEDURE CopyMessageHeaders() BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER;
SET J = CARDINALITY(InputRoot.*[]);
WHILE I < J DO
SET OutputRoot.*[I] = InputRoot.*[I];
SET I = I + 1;
END WHILE;
END;
Также есть поддержка нескольких языков программирования:
- Java
- .NET
- PHP
Один из удобных способов трансформации сообщения из одного формата в другой это Data Mapping:
Очень наглядно, в отличии от того, если делаешь это в коде.
Выше я затронул вопрос трансформации сообщений, но до этого сообщение нужно получить. Для этого на политре есть достаточно большое количество Input узлов. Самые распространённые в моей практике это:
- MqInput
- FileInput
- SOAPInput
- HTTPInput
- TimeoutNotification
Для вывода сообщение с результатом будет примерно тот же набор. Для отдельных случаем есть возможность написть свои узлы для ввода, вывода или трансформации сообщение.
До последних версий IIB был неразрывно связан с IBM MQ, но в последней версии IIB (IBM App Connect Enterprise 11) это уже не требуется.
Так как это первый пост, я его сделал ознакомительным. Если будет интерес к теме, я продолжу повествование.
Полезные ссылки:
IBM Knoledge Center
Форум