基于DAG的事件流flow驱动
使用简单,常用就几个方法:
- Add: 添加任务节点至
DagFlow中。 - Connect: 连接点与点之间的有向关系。
- Validate: DAG图校验,只有校验通过后才会执行后续步骤。
- Run: 执行DAG图事件流。
Job节点需要重载以下函数,详细参加
example.go:type JobNode interface { // 事件处理 Exec() // 事件处理完成后调用 Complete() // 函数唯一编号 dag.Hashable // 是否完成 IsFinished() bool // 设置结果 SetFinished(bo bool) // 节点唯一编号 GetTaskID() uint64 }
上图中,明显不是有向无环图,因为存在两个root节点1和2,所以在执行Validate时会报多个root节点的错。
完整用例见:examples/ex1/ex1.go
上图中,主要展示的是无根节点的情况,也就是这个是循环的,所以在执行Validate时会报找不到root节点。
完整用例见:examples/ex2/ex2.go
上图中,是一个比较简单的有向无环图,在执行Run时,执行顺序会如图所示,依次执行1、2、3。
完整用例见:examples/ex3/ex3.go
上图中,是一个比较简单的有向无环图,在执行Run时,当检测到一个节点后有多个分支的情况时,会采用并发的形式去执行后续的节点,所以执行顺序会是先执行1,然后同时执行2和3。
完整用例见:examples/ex4/ex4.go
上图中,是一个相对复杂的有向无环图,结合Example 3和Example 4的情况,执行顺序是首先执行1,随后并行执行2、3、4,此时执行完4后,就准备执行6,但检测到要执行6的前提会是先执行完成5,所以后面的顺序是执行完5后再执行6。
完整用例见:examples/ex5/ex5.go
如果这个小工具对你有帮助的话欢迎留个Star鼓励一下,😆




