成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

給你介紹下,Hippo4J 動態線程池基礎架構

開發 架構
經過 200+ 的 Commit,也是快要能發布 1.0.0 正式版本,今天就寫一篇文章正式介紹下 Hippo4J 的項目架構.

[[433702]]

很多小伙伴知道小編從今年六月份開始,陸陸續續開始提交 Hippo4J 動態線程池項目

經過 200+ 的 Commit,也是快要能發布 1.0.0 正式版本,今天就寫一篇文章正式介紹下 Hippo4J 的項目架構

Hippo4J GitHub[1]:https://github.com/acmenlt/dynamic-threadpool

小伙伴如果訪問 GitHub 速度慢,可以通過改 Host 的方式提高訪問速度,修改 Host 方案[2]

1. 架構設計

簡單來說,Hippo4J 從部署的角度上分為兩種角色:Server 端和 Client 端

Server 端是 Hippo4J 項目打包出的 Java 進程,功能包括用戶權限、線程池監控以及執行持久化的動作

Client 端指的是我們 SpringBoot 應用,通過引入 Hippo4J Starter Jar 包負責與 Server 端進行交互

比如拉取 Server 端線程池數據、動態更新線程池配置以及采集上報線程池運行時數據等

2. 基礎組件

2.1 配置中心(Config)

配置中心位于 Server 端,它的主要作用是監控 Server 端線程池配置變更,實時通知到 Client 實例執行線程池變更流程

代碼設計基于 Nacos 1.x 版本的長輪詢以及異步 Servlet 機制實現

2.2 注冊中心(Discovery)

負責管理 Client 端(單機或集群)注冊到 Server 端的實例,包括不限于實例注冊、續約、過期剔除等操作,代碼基于 Eureka 源碼實現

上面的配置中心很容易理解,動態線程池參數變更的根本。但是注冊中心是用來做什么的?

注冊中心管理 Client 端注冊的實例,通過這些實例可以實時獲取線程池的運行時參數信息目前的設計是如此,不排除后續基于 Discovery 做更多的擴展

2.3 控制臺(Console)

對接前端項目,包括不限于以下模塊管理

2.4 抽象工具(Tools)

顧名思義就是將某些工具單獨抽象出來,并以 Module 的形式進行展現,這樣的拆分方式有兩點好處:一是更符合職責分離特性,二是需要用到某塊功能,做到拿來即用

目前已集成兩塊內容:

log-record-tool:基于 mzt-biz-log[3] 的操作日志變更記錄組件

open-change-tool:監控 Hippo4J 項目在 GitHub 的 Star Fork 變更,默認五分鐘內有變更則通知

3. 消息通知(Notify)

Hippo4J 內置了很多需要通知的事件,比如:線程池參數變更通知、線程池活躍度報警、拒絕策略執行報警以及阻塞隊列容量報警等

目前 Notify 已經接入了釘釘,后續持續集成企業微信、郵件、短信等通知渠道;并且,Notify 模塊提供了消息事件的 SPI 方案,可以接受三方自定義的推送

4. Hippo4j-Spring-Boot-Starter

熟悉 SpringBoot 的小伙伴對 Starter 應該不會陌生。Hippo4J 提供以 Starter Jar 包的形式嵌套在應用內,負責與 Server 端完成交互

Starter Jar 包推送到 Maven 公共倉庫,目前公共倉庫已存在 0.0.2 版本的 Jar

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

  1. <dependency> 
  2.     <groupId>io.github.acmenlt</groupId> 
  3.     <artifactId>hippo4j-spring-boot-starter</artifactId> 
  4.     <version>0.0.2</version> 
  5. </dependency> 

