🥗异步线程池自定义
# 默认全局线程池
LiteFlow自己默认有全局线程池,并且线程池的大小等参数可以通过设置以下参数来进行设置:
liteflow.when-max-wait-seconds=15
liteflow.when-max-workers=16
liteflow.when-queue-limit=512
# 自定义全局线程池
但是如果你要对线程池有特殊化的要求,LiteFlow也支持自定义线程池的设置。
需要注意的是,自定义线程池只适用于并行组件,这个参数对于同步组件来说并无作用。而且一旦设置了你自定义的线程池,那么以上参数将不会再有用。对于线程池的所有参数的定义,都取决于你自己了。
首先你可以这样定义一个线程池的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.CustomThreadBuilder
如果是spring的话,你可以这样配置:
<bean id="liteflowConfig" class="com.yomahub.liteflow.property.LiteflowConfig">
<property name="ruleSource" value="customThreadPool/flow.el.xml"/>
<property name="threadExecutorClass" value="com.yomahub.liteflow.test.customThreadPool.CustomThreadBuilder"/>
</bean>
<bean id="flowExecutor" class="com.yomahub.liteflow.core.FlowExecutor">
<property name="liteflowConfig" ref="liteflowConfig"/>
</bean>
这样,LiteFlow在启动的时候就会自动通过你声明的Builder加载到自定义的线程池了。
# WHEN
级别的单独线程池
在某些场景下,你的异步节点可能不需要一个全局的线程池,希望对每组异步节点进行单独的线程池设定。
比如我现在想对以下2个流程异步节点进行设置不同的线程池:
<chain name="chain1">
WHEN(a, b);
</chain>
<chain name="chain2">
WHEN(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(a, b).threadPool("com.yomahub.liteflow.test.customWhenThreadPool.CustomThreadExecutor1");
</chain>
<chain name="chain2">
WHEN(c, d).threadPool("com.yomahub.liteflow.test.customWhenThreadPool.CustomThreadExecutor2");
</chain>
# 优先级
如果全局和Condition
都配置自定义线程池的情况下,优先使用Condition
上配置的线程池。
帮助我们改善此文档 (opens new window)
上次更新: 2023/03/17, 01:44:42