背景

   某一天一如既往的上班”旅途“中,我的领导在开早会的时候,说我最近没啥事,于是让我研究一下Activiti工作流引擎与Drools规则引擎,当时也不知道后边具体要做什么,管它的,先看看再说。看了几天后,写了个简单的demo出来,结果发现Activiti这个东西不就是可以用来做流程审批的嘛;最后我们就开始开发基于Activiti的工作流引擎。并且部分功能与定时任务调度中心进行整合,实现了简单的流程编排任务。

   调度中心本身有一个子任务的概念,但子任务是有先后顺序的,所以这里不太符合需求。在xxl-job的github上我看到过这样一个issue:
xxl-job之实现流程任务编排思路-LMLPHP
看来还是很多人想要这个功能呢,目前我们先自己实现一个简单的流程任务编排。

实现思路

概念描述

   因为涉及到了工作流的东西,在此处只简单介绍一下Activiti工作流引擎。

   我们在工作流的开发中主要是包装了服务节点以及网关节点和逻辑节点等内容,让服务节点类似于一个http网络请求,触发微服务的接口,同时等待微服务接口返回内容,放入到流程中,执行后边的流程。

思路设计

   我在开发调度中心的工作流模式时时通过SDK的方式引入工作流模式,减少系统间的耦合,实现工作流模式后可以做一些简单的编排任务,比如多个Jobhandler的组合执行方式。

   下面是方案的设计思路:
xxl-job之实现流程任务编排思路-LMLPHP

   大致就是:调度中心与工作流系统之间通过SDK的方式进行通信,调度中心的任务和工作流的任务是相同概念的,都是一次完整的触发过程。调度中心的执行器对应于工作流的服务任务节点,在工作流节点端可以配置相应的Jobhandler,当要执行定时任务时,会首先通过SDK触发工作流任务开始执行,然后执行到调度中心端,在调度中心端去触发相应的业务端相应的Jobhandler,达到执行多任务的效果。

   当任务执行完成后我们去回调工作流获取任务状态接口以此来同步调度中心任务的执行状态。

说明

   大体上的思路就是这样,可能比较粗略还有点抽象...,本来想结合一些实际的页面UI以及代码来说明,但因涉及到公司安全的问题,所以只能这样了,因为如果我要本地弄这些,工程量实在有点巨大...
   本篇文章记录了一下当时的思路,大致上有这么一种方式可以来实现简单功能,但是增加了一些学习成本,比如工作流引擎相关知识

02-06 19:22