Интеграция с внешними сервисами в BPM
В процессе скоринга часто требуется обращение к внешним сервисам: проверка в бюро кредитных историй, антифрод-системы, верификация данных и другие проверки. BPM предоставляет два основных механизма для такой интеграции.
Способы интеграции
| Способ | Когда использовать |
|---|---|
| External Worker Task | Простые проверки, polling-модель, не критична задержка |
| RPC через Kafka | Долгие операции, асинхронная обработка |
1. External Worker Task
Что это
External Worker — это механизм, при котором внешний сервис сам "забирает" задачи из BPM, выполняет их и возвращает результат. Это похоже на очередь задач: BPMN-процесс создаёт задачу с определённым topic, а ваш сервис периодически опрашивает платформу на наличие новых задач.
Как это работает
Как использовать в BPMN-схеме
В BPMN-схеме используется Service Task с типом "external worker":
- Добавьте Service Task на схему
- Укажите тип задачи: External Worker
- Задайте Topic — уникальный идентификатор для вашего сервиса
Формат Topic
Рекомендуемый формат: {project_code}.{action}.{version}
| Пример | Описание |
|---|---|
myproject.credit-check.v1 | Проверка кредитной истории, версия 1 |
myproject.fraud-detection.v2 | Антифрод проверка, версия 2 |
lending.document-verify.v1 | Верификация документов |
Передача данных
- Входные данные: переменные процесса автоматически передаются в задачу
- Выходные данные: результат работы сервиса сохраняется в переменные процесса
Типы результатов
После выполнения задачи сервис должен вернуть один из трёх типов результата:
| Результат | Когда использовать | Что происходит |
|---|---|---|
| success | Задача выполнена успешно | Процесс продолжается по основному пути |
| bpmnError | Бизнес-ошибка (например, клиент не прошёл проверку) | Процесс переходит на обработчик ошибки (Error Boundary Event) |
| fail | Техническая ошибка (сервис недоступен, таймаут) | Задача будет повторена согласно настройкам retry |
success — используйте, когда проверка прошла и есть результат (положительный или отрицательный). Например: "клиент найден в базе БКИ, кредитный рейтинг 750".
bpmnError — используйте для бизнес-исключений, которые должны изменить ход процесса. Например: "клиент в чёрном списке" — процесс может перейти на ветку отказа. При отправке bpmnError указывается код ошибки, который можно обработать на схеме:
- Error Boundary Event без кода — ловит все bpmnError
- Error Boundary Event с кодом — ловит только ошибки с указанным кодом (например,
BLACKLIST,FRAUD_DETECTED)
fail — используйте при технических сбоях, когда задачу нужно повторить. Например: "сервис БКИ недоступен" — система повторит запрос позже.
Когда использовать
- Простые и быстрые проверки (до нескольких секунд)
- Сервис может работать в режиме polling
- Допустима небольшая задержка между созданием задачи и её получением
2. Асинхронное взаимодействие через Kafka
Что это
RPC через Kafka — это паттерн Request/Reply, где BPMN-процесс отправляет сообщение в Kafka-топик и ожидает ответа в другом топике. Этот подход подходит для долгих операций и асинхронной обработки.
Как это работает
Как использовать в BPMN-схеме
Для реализации RPC через Kafka в BPMN используются два элемента:
- Send Task — для отправки запроса в Kafka
- Message Catch Event — для ожидания ответа
Correlation ID
Ключевой момент — связь запроса и ответа через Correlation ID. Это уникальный идентификатор (обычно ID экземпляра процесса), который:
- Отправляется вместе с запросом
- Возвращается вместе с ответом
- Позволяет BPM понять, какому процессу адресован ответ
Когда использовать
- Долгие операции (минуты, часы)
- Внешний сервис работает асинхронно
- Высокая нагрузка и требования к масштабируемости
Сравнение подходов
| Критерий | External Worker | Kafka RPC |
|---|---|---|
| Сложность использования | Низкая | Средняя |
| Модель взаимодействия | Polling | Pub/Sub |
| Задержка | Зависит от интервала polling | Минимальная |
| Подходит для | Простые быстрые проверки | Долгие операции, критичные интеграции |
| Масштабируемость | Средняя | Высокая |
Рекомендации по выбору
Используйте External Worker, если:
- Проверка выполняется быстро (секунды)
- Логика простая и синхронная
- Хотите минимум настройки
Используйте Kafka RPC, если:
- Операция может занять много времени
- Сервис должен обрабатывать большой поток запросов
- Нужна асинхронная архитектура