相关文档
官网:
流程编排生成器
开源项目地址:
使用场景
多模块功能编排使用
业务中,有A、B、C、D、E五个业务功能。
接入了多个业务方,每个业务方对于单独的一个功能没有特殊需求,但是流程上有不同的需求。
比如:张三,需要常规流程:A-》B-》C-》D-》E
比如:李四,不需要C流程:A-》B-》D-》E
比如:王五,需要判断:A-》B-》(如果是C: -》C,如果是D:-》D)-》E
比如:赵六,需要逆向:E-》D-》C-》B-》A
通过上面不同的例子,发现能力没有变化,变化的是业务方的需求,这在实际场景中是非常常见的。
后面可能有更多的例子。接入一个业务方,常规做法,就需要在代码前面写一个适配器,通过判断业务方标识,来路由不同的流程。
每一个业务方都需要来做代码的改动。甚至完全一样的流程,也需要改动代码,因为需要把这个业务方路由到这个流程中去。
流程编排就是简化该操作,通过流程编排,来生成一套流程配置,把A,B,C,D,E五个能力,作为独立的功能,通过流程来编排五个能力的顺序。
单模块多版本使用
业务中也有这种场景,某个能力,由于业务迭代,流程做了升级,就会出现多版本共存的情况,业务不能停,不能因为业务的升级,对原有流程不支持了,后面还有可能发生回滚的情况,所以必须要向后兼容。
那么对业务数据,打上标记,通过流程编排,就可以很便捷的实现这个功能了。
KSTry介绍
ksTry是一个开源的流程编排项目,和Spring适配度极高,文档齐全,使用简单。
核心功能
@EnableKstry
启动器上面标注,启用KsTry能力。
加上这个注解之后,spring容器启动后,就会从指定位置,把所有的流程编排配置全部读取出来,加载到容器中。
@EnableKstry(bpmnPath = "./bpmn/*.bpmn,./bpmn/*.json")
这个注解,表示从resources/bpmn目录下,读取所有结尾时bpmn、json的流程编排文件。
@TaskComponent
核心的流程模块类上面,加上这个注解。流程路由时,就会找这个注解所注入的bean。
和spring容器的Component类似,加了这个,就不需要再加spring的Component了。
流程中两个重要配置之一,一个就是类名,一个方法名,这个就是类名。
注意:配置类名时,不需要指定包名,直接首字母小写的类即可。
@TaskService
该注解声明的方法,就是一个独立的单元块。
流程中两个重要配置之一,一个就是类名,一个方法名,这个就是方法名。
@NoticeVar
该注解表示,本方法的结果,会放入过程数据中。在流程编排中,分为入口参数,过程产生数据,最终结果数据三种。
将这个注解加在方法上,那么这个方法产生的结果,就会放入提前定义好的结果上。
@TaskService(desc = "查询A基础信息")
@NoticeVar(target = QueryScoreVarScope.D.testABasic)
public TestABasic getAData(@ReqTaskParam(QueryScopeRequest.D.id) Long id) {
logger.info("action !!! {}", id);
return new TestABasic().setId(id).setName("A");
}
上面这个方法,就会把返回的结果TestABasic, 放入QueryScoreVarScope这个过程数据中的testABasic字段。
@NoticeResult
该注解表示最终结果,一般用于最终的结果汇总,将所有的过程数据汇总到结果上面。
在方法上面加入该注解,所产生的结果,就会放入最终结果中。
@ReqTaskParam
该注解表示入口参数,如果你想从入口传入参数中,获取某个参数来作为必要的一些数据处理,那么就可以通过该参数,声明一下。
比如:public TestABasic getAData(@ReqTaskParam(QueryScopeRequest.D.id) Long id)
这个方法的参数声明,就是标识需要从入口参数中,获取id字段,放入这里。
@VarTaskParam
该注解表示过程参数入参,如果你想从过程中产生结果作为入参,那么就可以通过该注解来声明,想要哪个数据作为参数。
比如:public QueryScoreResponse getResponse(@VarTaskParam(QueryScoreVarScope.D.testABasic) TestABasic testABasic)
这个方法的参数声明,就是标识需要从过程中产生的数据中,获取方法所需要的参数。

453

被折叠的 条评论
为什么被折叠?



