xxl-job之实现流程任务编排思路
背景
某一天一如既往的上班”旅途“中,我的领导在开早会的时候,说我最近没啥事,于是让我研究一下Activiti工作流引擎与Drools规则引擎,当时也不知道后边具体要做什么,管它的,先看看再说。看了几天后,写了个简单的demo出来,结果发现Activiti这个东西不就是可以用来做流程审批的嘛;最后我们就开始开发基于Activiti的工作流引擎。并且部分功能与定时任务调度中心进行整合,实现了简单的流程编排任务。
因为工作流相关的东西在公司的电脑上,公司对于安全保密性十分严格,所以本文不阐述具体实现,只记录一下我当时的实现思路。
调度中心本身有一个子任务的概念,但子任务是有先后顺序的,所以这里不太符合需求。在xxl-job的github上我看到过这样一个issue:

看来还是很多人想要这个功能呢,目前我们先自己实现一个简单的流程任务编排。
实现思路
概念描述
因为涉及到了工作流的东西,在此处只简单介绍一下Activiti工作流引擎。
工作流(WorkFlow),就是”业务过程的部分或整体在计算机应用环境下的自动化“,它主要解决的是”使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现“,简单的说:工作流将一套大的业务逻辑分解成业务逻辑段,并统一控制这些业务逻辑段的执行条件,执行顺序以及相互通信。实现业务逻辑的分解和解耦。
关键概念:
- 服务节点:用户任务,服务任务,接受任务,脚本任务等
- 网关节点:互斥网关,并行网关等
- 逻辑判断节点:类似于if/else
我们在工作流的开发中主要是包装了服务节点以及网关节点和逻辑节点等内容,让服务节点类似于一个http网络请求,触发微服务的接口,同时等待微服务接口返回内容,放入到流程中,执行后边的流程。
思路设计
我在开发调度中心的工作流模式时时通过SDK的方式引入工作流模式,减少系统间的耦合,实现工作流模式后可以做一些简单的编排任务,比如多个Jobhandler的组合执行方式。
下面是方案的设计思路:

