Как посылать сигналы процессам Activiti асинхронно

Я хочу отделить определения процессов от реализаций служб, и связь между Java-кодом (микро) служб и процессами Activiti должна осуществляться только через интерфейс REST.

Бизнес-процессы часто асинхронны по своей структуре и идеально подходят для взаимодействия с использованием шаблонов интеграции publsih-subscribe-channel. (см. http://www.eaipatterns.com/PublishSubscribeChannel.html)

Однако, похоже, я не могу взаимодействовать с Activiti по каналам сообщений.

Упрощенный пример. Допустим, у меня есть процесс, в котором клиент заказывает некоторые продукты, в результате чего создается заказ p, а затем процесс ожидает оплаты заказа p, которую я ожидаю в течение определенного времени t, после чего я получаю событие автоматической отмены.

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

Мои экземпляры процесса n теперь прослушивают событие paymentReceived для определенного идентификатора orderId.

Входящие платежи обрабатываются другим архитектурным компонентом, который должен отправлять сигнал paymentReceived для определенного идентификатора orderId. Было бы идеально опубликовать это событие на канале.

Похоже, Activiti не имеет интерфейса канала и может быть запущена только прямым вызовом. Я могу вызвать среду выполнения, я могу вызвать экземпляры процесса и выполнение, но как вызывающая сторона я должен сам выяснить, какой из этих экземпляров или выполнений на самом деле является тем, который ожидает конкретного сигнала paymentReceived. Как вызывающий, я должен соотнести orderId события с orderId экземпляра процесса.

Следовательно, если я хочу использовать архитектуру публикации / подписки, мне нужно написать код, например, управляемый сообщениями bean-компонент, который выполняет задачу определения того, какой экземпляр процесса ожидает моего конкретного события.

Я ожидал, что такой код подписки на канал станет частью инструмента BPM. Очевидно, это не так для Activiti, что означает, что Activiti не является слабосвязанной системой, которую можно использовать в корпоративной SOA.

Или я что-то упустил? Есть ли способ использовать шаблоны обмена сообщениями с Activiti слабо связанным способом?

Есть альтернативы?


person ignazw    schedule 19.02.2015    source источник


Ответы (1)


Думаю, ты прав. Вы можете написать прослушиватель сообщений, который затем запустит процесс Activiti, дождется результатов, а затем отправит результаты обратно в другую очередь или использует другой шаблон SOA.

Возможно, вы захотите посмотреть http://www.activiti.org/userguide/#bpmnReceiveTask и посмотрите, соответствует ли это вашим потребностям.

Но я не вижу большой поддержки со стороны Activiti для этого.

person mooreds    schedule 06.04.2015
comment
Спасибо. В конце концов мы решили отказаться от Activiti для BPM из-за этого серьезного ограничения. - person ignazw; 04.11.2015
comment
@ignazw Просто из любопытства, нашли ли вы другой инструмент BPM, который имеет этот компонент подписки на каналы из коробки? - person Hesham; 18.05.2016