给你介绍下,Hippo4J 动态线程池基础架构(二)

Handpc
发布于 2022-6-21 16:27
浏览
0收藏

 

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}

添加线程池配置类,动态线程池支持两种创建方式

  1. DynamicThreadPoolWrapper 包装器创建,指定线程池标识
  2. @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 产生了兴趣,通过以下方式联系到小编,不仅可以解答你对 Hippo4J 项目的疑惑,同时也接受正向的功能建议

 
一直以来,Hippo4J 目标一直都是企业级应用,小编也不断在向这个方向对齐,发布 1.0 的时间不会太远

 

文章转自公众号:龙台的技术笔记

标签
已于2022-6-21 16:27:01修改
收藏
回复
举报
回复
    相关推荐