Pull to refresh

Построение простого flow в IBM App Connect (Integration Bus)

Reading time4 min
Views2.5K

Make legacy great again

Для начала запускаем IBM App Connect Entrerprise Toolkit (в десятой версии - IBM Integration Toolkit), слева во вкладке "Application Development" нажимаем New -> Start by creating an application:

Назовём наше приложение "Increment Integer"
Назовём наше приложение "Increment Integer"

Приложения в 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:

Flow editor с HTTPInput
Flow editor с HTTPInput

Настройки компонента:

Path suffix for URL - нужно указать путь для эндпоинта. Следует указывать только путь, адрес и порт указывать не нужно

Вкладка "Input Message Parsing"
Вкладка "Input Message Parsing"

Message domain - тут нужно указывать формат тела запроса, который будет приходить на эндпоинт. Часто используются три формата:

  • XMLNSC - для XML сообщений, позволяет использовать валидацию и потребляет мало памяти

  • JSON - для JSON сообщений

  • BLOB - для набора байтов, после это сообщение можно распарсить в ESQL

В данном случае будем использовать JSON.

Вкладка "Error Handling"
Вкладка "Error Handling"

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.

Tags:
Hubs:
Rating0
Comments4

Articles