SpringBoot 應用添加 Hippo4J 相關配置文件:

  1. spring: 
  2.   profiles: 
  3.     active: dev 
  4.   application: 
  5.     namedynamic-threadpool-example 
  6.   dynamic
  7.     thread-pool: 
  8.       notifys: 
  9.         - type: DING 
  10.           url: https://oapi.dingtalk.com/robot/send?access_token= 
  11.           # 此處可以選擇自己的釘釘群 
  12.           token: 4a582a588a161d6e3a1bd1de7eea9ee9f562cdfcbe56b6e72029e7fd512b2eae 
  13.           # 通知時 @ 人員 
  14.           receives: '15601166691' 
  15.       # 報警發送間隔 
  16.       alarm-interval: 30 
  17.       # 服務端地址 
  18.       server-addr: http://localhost:6691 
  19.       # 租戶 id, 對應 tenant 表 
  20.       namespace: prescription 
  21.       # 項目 id, 對應 item 表 
  22.       item-id: ${spring.application.name

添加線程池配置類,動態線程池支持兩種創建方式

  1. DynamicThreadPoolWrapper 包裝器創建,指定線程池標識
  2. @DynamicThreadPool 注解修飾 Spring Bean

Spring 后置處理器會掃描這兩種方式創建的 Bean,拿到線程池 ID 調用 Server 端獲取配置

如果獲取 Server 端配置失敗,根據默認線程池創建實例

  1. @Configuration 
  2. public class ThreadPoolConfig { 
  3.     public static final String MESSAGE_PRODUCE = "message-produce"
  4.     public static final String MESSAGE_CONSUME = "message-consume"
  5.  
  6.     @Bean 
  7.     // {@link DynamicThreadPoolWrapper} 完成 Server 端訂閱配置功能. 
  8.     public DynamicThreadPoolWrapper messageCenterDynamicThreadPool() { 
  9.         return new DynamicThreadPoolWrapper(MESSAGE_CONSUME); 
  10.     } 
  11.  
  12.     @Bean 
  13.     @DynamicThreadPool 
  14.     // 通過 {@link DynamicThreadPool} 修飾 {@link DynamicThreadPoolExecutor} 完成 Server 端訂閱配置功能. 
  15.     // 由動態線程池注解修飾后, IOC 容器中保存的是 {@link DynamicThreadPoolExecutor} 
  16.     public ThreadPoolExecutor dynamicThreadPoolExecutor() { 
  17.         return ThreadPoolBuilder.builder().threadFactory(MESSAGE_PRODUCE).dynamicPool().build(); 
  18.     } 

啟動 SpringBoot 應用后,動態線程池的準備工作就算完成了

5.3 測試線程池動態變更

通過接口修改線程池中的配置。HTTP POST 路徑:http://localhost:6691/v1/cs/configs ,Body 請求體如下:

  1.     "ignore""tenantId、itemId、tpId 代表唯一線程池,請不要修改"
  2.     "tenantId""prescription"
  3.     "itemId""dynamic-threadpool-example"
  4.     "tpId""message-produce"
  5.     "coreSize": 10, 
  6.     "maxSize": 15, 
  7.     "queueType": 9, 
  8.     "capacity": 100, 
  9.     "keepAliveTime": 10, 
  10.     "rejectedType": 3, 
  11.     "isAlarm": 0, 
  12.     "capacityAlarm": 81, 
  13.     "livenessAlarm": 82 

接口調用成功后,觀察 IDEA Client 控制臺日志輸出,日志輸出包括不限于此信息即為成功

  1. [🔥 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 端都會分配到獨一無二的值,并在啟動時進行打印

  1. Client identity :: xxxxxx 

identify 參數不傳或為空,會修改該線程池 Client 集群下該線程池所有實例參數

5.4 報警通知

如果加入了釘釘群(號碼:31764717)的小伙伴,此時就能收到一條釘釘機器人的推送通知,示例如下:

7. 最后

在 GitHub 上,檢驗項目的質量如何,Star 數占了一定因素;從上次 Hippo4J 登上 GitHub Trending 至今,已收獲 400+ Star 數,進而證明了 Hippo4J 的項目質量

隨著時間的推移,更多的小伙伴關注到 Hippo4J 項目,提出了相關的功能建議,以及希望參與項目共建,整體顯得朝氣蓬勃

下圖來自小伙伴的問題以及建議,提的內容都非常好 👍👍👍

參考

[1]Hippo4J GitHub: https://github.com/acmenlt/dynamic-threadpool

[2]修改 Host 方案: https://gitee.com/isevenluo/github-hosts

[3]mzt-biz-log: https://github.com/mouzt/mzt-biz-log

[4]Hippo4J 初始化 SQL 語句: https://sourl.cn/yQ5dNB

[5]Hippo4J: https://github.com/acmenlt/dynamic-threadpool

[6]Server: https://github.com/acmenlt/dynamic-threadpool/tree/develop/server

本文轉載自微信公眾號「龍臺的技術筆記」

 

責任編輯:姜華 來源: 龍臺的技術筆記
相關推薦

2022-08-29 09:06:43

hippo4j動態線程池

2024-02-04 09:19:00

Nacos動態化線程池

2022-09-29 09:35:56

線程池

2012-05-15 02:18:31

Java線程池

2025-01-09 11:24:59

線程池美團動態配置中心

2011-04-18 10:51:29

PKI加密密鑰

2022-03-14 08:02:08

輕量級動態線程池

2021-12-11 19:04:38

漏洞

2011-08-09 15:25:14

線程池數據庫連接池

2013-08-27 10:20:35

JavaLINQLinq4j

2023-04-19 13:18:41

動態線程池平臺

2022-06-02 08:01:11

云原生工具

2013-06-08 13:07:23

Java線程池調度器

2017-07-28 15:12:28

Neo4j圖數據庫

2022-12-15 17:31:41

架構龍芯

2022-02-14 16:08:15

開源項目線程池動態可監控

2021-07-31 22:20:00

線程池系統參數

2023-11-29 16:38:12

線程池阻塞隊列開發

2011-06-30 09:49:40

JSPJ2EE

2009-02-27 10:04:25

動態基礎架構NEDC
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区国产精品 | 国产999精品久久久久久 | 国产精品资源在线 | 成人精品一区二区三区中文字幕 | 久久久一区二区三区 | 久久精品国产一区二区三区不卡 | 久久一区二区三区四区 | 国产成人免费视频网站视频社区 | 亚洲 欧美 另类 日韩 | av黄色在线 | 不卡的av在线 | 日韩免费视频一区二区 | av免费网站在线观看 | 国产高清视频一区二区 | 91av免费看 | 天天综合久久网 | 婷婷久久五月 | 国产999精品久久久久久 | 日韩精品一区二区三区中文字幕 | 成年视频在线观看 | 亚洲精品乱码 | 成人久久网 | 午夜男人天堂 | 国产一二区免费视频 | 91一区| 国产91精品网站 | 人人人人人爽 | 欧美一区二区二区 | 精品国产一区二区三区性色av | 国内精品久久久久久影视8 最新黄色在线观看 | 欧美日韩一区不卡 | 国产精品久久99 | 免费一级欧美在线观看视频 | 久久一区视频 | 日韩精品一区二区三区免费视频 | 久久99精品视频 | 亚洲精品一区二区三区在线 | 毛片99 | 国产精品99999999 | 伊人网站 | 涩涩视频在线看 |