给你介绍下,Hippo4J 动态线程池基础架构(二)
5. SpringBoot 快速开始
5.1 Server 端启动
导入 Hippo4J 初始化 SQL 语句[4]
Hippo4J[5] 代码拉至本地,启动 Server[6] 模块下 ServerApplication 应用类
5.2 SpringBoot 引入 Hippo4j Starter
SpringBoot 应用引入 Hippo4j Starter Jar。备注:0.0.2 版本仅是过渡期版本,正式请等待发布 1.0.0
<dependency>
<groupId>io.github.acmenlt</groupId>
<artifactId>hippo4j-spring-boot-starter</artifactId>
<version>0.0.2</version>
</dependency>
SpringBoot 应用添加 Hippo4J 相关配置文件:
spring:
profiles:
active: dev
application:
name: dynamic-threadpool-example
dynamic:
thread-pool:
notifys:
- type: DING
url: https://oapi.dingtalk.com/robot/send?access_token=
# 此处可以选择自己的钉钉群
token: 4a582a588a161d6e3a1bd1de7eea9ee9f562cdfcbe56b6e72029e7fd512b2eae
# 通知时 @ 人员
receives: '15601166691'
# 报警发送间隔
alarm-interval: 30
# 服务端地址
server-addr: http://localhost:6691
# 租户 id, 对应 tenant 表
namespace: prescription
# 项目 id, 对应 item 表
item-id: ${spring.application.name}
添加线程池配置类,动态线程池支持两种创建方式
- DynamicThreadPoolWrapper 包装器创建,指定线程池标识
- @DynamicThreadPool 注解修饰 Spring Bean
Spring 后置处理器会扫描这两种方式创建的 Bean,拿到线程池 ID 调用 Server 端获取配置
如果获取 Server 端配置失败,根据默认线程池创建实例
@Configuration
public class ThreadPoolConfig {
public static final String MESSAGE_PRODUCE = "message-produce";
public static final String MESSAGE_CONSUME = "message-consume";
@Bean
// {@link DynamicThreadPoolWrapper} 完成 Server 端订阅配置功能.
public DynamicThreadPoolWrapper messageCenterDynamicThreadPool() {
return new DynamicThreadPoolWrapper(MESSAGE_CONSUME);
}
@Bean
@DynamicThreadPool
// 通过 {@link DynamicThreadPool} 修饰 {@link DynamicThreadPoolExecutor} 完成 Server 端订阅配置功能.
// 由动态线程池注解修饰后, IOC 容器中保存的是 {@link DynamicThreadPoolExecutor}
public ThreadPoolExecutor dynamicThreadPoolExecutor() {
return ThreadPoolBuilder.builder().threadFactory(MESSAGE_PRODUCE).dynamicPool().build();
}
}
启动 SpringBoot 应用后,动态线程池的准备工作就算完成了
5.3 测试线程池动态变更
通过接口修改线程池中的配置。HTTP POST 路径:http://localhost:6691/v1/cs/configs ,Body 请求体如下:
{
"ignore": "tenantId、itemId、tpId 代表唯一线程池,请不要修改",
"tenantId": "prescription",
"itemId": "dynamic-threadpool-example",
"tpId": "message-produce",
"coreSize": 10,
"maxSize": 15,
"queueType": 9,
"capacity": 100,
"keepAliveTime": 10,
"rejectedType": 3,
"isAlarm": 0,
"capacityAlarm": 81,
"livenessAlarm": 82
}
接口调用成功后,观察 IDEA Client 控制台日志输出,日志输出包括不限于此信息即为成功
[🔥 MESSAGE-PRODUCE] Changed thread pool. coreSize :: [11=>10], maxSize :: [15=>15], queueType :: [9=>9], capacity :: [100=>100], keepAliveTime :: [10000=>10000], rejectedType :: [7=>7]
另外,当 Client 集群部署时,可以选择修改所有实例或某一实例。修改请求路径:http://localhost:6691/v1/cs/configs?identify=xxx ,Body 体同上
identify 参数如何获取?每一台 Client 端都会分配到独一无二的值,并在启动时进行打印
Client identity :: xxxxxx
identify 参数不传或为空,会修改该线程池 Client 集群下该线程池所有实例参数
5.4 报警通知
如果加入了钉钉群(号码:31764717)的小伙伴,此时就能收到一条钉钉机器人的推送通知,
7. 最后
在 GitHub 上,检验项目的质量如何,Star 数占了一定因素;从上次 Hippo4J 登上 GitHub Trending 至今,已收获 400+ Star 数,进而证明了 Hippo4J 的项目质量
随着时间的推移,更多的小伙伴关注到 Hippo4J 项目,提出了相关的功能建议,以及希望参与项目共建,整体显得朝气蓬勃
下图来自小伙伴的问题以及建议,提的内容都非常好 👍👍👍
如果说看了上面的介绍,让你对 Hippo4J 产生了兴趣,通过以下方式联系到小编,不仅可以解答你对 Hippo4J 项目的疑惑,同时也接受正向的功能建议
一直以来,Hippo4J 目标一直都是企业级应用,小编也不断在向这个方向对齐,发布 1.0 的时间不会太远
文章转自公众号:龙台的技术笔记