如何异步发送信号到Activiti进程

时间:2015-02-19 11:08:51

标签: soa activiti bpm

我希望将流程定义与服务实现分离,并且(微)服务的Java代码与Activiti流程之间的通信应仅通过REST接口。

业务流程通常是设计上的异步,并且非常适合使用publsih-subscribe-channel集成模式进行交互。 (cf http://www.eaipatterns.com/PublishSubscribeChannel.html

然而,似乎我无法使用消息通道与Activiti交互。

简化示例。假设我有一个流程,客户订购某些产品,产生订单p,然后流程等待订单p的支付,我希望在一定的时间t内,之后我得到一个自动取消活动。

我希望获得许多订单,这意味着我将有许多正在运行的流程实例。每个实例都使用orderID作为变量。

我的n个流程实例现在正在侦听特定orderId的paymentReceived事件。

收款由不同的架构组件处理,该组件必须发送特定orderId的paymentReceived信号。将此事件发布到频道上是理想的。

似乎Activiti没有通道接口,只能通过直接调用来触发。我可以调用运行时,我可以调用流程实例和执行,但作为主叫方,我必须弄清楚自己这些实例或执行中的哪一个实际上是等待特定的paymentReceived信号的实例。作为调用者,我必须将事件中的orderId与流程实例中的orderId相关联。

因此,如果我想使用发布/订阅架构,我必须编写代码,例如,消息驱动的bean,它执行确定哪个流程实例正在等待我的特定事件的任务。

我希望这种频道订阅代码成为BPM工具的一部分。显然,Activiti不是这样,这意味着Activiti不是一个可在企业范围内使用的松散耦合系统。

或者我错过了什么?有没有办法以松散耦合的方式使用Activiti的消息传递模式?

任何替代方案?

1 个答案:

答案 0 :(得分:1)

我认为你是对的。您可以编写一个消息侦听器,然后启动一个Activiti进程,等待结果,然后将结果推回到另一个队列,或使用其他一些SOA模式。

您可能需要查看http://www.activiti.org/userguide/#bpmnReceiveTask并查看是否符合您的需求。

但是我没有在Activiti内看到任何支持。