上面案例子流程异常报错,触发边界错误事件,并没有触发补偿事件子流程。如果把子流程的异常内部吃了,不报出来,流程变量记录错误。子流程结束后,通过网关判断是否可完成事务一致性?
修改后的流程如下:
从下图可知这种补偿事件子流程也可以完成事务一致性操作,只是比事务子流程相对麻烦一些,对于业务事务比较强时,推荐通过事务子流程完成事务一致性。
Script Task 抓取错误异常信息记录流程变量
def id=execution.getProcessInstanceId()
def hasError=false
if(execution.hasVariable("vrMsg")){
def errorMsg = execution.getVariable("vrMsg");
hasError=true;
println "流程实例:"+id+",出现异常:"+errorMsg
execution.setVariable("hasError",hasError)
http://www.jiagouc.com/camunda-error-handling-compensation-mechanism-and-distributed-transaction-support/
为什么要建模
- 模型是易于测试的,在初期有一个可测的模型可以帮助减少试错成本,注意这里说的测试并不是指程序方面的测试.
- 对模型加以测试,可以确保程序是建立在一个可靠的业务逻辑上的.
什么是BPMN
BPMN全称业务流程建模与标注,作为一个标准,对于所有阅读者来说都有相同的含义.
即使是对于没有IT背景的业务人员,它也很容易理解.
BPMN不能用来做什么
BPMN的设计出发点是对过程进行建模,展示事情的逻辑顺序,仅此而已。
如果希望用它来展示组织架构,数据流,业务规则,策略,那这种想法是错误的.
为什么要建模
- 模型是易于测试的,在初期有一个可测的模型可以帮助减少试错成本,注意这里说的测试并不是指程序方面的测试.
- 对模型加以测试,可以确保程序是建立在一个可靠的业务逻辑上的.
什么是BPMN
BPMN全称业务流程建模与标注,作为一个标准,对于所有阅读者来说都有相同的含义.
即使是对于没有IT背景的业务人员,它也很容易理解.
BPMN不能用来做什么
BPMN的设计出发点是对过程进行建模,展示事情的逻辑顺序,仅此而已。
如果希望用它来展示组织架构,数据流,业务规则,策略,那这种想法是错误的.
进入localhost:端口/camunda/app/cockpit/default/#/login可见camunda首页,yml中配置为demo。3.IDEA安装外部Tools(选择解压路径的Camunda Modeler.exe)配置后第一次启动项目非常慢,启动成功后数据库会多出49张表。汉化效果:(驾驶舱内部未汉化,其他两个内部汉化了)(若修改用户id会新创建一个用户原用户不会删除)未完待续,后来有空再写。2.找个路径解压放好。4.使用时右击项目名。
Camunda平台运行
这是一个Spring Boot应用程序,其中包含Camunda引擎,Camunda Webapps和REST API。
您可以通过建模器向其部署流程,启动流程实例,对其进行管理并以最终用户的身份逐步进行操作。
BPMN流程模型
此仓库中有两个过程模型。 第一个显示了如何使用一系列服务以及如何预订假期。
第二种模式具有相同的酒店预订功能,此外还能够根据用户的选择撤消操作。
导入和添加是在此过程中
有段时间没写文章了,这段时间一直在看camunda服务编排的一些东西,之前没有接触过工作流引擎和服务编排类似的东西,花了一点时间来熟悉和理解。由于我们需要运用camunda来做服务编排,因此对于一个编排,其中的工作单元是分布在多个微服务内部的业务调用,如何在服务编排中保持分布式事务的支持就成了我的关注点。camunda提供了补偿机制和对应的SAGA 模式来完成分布式事务的支持。本篇文章将对...
Service Task、任务监听器和执行监听器都可执行调用Java 业务代码。
参考资料:
http://camunda-cn.shaochenfeng.com/user-guide/process-engine/delegation-code/服务任务 Class 配置的类,必须实现接口
org.camunda.bpm.engine.impl.pvm.delegate.ActivityBehavior; 功能大于JavaDelegate,用不好会出问题,小心使用。
org.camunda.bpm.
camunda事务与关系型数据库中的事务有点区别,但是通过关系型数据库事务实现的,camunda一个事务是两个wait state之间的部分。
camunda流程引擎是被动触发的,如启动流程实例、complete一次task, 发送一次执行信号,引擎内部的job executor触发等,
一次事务没结束时,数据没有被持久化到DB,相关数据表会加乐观锁。此时如果在事务中断点停止,其他访问(如访问cockpit)会被挂起,一个事务间的所有活动要么同时成功, 要么同时失败。wait state是camunda事务
19.发送任务(send task) & 接收任务(receive task)12.外部任务(external task)使用springboot sdk。15.外部任务(external task)python3实现。13.外部任务(external task)监听器&鉴权。14.外部任务(external task)go语言实现。18.脚本任务(script task)补充外部脚本文件。29.参与者泳池泳道(pool and lane)11.业务任务(service task)
2PC是两阶段提交的简称。
首先我们了解下XA 协议,我们来看一下数据库的两阶段提交。
对数据库分布式事务有了解的同学一定知道数据库支持的2PC,又叫做 XA Transactions。
MySQL从5.5版本开始支持,SQL Server 2005 开始支持,Oracle 7 开始支持。
其中,XA 是一个两阶段提交协议,该协...
下文中所谓的我们都是指ThoughtWorks,本文大部分是技术雷达的摘录。
关于技术雷达
ThoughtWorks人酷爱技术。我们对技术进行构建、研究、测试、开源、记述,并始终致力于对其进行改进-以求造福大众。我们的使命是支持卓越软件并掀起IT革命。
这个雷达是图形性质的,把各种技术项目归类为技术、工具、平台和语言及框架,如果某个条目可以出现在多个象限,我们选择看起来最合适的象限。我们...
与此对应的xml为:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/201