camunda 错误处理、补偿机制和分布式事务支持(转)

本文介绍了camunda在服务编排中的错误处理、补偿机制和分布式事务支持。错误处理包括事务回滚、异常捕获和逻辑判断、BPMN 2.0 错误事件。补偿机制通过补偿事件和事务性子流程实现,以SAGA模式确保分布式事务一致性。文章以实例解析了事务性子流程和撤销事件在流程控制中的应用。
摘要由CSDN通过智能技术生成

前言

有段时间没写文章了,这段时间一直在看camunda服务编排的一些东西,之前没有接触过工作流引擎和服务编排类似的东西,花了一点时间来熟悉和理解。由于我们需要运用camunda来做服务编排,因此对于一个编排,其中的工作单元是分布在多个微服务内部的业务调用,如何在服务编排中保持分布式事务的支持就成了我的关注点。camunda提供了补偿机制和对应的SAGA 模式来完成分布式事务的支持。本篇文章将对这一块进行描述和探讨。

错误处理机制

对于分布式事务来说,归根结底我们要考虑的就是,微服务调用出错的时候,我们的流程应该如何流转,并在这个流转过程中保证事务的一致性。因此我们第一个考虑的就是camunda本身的错误处理机制是什么。

事务回滚

第一种错误处理方式是事务回滚,要理解这个方式我们首先要看看camunda中事务是怎么组织的。在camunda中,流程的运行是被封装在一个个客户线程(client thread)中。可以这么理解,当一个启动或者继续流程的请求到来之时,在我们的服务器的处理线程中(类似于tomcat中的http-thread-pool开头的那些线程),我们通过调用类似于下面的API

runtimeService.startProcessInstanceByKey(...)

来发起一个流程,这时候整个流程就完全运行在http-thread-pool线程中,这就称之为我们借用了一个客户线程,在这个线程中,camunda始终会开启一个数据库事务,并在这个事务下进行流程的运转。
在这个情况下,流程会一直运转到下一个等待状态(wait status 代表流程会在后面的某个时期继续),然后完成状态的持久化到数据库中,结束事务。在bpmn标准中,有下列几个等待状态:

  • Tasks:
    1. 接受任务(receive task)
    2. 用户任务(user task)
    3. 外部服务任务(service task: external task)
  • Events:
    1. 消息事件(message event)
    2. 定时事件(timer event)
    3. 信号事件(signal event)
  • Gateway
    1. 基于时间的逻辑门(Event Based Gateway)

我们可以通过下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值