流程引擎(flowable)之接收任务

接收任务(ReceiveTask)是bpm2.0规范的一种任务,是一种等待任务,它会等待对应消息的到达。 当流程流转到接收任务,流程状态会保存到数据库中(ACT_RU_EXECUTION表会维护该任务)。

bpm配置

				<bpmn2:receiveTask id="Activity_1pao7ht" name="这是一个接收任务"></bpmn2:receiveTask>

任务运行流程

当执行流进入ReceiveTask时会先执行执行监听器,然后整个执行流进入wait等待状态,而且在act_ru_task中不没有当前正在进行中的任务,当执行流执行trigger()方法时才会触发正在睡眠的ReceiveTask,进入下一个节点。

任务执行代码:

//获取执行管理对象	
RuntimeService runtimeService = configuration.getRuntimeService();
				//通过processInstanceId流程实例id和activityId任务节点id到执行实例表(ACT_RU_EXECUTION)中查询挂起的接收任务
        List<Execution> executions = runtimeService.createExecutionQuery()
                .processInstanceId("5")
                .activityId("Activity_0g2747s")
                .listPage(0, 1);
				// 调用trigger方法唤醒流程并进入到下一个节点
        for (Execution execution : executions) {
            runtimeService.trigger(execution.getId());
        }

总结:

ReceiveTask的执行过程优点类似java中的wait和notify方法,当ReceiveTask任务的【前驱任务】执行完成后会删除act_ru_task中的任务记录并将任务挂起类似于wait,实际开发中当接收到通知时调用runtimeService.trigger唤醒任务并进入【后继任务】。在公司业务中其实也有此任务的使用场景,以银数项目为例:【等待落实方款条件】任务节点,流程引擎服务监听到金融网关通过kafka传输的行内反馈信息,触发trigger方法,设置流程变量,流程正常流转。目前公司使用UserTask任务完成此节点任务显然是不合适的,虽然在功能上可以实现,但我认为专用的场景使用特定的任务有利于日后的功能扩展。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值