Make legacy great again
![](https://habrastorage.org/getpro/habr/upload_files/e1c/415/361/e1c415361d57c8cf1096c9ac3982e326.png)
Для начала запускаем IBM App Connect Entrerprise Toolkit (в десятой версии - IBM Integration Toolkit), слева во вкладке "Application Development" нажимаем New -> Start by creating an application:
![Назовём наше приложение "Increment Integer" Назовём наше приложение "Increment Integer"](https://habrastorage.org/getpro/habr/upload_files/f87/2e5/3d4/f872e53d4af655c8b594af29c2c73387.png)
Приложения в IBM Integration Bus (далее - IIB) служат как логические контейнеры для flow. Flow в интеграционной шине всегда должно иметь начало и конец. Наш flow должен уметь принимать HTTP запросы, поэтому в начало мы поставим HTTP Input:
Далее, нужно создать Message Flow. Приложение может содержать несколько flow, в данном примере создадим один и назовем его Incrementor. Для этого в приложении нажимаем на (New...) -> Message Flow:
![](https://habrastorage.org/getpro/habr/upload_files/15c/09c/5f0/15c09c5f017d282fdd450b3807c91259.png)
На flow размещаются компоненты из палитры:
![Палитра компонентов Палитра компонентов](https://habrastorage.org/getpro/habr/upload_files/885/f2b/eee/885f2beee59a6fb05dfbe7c2796a0886.png)
Каждый flow для работы должен иметь как минимум входной компонент. Такие компоненты в палитре отмечаются зелёной полоской слева. В нашем случае мы будем использовать компонент HTTPInput. Для его размещения на flow выбираем в палитре вкладку HTTP, зажимаем правую кнопку мыши на HTTPInput и перетаскиваем компонент на flow editor:
![Flow editor с HTTPInput Flow editor с HTTPInput](https://habrastorage.org/getpro/habr/upload_files/da5/011/241/da50112416f023e9673e150f5382797e.png)
Настройки компонента:
![](https://habrastorage.org/getpro/habr/upload_files/217/35f/fd1/21735ffd13c6e95934ef9f27a6410ef9.png)
Path suffix for URL - нужно указать путь для эндпоинта. Следует указывать только путь, адрес и порт указывать не нужно
![Вкладка "Input Message Parsing" Вкладка "Input Message Parsing"](https://habrastorage.org/getpro/habr/upload_files/05c/75f/bc5/05c75fbc565a36a09d0f0a0ad258de91.png)
Message domain - тут нужно указывать формат тела запроса, который будет приходить на эндпоинт. Часто используются три формата:
XMLNSC - для XML сообщений, позволяет использовать валидацию и потребляет мало памяти
JSON - для JSON сообщений
BLOB - для набора байтов, после это сообщение можно распарсить в ESQL
В данном случае будем использовать JSON.
![Вкладка "Error Handling" Вкладка "Error Handling"](https://habrastorage.org/getpro/habr/upload_files/1f6/0d7/b29/1f60d7b29b304e97fb1dfb0392b31638.png)
Maximum client wait time (sec)* - время ожидания клиента в секундах. Если время обработки сообщения займёт больше указанного, то IIB сгенерирует сообщение об ошибке и вернёт клиенту.
Fault format* - формат ошибки после таймаута. Можно выбрать SOAP 1.1, SOAP 1.2m, HTML и JSON. В данном случае выбираем JSON.
Остальные настройки оставляем по умолчанию. После получения сообщения необходимо его обработать. За это отвечает компонент Compute, который находится на палитре во вкладке Transofmation:
![](https://habrastorage.org/getpro/habr/upload_files/876/d15/aa7/876d15aa72aa762ecd4ffe548d32ac1d.png)
После сохранения редактора компонент Compute будет показывать ошибку, так как к нему не привязан файл ESQL.
ESQL - это язык программирования, который используется в IIB для обработки сообщений и построения сложной логики. Подробнее тут: https://www.ibm.com/docs/en/integration-bus/10.0?topic=esql-overview. Для создания и привязки ESQL файла к Compute дважды на нём щёлкаем. После этого открывается редактор кода с сгенерированным шаблоном:
![](https://habrastorage.org/getpro/habr/upload_files/485/ac8/a9b/485ac8a9b28e96d691c7bd44a002041e.png)
Вернёмся во flow. Чтобы передать сообщение из HTTPInput в Compute, их необходимо соединить через терминалы.
Каждый компонент в палитре IIB имеет терминалы. Терминалы - это точки соединения компонентов друг с другом, они подразделяются на входные и выходные. Входные компоненты имеют только выходные терминалы. Например, HTTPInput имеет 4 выходных терминала, а именно:
![Справа - выходные терминалы Справа - выходные терминалы](https://habrastorage.org/getpro/habr/upload_files/d0b/9a1/94c/d0b9a194c5eeeb02d8d89b1ff387c4a5.png)
Failure - присутствует практически в каждом компоненте. Если в компоненте происходит Exception, сообщение выходит из этого терминала
Out - если всё успешно, сообщение выходит тут
HTTP Timeout - если flow долго отрабатывает, в нём генерируется ошибка
Catch - сюда приходят Exception с flow
Чтобы вернуть ответ клиенту, ставим компонент HTTPReply:
![](https://habrastorage.org/getpro/habr/upload_files/98a/384/1fe/98a3841fe8812c9e10d8e5385382ba46.png)
Теперь заходим в 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. В итоге должно выглядеть так:
![](https://habrastorage.org/getpro/habr/upload_files/a8c/8de/413/a8c8de413cf17176e9429a8201cf45f1.png)
Чтобы задеплоить приложение, его необходимо запаковать в BAR. Для этого жмём правой кнопкой мыши на приложении -> New -> BAR file. Как Container выбираем само приложение, имя ставим какое угодно:
![](https://habrastorage.org/getpro/habr/upload_files/9cf/18e/75d/9cf18e75daa6671e4a7ee0cd7789760c.png)
Далее жмём на барник и выбираем внутри него приложение, которое хотим задеплоить:
![](https://habrastorage.org/getpro/habr/upload_files/c22/581/963/c2258196335b219c9d3a422e5a862b2e.png)
Далее надо сбилдить барник, для этого жмём кнопку “Build and Save…”.
Деплоим на интеграционный сервер, для этого жмём правой кнопкой мыши на Incrementntreger.bar -> Deploy и выбираем нужный сервер. Также можно просто перенести барник мышкой на нужный интеграционный сервер, через Drag n Drop.
Для того, чтобы протестировать приложение, надо сначала найти, какой http порт использует нода. Существует два типа http listener - на всю ноду и встроенный в интеграционный сервер. По умолчанию для http запросов используется первый. Чтобы узнать, какой именно порт используется, в Integration Console вбиваем команду:
mqsireportproperties IB10NODE -b httplistener -o HTTPListener -r
![](https://habrastorage.org/getpro/habr/upload_files/f09/bbd/377/f09bbd377871811365c21d08afc57410.png)
Порт находится в параметре HTTPListener->HTTPConnector->ListenerPort
Проверяем в SoapUI:
![](https://habrastorage.org/getpro/habr/upload_files/c02/4f5/b25/c024f5b25a2506b7a3437c5579614912.png)
Готово! В следующий раз опишу обработку исключений и логирование в IIB.