MintFlow是一个轻量级流程调度引擎,它的处理逻辑是将所有的功能都抽象成一个一个的方法,然后通过DSL领域语言中指定的函数调用过程然后传递进入调度引擎中,从而实现业务逻辑
| 对比项 | MintFlow | 规则引擎 |
|---|---|---|
| 处理的最小颗粒度 | handle(函数) | if else等流程控制语句 |
| 规则植入的方法 | 手动编写java handle函数 | 方法不等(输入值,配置语句等) |
| 使用方法 | 在java中使用接口中的函数进行调用 | 提供调用的通用类或其他犯法 |
| 接入成本 | 非常低(只编写处理逻辑即可) | 高(有复杂的api和页面需要学习和掌握) |
| 可控性 | 非常高(核心逻辑是自己编写的函数) | 低以来框架自己提供的规则 |
namespace(x1){
process(x2){
->handle(x3)->reorder(x4){
->handle(x5)->handle(x6)
}->if(x7){
->reorder(x4){
->handle(x5)->handle(x6)
}
}elif(x8){
->if(x8){
->reorder(x4){
->handle(x5)->handle(x6)
}
}
}else{
->handle(x9)->handle(x10)
}->handle(x9)->handle(x10)
}
}
关键词解释 :
| ID | 解释 |
|---|---|
| namespace | 表示一个流程的命名空间 |
| process | 表示一个命名空间下面指定的一个流程 |
| reorder | 重排序handle , 用于指定子流程的执行顺序 , 可以获取到子流程 |
| handle | 一个基本的执行器 |
| if elif else | 控制语句和 CycleHandler 连用 |
只需要继承handle接口,并且使用@Handler注解指定handle的名称
@Handler(value = "one")
public class TestHandlerOne implements Handler {
@Override
public void before() {}
@Override
public void after() {}
@Override
public void error(Exception e) {
System.out.println("no need handle");
}
@Override
public ParamWrapper handle(ParamWrapper p) {
// do someThing xxx
return p;
}
}handle 接口中拥有一些方法和作用
| 方法名 | 作用 |
|---|---|
| before | 交给迭代器之前调用的方法 |
| after | 交个迭代器之后调用的方法 |
| error | 出现异常调用的方法 |
| handle | 普通调用的方法 |
迭代器的作用是可以引用大量的handle然后在内部处理handle的顺序,然后将处理好的handle流交给迭代器处理
@Handler(value = "rone")
public class ReoaderOne extends ReorderHandler {
@Override
public void buildHandlerSteam(List<Handler> handleList, ParamWrapper paramWrapper) {
handleList.sort(new Comparator<Handler>() {
@Override
public int compare(Handler o1, Handler o2) {
return 0;
}
});
}
}选择器的作用是可以返回boolean类型的结果来判断运行那一个工作流程
@Handler("sone")
public class SelectOne extends SelectorHandler {
@Override
public boolean select(ParamWrapper p) {
Integer integer = p.get(Integer.class);
return integer != null && integer > 1000;
}
}@ProcessNameSpace(id = "namespace1")
public interface TestProcess extends Process {
@ProcessMethod(id="process1")
String sayName(String name);
}ProcessNameSpace : 表示命名空间 ProcessMethod : 表示流程管理
参数配置文件中可以制定MintFlow需要读取的handle process 和 DSL文件的路径,支持 ',' 号分割的字符串表示的数组
org.mekweg.handle-path: com.kyssion.org.mekweg.test.fnHandler
org.mekweg.map-path: x.org.mekweg
org.mekweg.process-path: com.kyssion.org.mekweg.test.processMintFlow提供工厂来初始化 MintFlow核心类
public class MintFlowTest {
public static void main(String[] args) {
MintFlowFactory factory = MintFlowFactoryBuilder.build(
MintFlowTest.class.getClassLoader().getResource(morg.mekwegFile());
MintFlow org.mintflow = factory.corg.mekweg }
}@ProcessNameSpace(id = "namespace1")
public interface TestProcess extends Process {
@ProcessMethod(id="process1")
String sayName(String name);
}
public class MintFlowTest {
public static void main(String[] args) {
System.out.println(Objects.requireNonNull(MintFlowTest.class.getClassLoader().getResource(mekweg)).getFile());
org.mekwegxyFactory factory = MintFlowFactoryBuilder.build(MintFlowTest.class.getClassLoader().getResource(mekweg).getFile());
MintFlow org.mintfloworg.mekweg.create();
//-------------------
org.mekwegcess process = org.mintflow.getProcess(TestProcess.class);
String name = prorg.mekwegame("");
System.out.println(name);
}
}通过 MintFlow 框架提供的factory 可以快速构建出MintFlow 核心类,然后使用get方法可以拿到映射接口对应的代理,然后通过代理执行对应的流程