大致就是:调度中心与工作流系统之间通过SDK的方式进行通信,调度中心的任务和工作流的任务是相同概念的,都是一次完整的触发过程。调度中心的执行器对应于工作流的服务任务节点,在工作流节点端可以配置相应的Jobhandler,当要执行定时任务时,会首先通过SDK触发工作流任务开始执行,然后执行到调度中心端,在调度中心端去触发相应的业务端相应的Jobhandler,达到执行多任务的效果。
当任务执行完成后我们去回调工作流获取任务状态接口以此来同步调度中心任务的执行状态。
注意点:在我们选择工作流模式配置定时任务的时候,我们不再需要填写Jobhandler参数,只需要绑定工作流的启动key即可,作图的时候直接在服务节点上填写Jobhandler参数。
说明
大体上的思路就是这样,可能比较粗略还有点抽象...,本来想结合一些实际的页面UI以及代码来说明,但因涉及到公司安全的问题,所以只能这样了,因为如果我要本地弄这些,工程量实在有点巨大...
本篇文章记录了一下当时的思路,大致上有这么一种方式可以来实现简单功能,但是增加了一些学习成本,比如工作流引擎相关知识
xxl-job之实现流程任务编排思路的更多相关文章
- 2.WF 4.5 流程引擎设计思路
本文主要给大家分享下基于WF 4.5框架的流程引擎设计思路 1.流程启动时的数据写入EventMsgPP对象中,ObjectAssemblyType记录流程启动时需要的类型,ObjectContent ...
- 小结MapReduce 程序的流程及设计思路
简单回顾一下,目前系统是WCF三层C/S插件系统.服务器端是WCF程序寄宿在IIS中,其中我的配置设计是长连接,客户端支持多线程,一个volatile的实例对象.客户端用Winform,其中客户端框架 ...
- GWAS分析基本流程及分析思路
数据预处理(DNA genotyping.Quality control.Imputation) QC的工作可以做PLINK上完成Imputation的工作用IMPUTE2完成 2. 表型数据统计分析 ...
- Django问卷调查项目思路流程
Django问卷调查项目思路流程: 1 后端思路 : 需求分析 ---- 找出各实体对应关系 ---- 设计model架构 ---- 统一资源封装 --- 提供资源API入口 ---- 设计项目实体功 ...
- activiti自定义流程之自定义表单(一):环境配置
先补充说一下自定义流程整个的思路,自定义流程的目的就是为了让一套代码解决多种业务流程,比如请假单.报销单.采购单.协作单等等,用户自己来设计流程图. 这里要涉及到这样几个基本问题,一是不同的业务需求, ...
- 前端代码组织优化--小demo(进阶你的思路)
事出必有因 最近在看老项目的代码,一个富客户端的js代码,几千行的代码,全是function(){} var...的垂直布局,真的是要感动的哭了. 一开始都是这样,想实现什么功能,不管三七二十一,fu ...
- 使用Application Loader上传APP流程解读[APP公布]
本文仅仅是提供一个公布流程的总体思路.假设没有公布经验.建议阅读苹果官方公布文档或者Google搜索具体教程. 1.申请开发人员账号:99美金的(须要信用卡支付),详细流程网上有非常多样例.自行搜索. ...
- activiti自己定义流程之自己定义表单(一):环境配置
先补充说一下自己定义流程整个的思路,自己定义流程的目的就是为了让一套代码解决多种业务流程.比方请假单.报销单.採购单.协作单等等.用户自己来设计流程图. 这里要涉及到这样几个基本问题,一是不同的业务需 ...
- 架构设计 | 基于电商交易流程,图解TCC事务分段提交
本文源码:GitHub·点这里 || GitEE·点这里 一.场景案例简介 1.场景描述 分布式事务在业务系统中是十分常见的,最经典的场景就是电商架构中的交易业务,如图: 客户端通过请求订单服务,执行 ...
随机推荐
- MP(MyBatis-Plus)实现乐观锁更新功能
实现步骤 step1:添加乐观锁拦截器 MP的其他拦截器功能可以参考官网 @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { ...
- Git之pull,fetch差别
简言之, pull=fetch+merge,下拉远程分支并与本地分支合并. fetch只是下拉远程分支,怎么合并,可以自己再做选择. 进一步了解是,git本地有暂存区(亦称为Index区) fetch ...
- Hadoop伪分布式模式
搭建在单一服务器 基于官方文档 http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SingleCluster ...
- 笔记:学习go语言的网络基础库,并尝试搭一个简易Web框架
在日常的 web 开发中,后端人员常基于现有的 web 框架进行开发.但单纯会用框架总感觉不太踏实,所以有空的时候还是看看这些框架是怎么实现的会比较好,万一要排查问题也快一些. 最近在学习 go 语言 ...
- Linux下的upx命令学习
upx学习 今天我们来学习一款给应用加壳的软件,叫做upx(the Ultimate Packer for eXecutables) 首先我们先看下它**百科的释义: UPX (the Ultimat ...
- leetcode-222完全二叉树的节点个数
题目 给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置. ...
- SpringBoot 集成Shiro之使用Redis缓存授权认证信息
因为用户认证与授权需要从数据库中查询并验证信息,但是对于权限很少改变的情况,这样不断从数据库中查询角色验证权限,对整个系统的开销很大,对数据库压力也随之增大.因此可以将用户认证和授权信息都缓存起来,第 ...
- MySQL sql命令行操作数据库
数据库命令行操作 命令行操作数据库, [if exists] 可加可不加, 命令行操作一定要加英文分号 ; 结尾 创建数据库 : create database [if not exists] 数据库 ...
- 【Problem】前端项目运行:Module build failed:Error Node Sass does not yet support my current environmen
我在运行renren-fast-vue前端项目时,安装完依赖cnpm install 启动服务npm run dev 出现问题. Module build failed: Error: Node Sa ...
- 2021升级版微服务教程7-OpenFeign实战开发和参数调优
2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...