本节讲述了ESB中线程池相关的配置,通过本节你将了解到以下内容:
- ESB Server中都有哪些线程池,它们处于什么位置;
- 如何配置线程池的参数,各项参数的含义是什么;
- 运行时,线程池参数调优有哪些指导原则;
# 线程池在ESB Server中的作用
线程池配置是ESB性能调优的核心配置之一。一般而言,请求消息依次经过代理服务、中介服务、业务服务,响应消息以相反顺序依次返回,消息处理过程如下所示:
为提升ESB消息处理能力,在消息接收处配置了线程池机制,如上图中所示。根据消息的流向,线程池分为了请求线程池和响应线程池,如下:
- 代理服务配有响应线程池
- 中介服务配有请求、响应线程池
- 业务服务配有请求线程池
# 线程池配置信息
线程池配置界面(以响应线程池为例)如下所示:
- 支持本地、全局线程池配置
:勾选上图中的"采用全局配置"复选框,即为采用全局线程池,否则为本地线程池:
本地线程池:为代理服务、业务服务及中介服务设置的独享线程池。本地线程池配置支持热更新;
全局线程池:ESB Server的共享线程池。全局线程池配置支持热更新;
最大线程数:线程池中线程数的最大值。
核心线程数:线程池中线程数的最小值。
队列容量:线程池中工作队列的容量值。
存活时间:如果池中有多于核心线程数的线程,这些线程在空闲时间超过存活时间时将会被销毁。
拒绝策略
:当线程池工作队列已满并且线程数达到最大值时,新请求到来时,将执行拒绝策略。支持ABORT、CALLER_RUNS、DISCARD、DISCARD_OLDEST四种拒绝策略:
- ABORT:新请求被拒绝,并抛出RejectedExecutionException异常。
- CALLER_RUNS:由新请求所在的线程直接处理请求,如果新请求所在的执行线程已关闭,则丢弃该请求。此策略提供简单的反馈控制机制,能够减缓新任务的提交速度。
- DISCARD:直接丢弃被拒绝的请求。
- DISCARD_OLDEST:如果新请求所在的执行线程尚未关闭,则位于工作队列头部的任务将被删除,然后重试执行程序(如果再次失败,则重复此过程)。
线程池配置信息的填写规则如下:
属性名称 | 填写规则 |
---|---|
采用全局配置 | 选中或不选中 |
最大线程数 | 范围从1到100,支持设置int型的变量或常量 |
核心线程数 | 范围从1到100,支持设置int型的变量或常量 |
队列容量 | 范围从1到1500,支持设置int型的变量或常量 |
存活时间 | 范围从0到120,支持设置int型的变量或常量 |
拒绝策略 | ABORT、 CALLER_RUNS、DISCARD、DISCARD_OLDEST |
# 调优最佳实践
- 一般情况下,建议设置为本地线程池;
- 如果系统中运行的业务逻辑较多(多个Module),建议本地线程池中核心线程数设置不要过大,一般小于10即可。