Я хочу отделить определения процессов от реализации служб, а связь между 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 в связном режиме?
Любые альтернативы?
Спасибо. Мы, наконец, решили отказаться от Activiti для BPM из-за этого серьезного ограничения. – ignazw
@ignazw Просто из любопытства вы нашли еще один инструмент BPM, который имеет этот компонент для подписки на канал из коробки? – Hesham