Разработчики — закрытая каста. Если ты не один из них, а какой-то там, прости господи, аналитик, на твой продукт даже не посмотрят. Та же проблема, с которой столкнулся турецкий астроном, когда открыл планету Маленького принца и попытался об этом рассказать.
Но где вайбкодеру найти правильный костюм, чтоб разработчики признали его за своего?
Логически эта схема абсолютно правильная. Мы отправляем запрос к внешнему сервису, он выполняет свою работу и возвращает ответ — тогда процесс продолжается.
Но есть нюансы:👀синхронная задача в вызываемом процессе может выполниться очень быстро, за миллисекунды⚡️. И тогда родительский процесс просто не успеет поймать ответное событие.🤷
Ведь что там происходит под капотом:
Перед Receive task у нас граница транзакции. Значит, процесс записывает свое состояние в базу. Потом создает подписку на получение сообщения. И тоже сохраняет ее в БД.
Все это занимает какое-то время — а внешний процесс уже успел начаться и кончиться, его сообщение улетело в никуда!😢
Чтобы не ломать себе голову — успеет или не успеет процесс стать в состояние ожидания для приема сообщения, просто используйте external task.
Здесь фишка будет не в том, что это какой-то внешний код на чем угодно — Java, Python, C++, JavaScript и так далее, а в самом механизме исполнения таких задач.
Вот как это делается:
Сервер видит, что есть внешняя задача с каким-то топиком. Дальше он публикует ее в очередь и ждет, пока внешний воркер ее исполнит.
Точь-в-точь как с user task'ами — задача висит, пока исполнитель не придет и не выполнит ее. Соответственно, процессу не надо ловить никакие сообщения, надо только ждать — модель получается проще.
Это можно использовать на любой BPM-платформе, которая поддерживает паттерн external task — Camunda, Flowable, Jmix BPM, OpenBPM и другие.
BPM Developers— про бизнес-процессы: новости, гайды, полезная информация и юмор.