自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

給你介紹下,Hippo4J 動(dòng)態(tài)線程池基礎(chǔ)架構(gòu)

開(kāi)發(fā) 架構(gòu)
經(jīng)過(guò) 200+ 的 Commit,也是快要能發(fā)布 1.0.0 正式版本,今天就寫(xiě)一篇文章正式介紹下 Hippo4J 的項(xiàng)目架構(gòu).

[[433702]]

很多小伙伴知道小編從今年六月份開(kāi)始,陸陸續(xù)續(xù)開(kāi)始提交 Hippo4J 動(dòng)態(tài)線程池項(xiàng)目

經(jīng)過(guò) 200+ 的 Commit,也是快要能發(fā)布 1.0.0 正式版本,今天就寫(xiě)一篇文章正式介紹下 Hippo4J 的項(xiàng)目架構(gòu)

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

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

1. 架構(gòu)設(shè)計(jì)

簡(jiǎn)單來(lái)說(shuō),Hippo4J 從部署的角度上分為兩種角色:Server 端和 Client 端

Server 端是 Hippo4J 項(xiàng)目打包出的 Java 進(jìn)程,功能包括用戶(hù)權(quán)限、線程池監(jiān)控以及執(zhí)行持久化的動(dòng)作

Client 端指的是我們 SpringBoot 應(yīng)用,通過(guò)引入 Hippo4J Starter Jar 包負(fù)責(zé)與 Server 端進(jìn)行交互

比如拉取 Server 端線程池?cái)?shù)據(jù)、動(dòng)態(tài)更新線程池配置以及采集上報(bào)線程池運(yùn)行時(shí)數(shù)據(jù)等

2. 基礎(chǔ)組件

2.1 配置中心(Config)

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

代碼設(shè)計(jì)基于 Nacos 1.x 版本的長(zhǎng)輪詢(xún)以及異步 Servlet 機(jī)制實(shí)現(xiàn)

2.2 注冊(cè)中心(Discovery)

負(fù)責(zé)管理 Client 端(單機(jī)或集群)注冊(cè)到 Server 端的實(shí)例,包括不限于實(shí)例注冊(cè)、續(xù)約、過(guò)期剔除等操作,代碼基于 Eureka 源碼實(shí)現(xiàn)

上面的配置中心很容易理解,動(dòng)態(tài)線程池參數(shù)變更的根本。但是注冊(cè)中心是用來(lái)做什么的?

注冊(cè)中心管理 Client 端注冊(cè)的實(shí)例,通過(guò)這些實(shí)例可以實(shí)時(shí)獲取線程池的運(yùn)行時(shí)參數(shù)信息目前的設(shè)計(jì)是如此,不排除后續(xù)基于 Discovery 做更多的擴(kuò)展

2.3 控制臺(tái)(Console)

對(duì)接前端項(xiàng)目,包括不限于以下模塊管理

2.4 抽象工具(Tools)

顧名思義就是將某些工具單獨(dú)抽象出來(lái),并以 Module 的形式進(jìn)行展現(xiàn),這樣的拆分方式有兩點(diǎn)好處:一是更符合職責(zé)分離特性,二是需要用到某塊功能,做到拿來(lái)即用

目前已集成兩塊內(nèi)容:

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

open-change-tool:監(jiān)控 Hippo4J 項(xiàng)目在 GitHub 的 Star Fork 變更,默認(rèn)五分鐘內(nèi)有變更則通知

3. 消息通知(Notify)

Hippo4J 內(nèi)置了很多需要通知的事件,比如:線程池參數(shù)變更通知、線程池活躍度報(bào)警、拒絕策略執(zhí)行報(bào)警以及阻塞隊(duì)列容量報(bào)警等

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

4. Hippo4j-Spring-Boot-Starter

熟悉 SpringBoot 的小伙伴對(duì) Starter 應(yīng)該不會(huì)陌生。Hippo4J 提供以 Starter Jar 包的形式嵌套在應(yīng)用內(nèi),負(fù)責(zé)與 Server 端完成交互

Starter Jar 包推送到 Maven 公共倉(cāng)庫(kù),目前公共倉(cāng)庫(kù)已存在 0.0.2 版本的 Jar

5. SpringBoot 快速開(kāi)始

5.1 Server 端啟動(dòng)

導(dǎo)入 Hippo4J 初始化 SQL 語(yǔ)句[4]

Hippo4J[5] 代碼拉至本地,啟動(dòng) Server[6] 模塊下 ServerApplication 應(yīng)用類(lèi)

5.2 SpringBoot 引入 Hippo4j Starter

