LiteFlow LiteFlow
💒首页
  • v2.13.2(当前版本)
  • What's New

    • 🌈What' s New In LiteFlow v2.13.2?
  • 历史版本

    • v2.12.X
    • v2.11.X
    • v2.10.X
    • v2.9.X
    • v2.8.X
  • 升级指南

    • 🌈2.13.0升级指南
    • 2.12.4升级指南
    • 2.12.0升级指南
    • 升级到2.9.3说明
    • 升级到2.9.X说明
    • 升级到2.8.X说明
    • 升级到2.7.X说明
👑LF CLUB社区
  • 常见问题
  • 专题解释

    • 如何理解上下文这个概念?
    • Slot是一个什么样的概念,在框架中起到什么样的作用?
💖赞助
🧩插件
🔥PPT
  • 项目介绍
  • 项目成员
  • 更新记录
  • 参与开发
👥加入群聊
🧤谁在使用
  • Gitee (opens new window)
  • GitCode (opens new window)
  • Github (opens new window)

广告采用随机轮播方式显示 ❤️成为赞助商
💒首页
  • v2.13.2(当前版本)
  • What's New

    • 🌈What' s New In LiteFlow v2.13.2?
  • 历史版本

    • v2.12.X
    • v2.11.X
    • v2.10.X
    • v2.9.X
    • v2.8.X
  • 升级指南

    • 🌈2.13.0升级指南
    • 2.12.4升级指南
    • 2.12.0升级指南
    • 升级到2.9.3说明
    • 升级到2.9.X说明
    • 升级到2.8.X说明
    • 升级到2.7.X说明
👑LF CLUB社区
  • 常见问题
  • 专题解释

    • 如何理解上下文这个概念?
    • Slot是一个什么样的概念,在框架中起到什么样的作用?
💖赞助
🧩插件
🔥PPT
  • 项目介绍
  • 项目成员
  • 更新记录
  • 参与开发
👥加入群聊
🧤谁在使用
  • Gitee (opens new window)
  • GitCode (opens new window)
  • Github (opens new window)
  • 🍤LiteFlow简介
  • 🍓项目特性
  • 🧁环境支持

  • 🍟快速开始(Hello world)

  • 🍢配置项

  • 🗂规则以及配置源

  • 🔗常规组件

  • 🧩EL规则的写法

  • 🌮数据上下文

  • 🛩执行器

  • 🍋脚本组件

  • 🍇声明式组件

  • 🎲用代码动态构造规则

  • 🍼元数据管理

    • ⛰概念以及介绍
    • 🍖平滑热刷新
      • 自动刷新的场景
      • 主动调用代码全量刷新
      • 单独刷新某一个规则
      • 单独刷新某一个决策规则
      • 单独刷新某一个脚本
    • 🍮启动不检查规则
    • 🫔查看指定规则下的所有组件
  • 🧮决策路由

  • 😸生命周期

  • 🎨高级特性

  • ⛱测试用例以及示例

  • 🪂性能表现
  • v2.12.X文档
  • 🍼元数据管理
铂赛东
2022-07-03
目录

🍖平滑热刷新

LiteFlow支持了优雅平滑热刷新的特性。

即你可以在不重启服务的情况下,进行规则的重载。并且在高并发下刷新的时候,正在执行流程的线程是完全平滑的,不会因为刷新的过程而出现中断的现象。

在刷新时,正在执行的流程还是走的旧的流程,刷新好。后续request会自动切换到新的流程。


# 自动刷新的场景

自动刷新包括了规则以及脚本。

如果你使用LiteFlow原生支持的zookeeper,etcd,nacos,apollo等插件(关于如何集成插件,请参考规则文件这一大章节),不需要你做任何事,只要规则更改之后,会自动热平滑刷新。


如果你是基于本地磁盘规则文件的,并且开启了自动监听设置,那么更改流程后也会自动平滑刷新。关于如何开启自动监听,请参考本地规则文件监听这一章。


如果你使用了LiteFlow原生支持的sql,redis这两个插件,并开启了轮询开关,在你更新了规则或脚本之后,也会自动平滑热刷新。但是受限于轮询间隔时间,会有一定的延时。

关于这个场景,可以参考SQL数据库配置源以及轮询模式配置。

# 主动调用代码全量刷新

主动刷新包括了规则以及脚本。

如果你使用了数据库作为规则文件的存储方式,或是你自己实现了自定义配置源,那么LiteFlow还提供了一种基于代码刷新的方式。


你可以在spring容器中拿到FlowExecutor对象后,调用以下接口:

flowExecutor.reloadRule();

这个方法会按照启动时的方式去拉取你最新的所有规则以及组件配置信息,进行平滑热刷新。


这样调用有以下2点注意事项:

提示

1.这样刷新是全量刷新,不过各位同学不用担心其性能,经测试,LiteFlow框架一秒可以刷新1000条规则左右,这都是一些cpu级别的操作,如果你规则没有上大几千,几w条,那么推荐这种方式。

2.如果你的应用是多节点部署的,必须在每个节点上都要刷新,因为规则是存储在jvm内存里的。这就意味着,如果你把刷新规则做成一个rpc接口(诸如dubbo接口之类的),那么rpc接口只会调用到其中一个节点,也就是说,只会有一个节点的规则会刷新。

正确的做法是:利用mq发一个消息,让各个节点去监听到,进行刷新。


# 单独刷新某一个规则

如果你的规则比较多,成千上万条,又或者你就是不想全量刷新。希望单独刷新某个改动的规则。

那么LiteFlow也提供了相应的方式。

你可以利用以下api来进行刷新:

FlowBus.reloadChain("chain1", "THEN(a, b, c)");

提示

既然是指定刷新,那么必须你要获取到改动的EL内容,然后再利用动态代码构建重新build下就可以了,这种方式会自动替换缓存中已有的规则。这种方式不用在build之前销毁流程。

如果是多服务节点部署的情况下,还是要遵循每个节点要都刷新,上面已经说明具体建议的方式。这里不再赘述。

# 单独刷新某一个决策规则v2.12.2+

如果你使用了决策路由,那么可以通过FlowBus连带决策体一起进行刷新:

FlowBus.reloadChain("chain1", "THEN(a, b, c)", "AND(r1, r2)");

# 单独刷新某一个脚本

如果你想要用代码方式来刷新一个指定的脚本,可以这么做:

FlowBus.reloadScript(nodeId, script);
帮助我们改善此文档 (opens new window)
上次更新: 2025/02/16, 21:26:30
⛰概念以及介绍
🍮启动不检查规则

← ⛰概念以及介绍 🍮启动不检查规则→

Theme by Vdoing | Copyright © 2020-2025 铂赛东 | MIT License
沪ICP备18012955号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式