国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

利用 Nacos 實現(xiàn)了一個動態(tài)化線程池,非常實用!

開發(fā) 前端
簡單實現(xiàn)了一個可以調(diào)整核心線程數(shù)和最大線程數(shù)的動態(tài)線程池。具體的線程池實現(xiàn)原理可以參考美團的這篇文章:https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html,結(jié)合監(jiān)控告警等實現(xiàn)一個完善的動態(tài)線程池產(chǎn)品。

在后臺開發(fā)中,會經(jīng)常用到線程池技術(shù),對于線程池核心參數(shù)的配置很大程度上依靠經(jīng)驗。然而,由于系統(tǒng)運行過程中存在的不確定性,我們很難一勞永逸地規(guī)劃一個合理的線程池參數(shù)。在對線程池配置參數(shù)進行調(diào)整時,一般需要對服務(wù)進行重啟,這樣修改的成本就會偏高。一種解決辦法就是,將線程池的配置放到平臺側(cè),運行開發(fā)同學根據(jù)系統(tǒng)運行情況對核心參數(shù)進行動態(tài)配置。

本文以Nacos作為服務(wù)配置中心,以修改線程池核心線程數(shù)、最大線程數(shù)為例,實現(xiàn)一個簡單的動態(tài)化線程池。

代碼實現(xiàn)

1.依賴

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.1</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

2.配置yml文件

bootstrap.yml:

server:
port: 8010
# 應(yīng)用名稱(nacos會將該名稱當做服務(wù)名稱)
spring:
application:
name: order-service
cloud:
nacos:
discovery:
namespace: public
server-addr: 192.168.174.129:8848
config:
server-addr: 192.168.174.129:8848
file-extension: yml

application.yml:

spring:
profiles:
active: dev

為什么要配置兩個yml文件?

springboot中配置文件的加載是存在優(yōu)先級順序的,bootstrap優(yōu)先級高于application。

nacos在項目初始化時,要保證先從配置中心進行配置拉取,拉取配置之后才能保證項目的正常啟動。

3.nacos配置

登錄到nacos管理頁面,新建配置,如下圖所示:

圖片

注意Data ID的命名格式為,${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension} ?,在本文中,Data ID的名字就是order-service-dev.yml。

圖片

這里我們只配置了兩個參數(shù),核心線程數(shù)量和最大線程數(shù)。

4.線程池配置和nacos配置變更監(jiān)聽

@RefreshScope
@Configuration
public class DynamicThreadPool implements InitializingBean {
@Value("${core.size}")
private String coreSize;

@Value("${max.size}")
private String maxSize;

private static ThreadPoolExecutor threadPoolExecutor;

@Autowired
private NacosConfigManager nacosConfigManager;

@Autowired
private NacosConfigProperties nacosConfigProperties;

@Override
public void afterPropertiesSet() throws Exception {
//按照nacos配置初始化線程池
threadPoolExecutor = new ThreadPoolExecutor(Integer.parseInt(coreSize), Integer.parseInt(maxSize), 10L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(10),
new ThreadFactoryBuilder().setNameFormat("c_t_%d").build(),
new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
System.out.println("rejected!");
}
});

//nacos配置變更監(jiān)聽
nacosConfigManager.getConfigService().addListener("order-service-dev.yml", nacosConfigProperties.getGroup(),
new Listener() {
@Override
public Executor getExecutor() {
return null;
}

@Override
public void receiveConfigInfo(String configInfo) {
//配置變更,修改線程池配置
System.out.println(configInfo);
changeThreadPoolConfig(Integer.parseInt(coreSize), Integer.parseInt(maxSize));
}
});
}

/**
* 打印當前線程池的狀態(tài)
*/
public String printThreadPoolStatus() {
return String.format("core_size:%s,thread_current_size:%s;" +
"thread_max_size:%s;queue_current_size:%s,total_task_count:%s", threadPoolExecutor.getCorePoolSize(),
threadPoolExecutor.getActiveCount(), threadPoolExecutor.getMaximumPoolSize(), threadPoolExecutor.getQueue().size(),
threadPoolExecutor.getTaskCount());
}

