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.场景描述 分布式事务在业务系统中是十分常见的,最经典的场景就是电商架构中的交易业务,如图: 客户端通过请求订单服务,执行 ...
随机推荐
- U盘使用技巧篇 制作一般人删除不了的文件(宣传视频) (量产开卡)
一. 视频制作成ISO ,放好 视频 图标文件 制作工具 : UltraISO 图标制作: 插入光盘状态:用autorun.inf格式:[autorun]open=Install.exe 点击光盘时 ...
- intel英特尔NUC主机bug大清除案例
如果你的NUC进入HDMI无法在显示器显示,可以参考此文章的思路,尝试排除各种问题.接下来我讲述一下我的NUCbug清除历程. 我的NUC激动时刻 我的NUC是这个型号,直接上图了:英特尔(Intel ...
- 离散傅里叶变换DFT入门
网上对于傅里叶变换相关的文章很多(足够多),有的是从物理相关角度入场,有的从数学分析角度入场.对于有志学习相关概念的同学还是能够很好的理解的. 数学包括三大块:代数学.几何.数学分析.前两块我们在中学 ...
- Flutter 基础组件:单选框和复选框
前言 Material组件库中提供了Material风格的单选开关Switch和复选框Checkbox,虽然它们都是继承自StatefulWidget,但它们本身不会保存当前选中状态,选中状态都是由父 ...
- 在 WPF 中使用 MahApps.Metro.IconPacks 提供的大量图标
MahApps.Metro.IconPacks https://github.com/MahApps/MahApps.Metro.IconPacks 提供了大量的高质量的图标供WPF使用,极其方便. ...
- 【Spring】IoC概述
Spring框架的核心概念--IoC IoC IoC是Inversion of Control的简写,翻译成汉语就是"控制反转".IoC并不是一门技术,而是一种设计思想,在Spri ...
- kubernets之pod的标签拓展
一 标签的拓展使用 1.1 标签的作用范围不仅仅适用于pod对node以及其他类的大部分资源同样适用 k label node node01 gpu=true k是kubectl的别名形式 同样对于n ...
- uni-app开发经验分享十三:实现手机扫描二维码并跳转全过程
最近使用 uni-app 开发 app ,需要实现一个调起手机摄像头扫描二维码功能,官网API文档给出了这样一个demo: // 允许从相机和相册扫码 uni.scanCode({ success: ...
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
作为后台服务开发,在日常工作中我们天天都在跟数据库打交道,一直在进行各种CRUD操作,都会使用到数据库连接池.按照发展历程,业界知名的数据库连接池有以下几种:c3p0.DBCP.Tomcat JDBC ...
- 解决Ajax同源政策的方法【JSONP + CORS + 服务器端解决方案】
解决Ajax同源政策的方法 使用JSONP解决同源限制问题 jsonp是json with padding的缩写,它不属于Ajax请求,但它可以模以Ajax请求.\ 步骤 1.将不同源的服务器端请求地 ...