# process-engine
**Repository Path**: zhzhenqin/process_engine
## Basic Information
- **Project Name**: process-engine
- **Description**: 流程引擎
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 2
- **Created**: 2019-05-14
- **Last Updated**: 2020-12-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### 流程引擎
### 项目介绍
process-engine
1. 定义业务执行流程,使得实现复杂逻辑代码时,不再面向过程,不再123456789步
2. 新来的伙伴不用再看老代码时,到处跳转,东跳一下,西跳一下看逻辑
3. 实现上下文管控,不再随意往上下文中添加各种参数传递
4. 实现前处理和后处理类切面,可用于但不限于,日志收集,业务数据收集,指标收集等。
### 语言:Java
### 使用说明
无须 Spring 支持,仅使用了 Spring AOP 的部分功能。
```xml
org.springframework
spring-aop
${spring.version}
org.springframework
spring-beans
```
### 二步:定义流程
```java
public static class XProcess extends AbstractProcessDefineRegister {
private static Handler startHandler = new HelloHander("START");
private static Handler oneHandler = new HelloHander("ONE");
private static Handler twoHandler = new HelloHander("TWO");
private static Handler threeHandler = new HelloHander("THREE");
private static Handler fourHandler = new HelloHander("FOUR");
private static Handler endHandler = new HelloHander("END");
/**
* 流程定义
*/
private final ProcessDefine process = new DefaultProcessDefine<>();
@Override
protected ProcessDefine createProcessDefine() {
return this.process;
}
@Override
public void register() {
//定义业务流程第一步
process.defineStart(startHandler);
//定义第一步执行结果为1时,执行 oneHandler, 为 2 时执行 two
process.doHandler(startHandler)
.when(1).go(oneHandler)
.when(2).go(twoHandler);
//定义 two 执行结果为4时,执行 fourHandler, 为 3 时执行 three
process.doHandler(twoHandler).when(4).go(fourHandler).when(3).go(threeHandler);
// one 执行完成后无论如何要执行 endHandler
process.doHandler(oneHandler).always(endHandler);
// four 执行完成后无论如何要执行 endHandler
process.doHandler(fourHandler).always(endHandler);
//重试增强控制器,当执行sixHandler执行结果不为true时,发生重试,每次间隔10秒,重试3次
//process.doController(new RetryController(twoHandler, true, 10, 3));
}
}
class HelloHander implements Handler {
String name;
public HelloHander(String name) {
this.name = name;
}
@Override
public Shunt execute(Context context) {
int num = new Random().nextInt(5);
System.out.println("=======================");
System.out.println("Hello, " + name + " return: " + num);
System.out.println("=======================");
return new InjectedShunt(num, name);
}
@Override
public String getName() {
return name;
}
}
public static void main(String[] args) {
Map initParam = Maps.newHashMap();
Context processCtx = ProcessContextFactory.createDefaultProcessCtx(initParam, "test");
ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(2, 10,
60, TimeUnit.SECONDS,
new ArrayBlockingQueue<>(300));
Map process = ImmutableMap.of("test", new XProcess());
DefaultProcessManager defaultProcessManager = new DefaultProcessManager(
poolExecutor,
process);
defaultProcessManager.run(processCtx);
}
```
以上流程实现 