Обновить

Когда скорость может быть проблемой🚀

Логически эта схема абсолютно правильная. Мы отправляем запрос к внешнему сервису, он выполняет свою работу и возвращает ответ — тогда процесс продолжается.

Но есть нюансы:👀 синхронная задача в вызываемом процессе может выполниться очень быстро, за миллисекунды⚡️. И тогда родительский процесс просто не успеет поймать ответное событие.🤷

Ведь что там происходит под капотом:

Перед Receive task у нас граница транзакции. Значит, процесс записывает свое состояние в базу. Потом создает подписку на получение сообщения. И тоже сохраняет ее в БД.

Все это занимает какое-то время — а внешний процесс уже успел начаться и кончиться, его сообщение улетело в никуда!😢

Чтобы не ломать себе голову — успеет или не успеет процесс стать в состояние ожидания для приема сообщения, просто используйте external task.

Здесь фишка будет не в том, что это какой-то внешний код на чем угодно — Java, Python, C++, JavaScript и так далее, а в самом механизме исполнения таких задач.

Вот как это делается:

Сервер видит, что есть внешняя задача с каким-то топиком. Дальше он публикует ее в очередь и ждет, пока внешний воркер ее исполнит.

Точь-в-точь как с user task'ами — задача висит, пока исполнитель не придет и не выполнит ее. Соответственно, процессу не надо ловить никакие сообщения, надо только ждать — модель получается проще.

Это можно использовать на любой BPM-платформе, которая поддерживает паттерн external task — Camunda, Flowable, Jmix BPM, OpenBPM и другие.

BPM Developers — про бизнес-процессы: новости, гайды, полезная информация и юмор.

Теги:
0
Комментарии0

Публикации

Ближайшие события