SpringBoot 應(yīng)用引入 Hippo4j Starter Jar。備注:0.0.2 版本僅是過(guò)渡期版本,正式請(qǐng)等待發(fā)布 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 應(yīng)用添加 Hippo4J 相關(guān)配置文件:

  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.           # 通知時(shí) @ 人員 
  14.           receives: '15601166691' 
  15.       # 報(bào)警發(fā)送間隔 
  16.       alarm-interval: 30 
  17.       # 服務(wù)端地址 
  18.       server-addr: http://localhost:6691 
  19.       # 租戶(hù) id, 對(duì)應(yīng) tenant 表 
  20.       namespace: prescription 
  21.       # 項(xiàng)目 id, 對(duì)應(yīng) item 表 
  22.       item-id: ${spring.application.name

添加線程池配置類(lèi),動(dòng)態(tài)線程池支持兩種創(chuàng)建方式

  1. DynamicThreadPoolWrapper 包裝器創(chuàng)建,指定線程池標(biāo)識(shí)
  2. @DynamicThreadPool 注解修飾 Spring Bean

Spring 后置處理器會(huì)掃描這兩種方式創(chuàng)建的 Bean,拿到線程池 ID 調(diào)用 Server 端獲取配置

如果獲取 Server 端配置失敗,根據(jù)默認(rèn)線程池創(chuàng)建實(shí)例

  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.     // 通過(guò) {@link DynamicThreadPool} 修飾 {@link DynamicThreadPoolExecutor} 完成 Server 端訂閱配置功能. 
  15.     // 由動(dòng)態(tài)線程池注解修飾后, IOC 容器中保存的是 {@link DynamicThreadPoolExecutor} 
  16.     public ThreadPoolExecutor dynamicThreadPoolExecutor() { 
  17.         return ThreadPoolBuilder.builder().threadFactory(MESSAGE_PRODUCE).dynamicPool().build(); 
  18.     } 

啟動(dòng) SpringBoot 應(yīng)用后,動(dòng)態(tài)線程池的準(zhǔn)備工作就算完成了

5.3 測(cè)試線程池動(dòng)態(tài)變更

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

  1.     "ignore""tenantId、itemId、tpId 代表唯一線程池,請(qǐng)不要修改"
  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 

接口調(diào)用成功后,觀察 IDEA Client 控制臺(tái)日志輸出,日志輸出包括不限于此信息即為成功

  1. [🔥 MESSAGE-PRODUCE] Changed thread pool. coreSize :: [11=>10], maxSize :: [15=>15], queueType :: [9=>9], capacity :: [100=>100], keepAliveTime :: [10000=>10000], rejectedType :: [7=>7] 

另外,當(dāng) Client 集群部署時(shí),可以選擇修改所有實(shí)例或某一實(shí)例。修改請(qǐng)求路徑:http://localhost:6691/v1/cs/configs?identify=xxx ,Body 體同上

identify 參數(shù)如何獲取?每一臺(tái) Client 端都會(huì)分配到獨(dú)一無(wú)二的值,并在啟動(dòng)時(shí)進(jìn)行打印

  1. Client identity :: xxxxxx 

identify 參數(shù)不傳或?yàn)榭?,?huì)修改該線程池 Client 集群下該線程池所有實(shí)例參數(shù)

5.4 報(bào)警通知

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

7. 最后

在 GitHub 上,檢驗(yàn)項(xiàng)目的質(zhì)量如何,Star 數(shù)占了一定因素;從上次 Hippo4J 登上 GitHub Trending 至今,已收獲 400+ Star 數(shù),進(jìn)而證明了 Hippo4J 的項(xiàng)目質(zhì)量

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

下圖來(lái)自小伙伴的問(wèn)題以及建議,提的內(nèi)容都非常好 👍👍👍

參考

[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 語(yǔ)句: https://sourl.cn/yQ5dNB

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

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

本文轉(zhuǎn)載自微信公眾號(hào)「龍臺(tái)的技術(shù)筆記」

 

責(zé)任編輯:姜華 來(lái)源: 龍臺(tái)的技術(shù)筆記
相關(guān)推薦

2022-08-29 09:06:43

hippo4j動(dòng)態(tài)線程池

2024-02-04 09:19:00

Nacos動(dòng)態(tài)化線程池

2022-09-29 09:35:56

線程池

2012-05-15 02:18:31

Java線程池

2025-01-09 11:24:59

線程池美團(tuán)動(dòng)態(tài)配置中心

2011-04-18 10:51:29

PKI加密密鑰

2022-03-14 08:02:08

輕量級(jí)動(dòng)態(tài)線程池

2011-08-09 15:25:14

線程池數(shù)據(jù)庫(kù)連接池

2021-12-11 19:04:38

漏洞

2023-04-19 13:18:41

動(dòng)態(tài)線程池平臺(tái)

2013-08-27 10:20:35

JavaLINQLinq4j

2013-06-08 13:07:23

Java線程池調(diào)度器

2021-07-31 22:20:00

線程池系統(tǒng)參數(shù)

2022-02-14 16:08:15

開(kāi)源項(xiàng)目線程池動(dòng)態(tài)可監(jiān)控

2017-07-28 15:12:28

Neo4j圖數(shù)據(jù)庫(kù)

2023-11-29 16:38:12

線程池阻塞隊(duì)列開(kāi)發(fā)

2022-12-15 17:31:41

架構(gòu)龍芯

2009-02-27 10:04:25

動(dòng)態(tài)基礎(chǔ)架構(gòu)NEDC

2011-06-30 09:49:40

JSPJ2EE

2022-06-02 08:01:11

云原生工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)