Механизмы BPM и общее состояние

#concurrency #business-process-management #shared-state

Вопрос:

Позволяют ли механизмы BPM совместно использовать состояние между экземплярами рабочего процесса?

У нас есть вариант использования (POC), когда служба может получать несколько идентичных запросов на ОТДЫХ. Каждый запрос содержит идентификатор — мы считаем два запроса идентичными, если их идентификаторы идентичны. Задача состоит в том, чтобы реализовать это, используя BPM в качестве механизма рабочего процесса, и обрабатывать любую параллельность с уровня механизма BPM, а не содержать ит-службу. Поведение можно резюмировать следующим образом:

  • Если экземпляр рабочего процесса с соответствующим идентификатором уже существует, служба должна вернуть значение хода выполнения этого рабочего процесса.
  • Если экземпляр рабочего процесса с соответствующим идентификатором закончился в течение определенного времени в прошлом, служба возвращает последнее значение выполнения этого рабочего процесса (может быть «Успех», «Сбой». и т.д.)
  • Если нет экземпляра рабочего процесса с соответствующим идентификатором, который завершился в течение определенного периода времени, следует запустить новый, и служба вернет значение выполнения, т. е. «Выполняется».
  • Мы хотим убедиться, что для каждого идентификатора создается только один экземпляр рабочего процесса, независимо от того, сколько запросов с этим идентификатором поступает в службу.

Я думаю, это было бы относительно легко, если бы мы могли использовать механизм BPM, который обеспечивает некоторую форму синхронизированного состояния, разделяемого между экземплярами рабочего процесса. Существует ли движок BPM, который на самом деле обеспечивает такую функциональность?