2015-02-19 3 views
1

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

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

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

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

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

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

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

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

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

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

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

Любые альтернативы?

ответ

0

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

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

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

+0

Спасибо. Мы, наконец, решили отказаться от Activiti для BPM из-за этого серьезного ограничения. – ignazw

+0

@ignazw Просто из любопытства вы нашли еще один инструмент BPM, который имеет этот компонент для подписки на канал из коробки? – Hesham

Смежные вопросы