Make legacy great again
Для начала запускаем IBM App Connect Entrerprise Toolkit (в десятой версии - IBM Integration Toolkit), слева во вкладке "Application Development" нажимаем New -> Start by creating an application:
Приложения в IBM Integration Bus (далее - IIB) служат как логические контейнеры для flow. Flow в интеграционной шине всегда должно иметь начало и конец. Наш flow должен уметь принимать HTTP запросы, поэтому в начало мы поставим HTTP Input:
Далее, нужно создать Message Flow. Приложение может содержать несколько flow, в данном примере создадим один и назовем его Incrementor. Для этого в приложении нажимаем на (New...) -> Message Flow:
На flow размещаются компоненты из палитры:
Каждый flow для работы должен иметь как минимум входной компонент. Такие компоненты в палитре отмечаются зелёной полоской слева. В нашем случае мы будем использовать компонент HTTPInput. Для его размещения на flow выбираем в палитре вкладку HTTP, зажимаем правую кнопку мыши на HTTPInput и перетаскиваем компонент на flow editor:
Настройки компонента:
Path suffix for URL - нужно указать путь для эндпоинта. Следует указывать только путь, адрес и порт указывать не нужно
Message domain - тут нужно указывать формат тела запроса, который будет приходить на эндпоинт. Часто используются три формата:
XMLNSC - для XML сообщений, позволяет использовать валидацию и потребляет мало памяти
JSON - для JSON сообщений
BLOB - для набора байтов, после это сообщение можно распарсить в ESQL
В данном случае будем использовать JSON.
Maximum client wait time (sec)* - время ожидания клиента в секундах. Если время обработки сообщения займёт больше указанного, то IIB сгенерирует сообщение об ошибке и вернёт клиенту.
Fault format* - формат ошибки после таймаута. Можно выбрать SOAP 1.1, SOAP 1.2m, HTML и JSON. В данном случае выбираем JSON.
Остальные настройки оставляем по умолчанию. После получения сообщения необходимо его обработать. За это отвечает компонент Compute, который находится на палитре во вкладке Transofmation:
После сохранения редактора компонент Compute будет показывать ошибку, так как к нему не привязан файл ESQL.
ESQL - это язык программирования, который используется в IIB для обработки сообщений и построения сложной логики. Подробнее тут: https://www.ibm.com/docs/en/integration-bus/10.0?topic=esql-overview. Для создания и привязки ESQL файла к Compute дважды на нём щёлкаем. После этого открывается редактор кода с сгенерированным шаблоном:
Вернёмся во flow. Чтобы передать сообщение из HTTPInput в Compute, их необходимо соединить через терминалы.
Каждый компонент в палитре IIB имеет терминалы. Терминалы - это точки соединения компонентов друг с другом, они подразделяются на входные и выходные. Входные компоненты имеют только выходные терминалы. Например, HTTPInput имеет 4 выходных терминала, а именно:
Failure - присутствует практически в каждом компоненте. Если в компоненте происходит Exception, сообщение выходит из этого терминала
Out - если всё успешно, сообщение выходит тут
HTTP Timeout - если flow долго отрабатывает, в нём генерируется ошибка
Catch - сюда приходят Exception с flow
Чтобы вернуть ответ клиенту, ставим компонент HTTPReply:
Теперь заходим в Compute и в функции Main пишем следующий код:
SET OutputRoot.JSON.Data.testNumber = InputRoot.JSON.Data.testNumber + 1;
Здесь OutputRoot - исходящее сообщение, InputRoot - входящее, JSON - domain сообщения.
Приложения деплоят на интеграционные сервера, которые, в свою очередь, поднимаются на Integration Nodes. Если тулкит показывает, что ноды у вас нет, нужно её создать. Для этого запускаем IBM Integration Console (IBM App Connect Enterprise Console) и вбиваем там команду:
mqsicreatebroker IB10NODE -i wbrkuid -a wbrkpw
Где IB10NODE - имя ноды, wbrkuid - логин пользователя Windows, wbrkpw - пароль от него.
Затем,уже в интерфейсе создаём внутри ноды интеграционный сервер через щелчок правой кнопкой мыши на ноде -> New Integration Server. В итоге должно выглядеть так:
Чтобы задеплоить приложение, его необходимо запаковать в BAR. Для этого жмём правой кнопкой мыши на приложении -> New -> BAR file. Как Container выбираем само приложение, имя ставим какое угодно:
Далее жмём на барник и выбираем внутри него приложение, которое хотим задеплоить:
Далее надо сбилдить барник, для этого жмём кнопку “Build and Save…”.
Деплоим на интеграционный сервер, для этого жмём правой кнопкой мыши на Incrementntreger.bar -> Deploy и выбираем нужный сервер. Также можно просто перенести барник мышкой на нужный интеграционный сервер, через Drag n Drop.
Для того, чтобы протестировать приложение, надо сначала найти, какой http порт использует нода. Существует два типа http listener - на всю ноду и встроенный в интеграционный сервер. По умолчанию для http запросов используется первый. Чтобы узнать, какой именно порт используется, в Integration Console вбиваем команду:
mqsireportproperties IB10NODE -b httplistener -o HTTPListener -r
Порт находится в параметре HTTPListener->HTTPConnector->ListenerPort
Проверяем в SoapUI:
Готово! В следующий раз опишу обработку исключений и логирование в IIB.