业务系统定制化需求的一种设计方式,以及LiteFlow说明

背景

很多业务系统,或者Saas平台,需要在通用功能上进行定制功能的开发。

举例说明:

为了简化场景,我们假设你在开发一个Sass模式的电商平台。

需要实现如下功能:

  1. A公司在下单时,需要发送短信通知;
  2. B公司下单时,需要发送邮件通知;
  3. C公司则是啥都不用干;

重点:

  1. 未来的接入公司,可能在下单时需要处理其他逻辑,比如主动扣减总金额,发起远程调用(SAP接口)。
  2. 每个公司的逻辑也不是一成不变的,A公司可能1个月后,需要发送邮件,和短信。

很明显,这种极其灵活的定制化需求,只通过代码,基本是无法满足。据我所知,很多公司都是通过每次修改代码,然后重新发布程序来解决。这种方式给代码带来了脆弱性,发布过程也影响用户体验,也可能带来bug,不是一种好的处理方式。

思考

从本质上来看,我们主要是为了应对零散的特殊功能。

是不是有一种方式,让我们能将这些零散的小需求拆分成一个个独立的执行器,或者叫执行节点?然后通过配置的形式,将这些执行节点进行,传递参数,编排执行流程,来组合成一个定制化的功能呢?而且最好是这种配置能够动态地刷新,不需要服务重启。

答案是有的。

目前有很多这种流程编排的框架,使用流程引擎自动化自行也可以达到同样的目的。但是流程引擎过重。

专业人士在网上查了一下,发现liteflow比较适合这种场景:对应的网站是https://liteflow.yomahub.com/

基本概念

节点组件:

配置文件:

liteflow.rule-source=config/flow.el.xml

规则文件:

代码调用:

这样就完成了一个流程的搭建。

因为官方文档非常详细,具体使用,作者不做过多说明。

针对复杂常见,我们可以使用该框架复杂的编排功能:

这样基本能涵盖我们各种定制化的功能的编排。

如此一来,我们之后的定制化需求都可以做成一个个的component node,然后编排组合即可,最重要的,框架支持热更新,也可以和各种配置中心进行配置变更自动更新流程。且更新过程是平滑的。

在实际使用过程中,这个是充分满足了我们现在的业务需求,所以分享给朋友们,希望给你们的业务带来一定的简化开发。

功能列表

  • 组件定义统一: 所有的逻辑都是组件,为所有的逻辑提供统一化的组件实现方式,小身材,大能量。
  • 规则轻量: 基于规则文件来编排流程,学习规则表达式入门只需要5分钟,一看即懂。
  • 规则多样化: 规则支持xml、json、yml三种规则文件写法方式,喜欢哪种用哪个。
  • 任意编排: 同步异步混编,再复杂的逻辑过程,利用LiteFlow的规则,都是易如反掌,看规则文件就能知道逻辑是如何运转的,所见即所得。
  • 规则能从任意地方加载: 框架中提供本地文件配置源和zk配置源的实现,也提供了扩展接口,您可以把规则存储在任何地方。
  • 优雅热刷新机制: 规则变化,无需重启您的应用,即时改变应用的规则。高并发下不会因为刷新规则导致正在执行的规则有任何错乱。
  • 支持广泛: 不管你的项目是不是基于Springboot,Spring还是任何其他java框架构建,LiteFlow都能游刃有余。
  • JDK支持: 从JDK8到JDK17,统统支持。无需担心JDK版本。
  • 脚本语言支持: 可以定义脚本语言节点,支持QLExpress和Groovy两种脚本。未来还会支持更多的脚本语言。
  • 规则嵌套支持: 只要你想得出,你可以利用简单的表达式完成多重嵌套的复杂逻辑编排。
  • 组件重试支持: 组件可以支持重试,每个组件均可自定义重试配置和指定异常。
  • 上下文隔离机制: 可靠的上下文隔离机制,你无需担心高并发情况下的数据串流。
  • 声明式组件支持: 你可以让你的任意类秒变组件。
  • 详细的步骤信息: 你的链路如何执行的,每个组件耗时多少,报了什么错,一目了然。
  • 稳定可靠: 历时2年多的迭代,在各大公司的核心系统上稳定运行。
  • 性能卓越: 框架本身几乎不消耗额外性能,性能取决你的组件执行效率。
  • 自带简单监控: 框架内自带一个命令行的监控,能够知道每个组件的运行耗时排行。

非专业的专业人士 原创文章

原创不易,请【关注】【点赞】【收藏】

如需转载,请回复说明

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章