/**
* 給線程池增加任務(wù)
*
* @param count
*/
public void dynamicThreadPoolAddTask(int count) {
for (int i = 0; i < count; i++) {
int finalI = i;
threadPoolExecutor.execute(new Runnable() {
@Override
public void run() {
try {
System.out.println(finalI);
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}

/**
* 修改線程池核心參數(shù)
*
* @param coreSize
* @param maxSize
*/
private void changeThreadPoolConfig(int coreSize, int maxSize) {
threadPoolExecutor.setCorePoolSize(coreSize);
threadPoolExecutor.setMaximumPoolSize(maxSize);
}
}

這個代碼就是實現(xiàn)動態(tài)線程池和核心了,需要說明的是:

  • @RefreshScope:這個注解用來支持nacos的動態(tài)刷新功能;
  • @Value("${max.size}")?,@Value("${core.size}"):這兩個注解用來讀取我們上一步在nacos配置的具體信息;同時,nacos配置變更時,能夠?qū)崟r讀取到變更后的內(nèi)容
  • nacosConfigManager.getConfigService().addListener:配置監(jiān)聽,nacos配置變更時實時修改線程池的配置。

5.controller

為了觀察線程池動態(tài)變更的效果,增加Controller類。

@RestController
@RequestMapping("/threadpool")
public class ThreadPoolController {

@Autowired
private DynamicThreadPool dynamicThreadPool;

/**
* 打印當前線程池的狀態(tài)
*/
@GetMapping("/print")
public String printThreadPoolStatus() {
return dynamicThreadPool.printThreadPoolStatus();
}

/**
* 給線程池增加任務(wù)
*
* @param count
*/
@GetMapping("/add")
public String dynamicThreadPoolAddTask(int count) {
dynamicThreadPool.dynamicThreadPoolAddTask(count);
return String.valueOf(count);
}
}

6.測試

啟動項目,訪問http://localhost:8010/threadpool/print打印當前線程池的配置。

圖片

可以看到,這個就是我們之前在nacos配置的線程數(shù)。

訪問http://localhost:8010/threadpool/add?count=20增加20個任務(wù),重新打印線程池配置

圖片

可以看到已經(jīng)有線程在排隊了。

為了能夠看到效果,我們多訪問幾次/add接口,增加任務(wù)數(shù),在控制臺出現(xiàn)拒絕信息時調(diào)整nacos配置。

圖片

此時,執(zhí)行/add命令時,所有的線程都會提示rejected。

調(diào)整nacos配置,將核心線程數(shù)調(diào)整為50,最大線程數(shù)調(diào)整為100.

圖片

重新多次訪問/add接口增加任務(wù),發(fā)現(xiàn)沒有拒絕信息了。這時,打印具體的線程狀態(tài),發(fā)現(xiàn)線程池參數(shù)修改成功。

圖片

總結(jié)

這里,只是簡單實現(xiàn)了一個可以調(diào)整核心線程數(shù)和最大線程數(shù)的動態(tài)線程池。具體的線程池實現(xiàn)原理可以參考美團的這篇文章:https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html,結(jié)合監(jiān)控告警等實現(xiàn)一個完善的動態(tài)線程池產(chǎn)品。

優(yōu)秀的輪子還有好多,比如Hippo4J ,使用起來和dynamic-tp差不多。Hippo4J 有無依賴中間件實現(xiàn)動靜線程池,也有默認實現(xiàn)Nacos和Apollo的版本,而dynamic-tp 默認實現(xiàn)依賴Nacos或Apollo。

責任編輯:武曉燕 來源: 碼猿技術(shù)專欄
相關(guān)推薦

2024-02-04 09:19:00

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

2024-11-08 14:11:09

2023-03-08 07:43:07

DUCC配置平臺

2025-07-29 01:22:00

2024-07-02 11:29:28

Typer庫Python命令

2014-05-23 10:37:37

聊天程序PHP聊天程序

2022-03-09 09:43:01

工具類線程項目

2025-01-09 11:24:59

線程池美團動態(tài)配置中心

2020-10-27 13:24:35

線程池系統(tǒng)模型

2022-02-14 16:08:15

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

2024-11-13 13:14:38

2023-01-26 11:43:03

線程池CPUJava

2022-08-29 09:06:43

hippo4j動態(tài)線程池

2022-03-22 09:20:57

應(yīng)用線程池技術(shù)

2019-02-12 11:22:29

Linux 系統(tǒng) 命令

2021-05-27 09:50:03

連接池FTP服務(wù)器

2021-10-27 06:49:34

線程池Core函數(shù)

2024-08-28 10:33:56

2021-07-31 22:20:00

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

2015-11-02 09:25:07

jQuery代碼片段
點贊
收藏

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

日日夜夜天天综合| 色丁香久综合在线久综合在线观看| 久久国产精品免费观看| 国产在线视频不卡二| 日本福利视频在线| 亚洲日本一区二区| 久久免费看视频| 精品国产a毛片| 韩国三级成人在线| 国产精品成人aaaaa网站| 亚洲麻豆一区| 中国成人在线视频| 国产女主播一区| 性色av一区| 精品一区二区三区四区| 欧美a级大片在线| 91精品在线国产| 麻豆91精品91久久久的内涵| 国产又猛又黄的视频| 色999日韩国产欧美一区二区| 啊啊啊久久久| 青草成人免费视频| 亚洲在线观看| 91看片淫黄大片91| 手机看片福利盒子久久| 亚洲国产精品一区制服丝袜| 4438全国亚洲精品在线观看视频| 欧美激情网址| 国内不卡一区二区三区| 欧美理论电影在线| 精品视频91| 欧美多人乱p欧美4p久久| 成人美女视频在线看| 中文字幕第36页| 污黄色在线观看| 日韩三级高清在线| 美女久久精品| 免费一区二区三区| 中文欧美字幕免费| 在线免费观看污| 国产成人久久久| 久久精品国产99| 中文产幕区在线观看| 亚洲人成啪啪网站| 亚洲mv大片欧洲mv大片| 日韩video| 婷婷国产在线综合| 国产精品2区| 欧美尤物一区| 午夜亚洲福利老司机| 国语自产精品视频在线看抢先版结局| 97超级碰碰| 国产精品丝袜久久久久久app| caoprom在线| 亚洲free性xxxx护士白浆| 91婷婷韩国欧美一区二区| 免费在线看黄色| 国产精品日韩在线| 99久久精品免费| 麻豆传媒在线观看| 国产精品久久久久久久久久三级 | 26uuu亚洲| 亚洲七七久久综合桃花剧情介绍| 国产精品91在线| 久久久久久99精品| 欧亚在线中文字幕免费| 精品国产免费久久久久久尖叫| 亚洲久草在线视频| 亚洲美女色播| 欧美在线观看视频免费| 91精品国产乱码| 欧美激情aⅴ一区二区三区| 免费三级欧美电影| 国外色69视频在线观看| 91亚洲永久精品| 欧美xxx网站| 日本在线观看一区二区| 欧美亚洲精品一区| 国产一区二区三区四区三区四| 麻豆影视在线观看| 日本午夜精品理论片a级appf发布| 国产色产综合色产在线视频| 国产成人免费精品| www.亚洲成人网| 亚洲精品久久久久中文字幕欢迎你| 欧美亚洲网站| 少女频道在线观看免费播放电视剧 | 久久久久久电影| 亚洲国产一区二区久久| 成人午夜免费在线| 中文字幕最新精品| 99久久精品免费看| 精品国产乱码一区二区三区| 免费日韩中文字幕| 欧美精品福利在线| 亚洲欧美日韩国产综合在线 | 91久久精品一区| 日韩欧美在线免费观看| 综合精品一区| 一区二区三区视频网站| 欧美精品一区二区三区在线四季 | 亚洲人体偷拍| 日本亚洲精品| 蜜桃狠狠色伊人亚洲综合网站| 欧美三级在线播放| 国产农村妇女精品一二区| 男人天堂久久久| 亚洲国产一区二区三区在线| 亚洲国产精品99久久| 成人免费视频一区| 北条麻妃在线一区二区免费播放| 成人观看网站a| 国产精品视频一区二区三区四| 91福利区一区二区三区| 日韩国产欧美一区二区三区| 欧美a级在线观看| 欧美 国产 日本| 国产精品尤物福利片在线观看| 色婷婷久久久综合中文字幕| 亚洲在线一区| 日韩欧美精品一区二区综合视频| 黄色手机在线视频| 亚洲va欧美va国产综合久久| 欧美成人欧美edvon| 97se亚洲国产综合自在线| 国产不卡一二三区| 国产精品刘玥久久一区| 欧日韩免费视频| 国产成人短视频| 91精品一区二区三区久久久久久| 国产制服丝袜一区| 久久久久97| 欧美激情二区| www插插插无码视频网站| 欧美综合国产精品久久丁香| 在线观看日产精品| 成人免费视频国产在线观看| 精品美女久久| 欧亚av在线| 两个人看的免费完整在线观看| 新呦u视频一区二区| 91精品国产乱码久久久久久蜜臀 | 日韩电影二区| 丰满的护士2在线观看高清| 好男人www社区| 国内不卡一区二区三区| www.欧美精品一二三区| 欧美性20hd另类| 国产精品88av| 99久久久国产精品美女| 影视一区二区三区| 在线看的你懂得| 韩日视频在线观看| 国产主播欧美精品| 色老头一区二区三区| 色综合中文综合网| 99久久er热在这里只有精品15| 午夜av一区| 欧美黄视频在线观看| 污影院在线观看| 超碰在线人人| 男女激情无遮挡| 狼狼综合久久久久综合网| 欧美激情啊啊啊| 欧美大片拔萝卜| 一区二区激情小说| 成人av在线播放网址| 亚洲国产精品一区| 亚洲肉体裸体xxxx137| av资源亚洲| 在线视频91p| 免费av高清| 久久婷婷五月综合色国产香蕉| 欧美不卡三区| 91社区国产高清| 欧美性受xxx| 日韩三级影视基地| 亚洲国内高清视频| 欧美色男人天堂| 亚洲一区二区在线免费看| 2023国产一二三区日本精品2022| 久久精品导航| 91精品国产麻豆国产在线观看| 一区二区三区在线免费看| 国模私拍一区二区国模曼安| 粉嫩av一区| videoxxxx另类日本极品| 乱子伦视频在线看| 日韩a级黄色片| 久久久一本精品99久久精品66 | 午夜欧美不卡精品aaaaa| 亚洲色图50p| 欧美人与禽zozo性伦| 亚洲影视在线观看| 欧美激情综合网| 97精品久久久久中文字幕| 国产91精品欧美| 国产伦精品一区二区三区免费迷| 久久午夜视频| 久久婷婷av|