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介绍
  • 项目特性
  • 安装和集成

  • 规则文件

  • 用代码动态构造规则

  • 使用详细指南

    • 开启和关闭
    • 同步异步编排
    • 执行器
    • 数据槽
    • 普通组件
    • 条件组件
    • 脚本组件
    • 声明式组件
    • 前置后置组件
    • 组件标签
    • 子流程
    • 隐式子流程
    • 私有投递
    • 组件重试
    • 平滑热刷新
    • 组件切面
    • 异常处理机制
    • 步骤打印
    • 不同格式规则加载
    • When异步线程池
      • 默认全局线程池
      • 自定义全局线程池
      • Condition级别的单独线程池
      • 优先级
    • 自定义组件执行器
    • 简单监控
  • 示例工程

  • 性能表现
  • v2.6.X文档
  • 使用详细指南
铂赛东
2022-06-01
目录

When异步线程池

# 默认全局线程池

LiteFlow自己默认有全局线程池,并且线程池的大小等参数可以通过设置以下参数来进行设置:

liteflow.when-max-wait-seconds=15
liteflow.when-max-workers=16
liteflow.when-queue-limit=512

# 自定义全局线程池

但是如果你要对线程池有特殊化的要求,LiteFlow从2.6.6版本开始也支持自定义线程池的设置。

需要注意的是,自定义线程池只适用于并行组件,这个参数对于同步组件来说并无作用。而且一旦设置了你自定义的线程池,那么以上参数将不会再有用。对于线程池的所有参数的定义,都取决于你自己了。

首先你可以这样定义一个线程池的Builder:

public class CustomThreadBuilder implements ExecutorBuilder {
    @Override
    public ExecutorService buildExecutor() {
        return Executors.newCachedThreadPool();
    }
}

然后把你的Builder加入LiteFlow的配置中,springboot的话,你可以这样配置:

liteflow.thread-executor-class=com.yomahub.liteflow.test.customThreadPool.CustomThreadExecutor

如果是spring的话,你可以这样配置:

<bean id="liteflowConfig" class="com.yomahub.liteflow.property.LiteflowConfig">
	<property name="ruleSource" value="customThreadPool/flow.xml"/>
  <property name="threadExecutorClass" value="com.yomahub.liteflow.test.customThreadPool.CustomThreadExecutor"/>
</bean>

<bean id="flowExecutor" class="com.yomahub.liteflow.core.FlowExecutor">
  <property name="liteflowConfig" ref="liteflowConfig"/>
</bean>

这样,LiteFlow在启动的时候就会自动通过你声明的Builder加载到自定义的线程池了。

# Condition级别的单独线程池

在某些场景下,你的异步节点可能不需要一个全局的线程池,希望对每组异步节点进行单独的线程池设定。

比如我现在想对以下2个流程异步节点进行设置不同的线程池:

<chain name="chain1">
  <when value="a,b"/>
</chain>

<chain name="chain2">
  <when value="c,d"/>
</chain>

那么现在你可以这么做

首先实现2个自己的线程池:

public class CustomThreadExecutor1 implements ExecutorBuilder {

    @Override
    public ExecutorService buildExecutor() {
        //构造你自定义的线程池
    }
}
public class CustomThreadExecutor2 implements ExecutorBuilder {

    @Override
    public ExecutorService buildExecutor() {
        //构造你自定义的线程池
    }
}

然后你如下声明就ok了:

<chain name="chain1">
  <when value="a,b" threadExecutorClass="com.yomahub.liteflow.test.customWhenThreadPool.CustomThreadExecutor1"/>
</chain>
<chain name="chain2">
  <when value="c,d" threadExecutorClass="com.yomahub.liteflow.test.customWhenThreadPool.CustomThreadExecutor2"/>
</chain>

# 优先级

如果全局和Condition都配置自定义线程池的情况下,优先使用Condition上配置的线程池。

帮助我们改善此文档 (opens new window)
上次更新: 2022/10/07, 00:22:18
不同格式规则加载
自定义组件执行器

← 不同格式规则加载 自定义组件执行器→

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