日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

Spring Boot + Nacos 實(shí)現(xiàn)了一個(gè)動(dòng)態(tài)化線程池,非常實(shí)用!

來(lái)源: 責(zé)編: 時(shí)間:2024-02-04 08:59:05 285觀看
導(dǎo)讀在后臺(tái)開發(fā)中,會(huì)經(jīng)常用到線程池技術(shù),對(duì)于線程池核心參數(shù)的配置很大程度上依靠經(jīng)驗(yàn)。然而,由于系統(tǒng)運(yùn)行過(guò)程中存在的不確定性,我們很難一勞永逸地規(guī)劃一個(gè)合理的線程池參數(shù)。在對(duì)線程池配置參數(shù)進(jìn)行調(diào)整時(shí),一般需要對(duì)服務(wù)進(jìn)

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

本文以Nacos作為服務(wù)配置中心,以修改線程池核心線程數(shù)、最大線程數(shù)為例,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的動(dòng)態(tài)化線程池。fdD28資訊網(wǎng)——每日最新資訊28at.com

代碼實(shí)現(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:fdD28資訊網(wǎng)——每日最新資訊28at.com

server:  port: 8010  # 應(yīng)用名稱(nacos會(huì)將該名稱當(dāng)做服務(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:fdD28資訊網(wǎng)——每日最新資訊28at.com

spring:  profiles:    active: dev

為什么要配置兩個(gè)yml文件?fdD28資訊網(wǎng)——每日最新資訊28at.com

springboot中配置文件的加載是存在優(yōu)先級(jí)順序的,bootstrap優(yōu)先級(jí)高于application。fdD28資訊網(wǎng)——每日最新資訊28at.com

nacos在項(xiàng)目初始化時(shí),要保證先從配置中心進(jìn)行配置拉取,拉取配置之后才能保證項(xiàng)目的正常啟動(dòng)。fdD28資訊網(wǎng)——每日最新資訊28at.com

3.nacos配置

登錄到nacos管理頁(yè)面,新建配置,如下圖所示:fdD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片fdD28資訊網(wǎng)——每日最新資訊28at.com

注意Data ID的命名格式為,${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension} ,在本文中,Data ID的名字就是order-service-dev.yml。fdD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片fdD28資訊網(wǎng)——每日最新資訊28at.com

這里我們只配置了兩個(gè)參數(shù),核心線程數(shù)量和最大線程數(shù)。fdD28資訊網(wǎng)——每日最新資訊28at.com

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

@RefreshScope@Configurationpublic 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));                    }                });    }     /**     * 打印當(dāng)前線程池的狀態(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);    }}

這個(gè)代碼就是實(shí)現(xiàn)動(dòng)態(tài)線程池和核心了,需要說(shuō)明的是:fdD28資訊網(wǎng)——每日最新資訊28at.com

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

5.controller

為了觀察線程池動(dòng)態(tài)變更的效果,增加Controller類。fdD28資訊網(wǎng)——每日最新資訊28at.com

@RestController@RequestMapping("/threadpool")public class ThreadPoolController {     @Autowired    private DynamicThreadPool dynamicThreadPool;     /**     * 打印當(dāng)前線程池的狀態(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.測(cè)試

啟動(dòng)項(xiàng)目,訪問(wèn)http://localhost:8010/threadpool/print打印當(dāng)前線程池的配置。fdD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片fdD28資訊網(wǎng)——每日最新資訊28at.com

可以看到,這個(gè)就是我們之前在nacos配置的線程數(shù)。fdD28資訊網(wǎng)——每日最新資訊28at.com

訪問(wèn)http://localhost:8010/threadpool/add?count=20增加20個(gè)任務(wù),重新打印線程池配置fdD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片fdD28資訊網(wǎng)——每日最新資訊28at.com

可以看到已經(jīng)有線程在排隊(duì)了。fdD28資訊網(wǎng)——每日最新資訊28at.com

為了能夠看到效果,我們多訪問(wèn)幾次/add接口,增加任務(wù)數(shù),在控制臺(tái)出現(xiàn)拒絕信息時(shí)調(diào)整nacos配置。fdD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片fdD28資訊網(wǎng)——每日最新資訊28at.com

此時(shí),執(zhí)行/add命令時(shí),所有的線程都會(huì)提示rejected。fdD28資訊網(wǎng)——每日最新資訊28at.com

調(diào)整nacos配置,將核心線程數(shù)調(diào)整為50,最大線程數(shù)調(diào)整為100.fdD28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片fdD28資訊網(wǎng)——每日最新資訊28at.com

重新多次訪問(wèn)/add接口增加任務(wù),發(fā)現(xiàn)沒(méi)有拒絕信息了。這時(shí),打印具體的線程狀態(tài),發(fā)現(xiàn)線程池參數(shù)修改成功。fdD28資訊網(wǎng)——每日最新資訊28at.com

圖片fdD28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

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

優(yōu)秀的輪子還有好多,比如Hippo4J ,使用起來(lái)和dynamic-tp差不多。Hippo4J 有無(wú)依賴中間件實(shí)現(xiàn)動(dòng)靜線程池,也有默認(rèn)實(shí)現(xiàn)Nacos和Apollo的版本,而dynamic-tp 默認(rèn)實(shí)現(xiàn)依賴Nacos或Apollo。fdD28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-72425-0.htmlSpring Boot + Nacos 實(shí)現(xiàn)了一個(gè)動(dòng)態(tài)化線程池,非常實(shí)用!

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 微信發(fā)布公告:打擊網(wǎng)絡(luò)賭博類違法行為,涉賭賬號(hào)將被限制支付能力、封號(hào)

下一篇: 沒(méi)研究過(guò)SynchronousQueue源碼,就別寫精通線程池

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久欧美肥婆一二区| 亚洲伊人久久综合| 狠狠色丁香婷综合久久| 激情综合五月天| 亚洲国产三级| 中文网丁香综合网| 性色av一区二区三区在线观看 | 亚洲九九精品| 亚洲性夜色噜噜噜7777| 久久精品国产亚洲a| 蜜臀91精品一区二区三区| 欧美精品久久久久久久免费观看 | 国产美女精品视频| 亚洲第一在线综合网站| 亚洲视频免费在线观看| 久久精品视频网| 欧美日本国产精品| 国产精品久久影院| 亚洲电影在线免费观看| 中文在线一区| 久久久久久穴| 欧美午夜影院| 在线日韩电影| 亚洲在线观看视频| 欧美jizz19hd性欧美| 国产精品久久午夜| 亚洲国产美女| 欧美在线视频观看免费网站| 欧美日韩成人在线视频| 黑人一区二区| 亚洲一区久久久| 欧美成人综合| 国产亚洲激情在线| 正在播放日韩| 欧美肥婆在线| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲一二三区精品| 欧美大片一区二区| 国产亚洲欧美aaaa| 亚洲一区综合| 欧美日韩国产精品专区| 在线精品一区| 欧美在线亚洲综合一区| 欧美四级在线观看| 亚洲韩国精品一区| 久久精品在线视频| 国产精品亚洲欧美| 99国内精品久久久久久久软件| 久久久久一区二区三区| 国产精品日韩久久久| 99精品久久久| 欧美成人国产| 在线日韩中文字幕| 久久久国产一区二区| 国产精品视频xxx| 在线亚洲精品| 欧美女同视频| 亚洲黄色免费| 麻豆成人av| 这里只有精品电影| 欧美精品高清视频| 在线观看日韩av先锋影音电影院| 欧美一区2区三区4区公司二百| 欧美三区美女| 亚洲精品乱码久久久久久久久| 久久一区二区三区四区五区| 国产欧美综合在线| 亚洲一区二区综合| 欧美视频一区在线| 一本色道久久综合亚洲精品婷婷| 欧美黄在线观看| 亚洲国产精品专区久久 | 国产伦精品一区二区三区免费迷| 亚洲午夜av在线| 欧美体内she精视频在线观看| 日韩视频专区| 欧美日韩亚洲一区二区三区| 一区二区黄色| 欧美高清视频在线| 亚洲第一福利在线观看| 中文欧美字幕免费| 欧美日韩国产精品一卡| av成人激情| 欧美视频一二三区| 亚洲香蕉网站| 国产精品久久久久久久久果冻传媒 | 亚洲免费视频成人| 国产精品美女久久久久aⅴ国产馆| 一本久久综合亚洲鲁鲁五月天| 欧美日韩1234| 国产精品99久久久久久宅男| 欧美性猛片xxxx免费看久爱| 国内精品久久久久伊人av| 久久精品成人一区二区三区蜜臀| 国产亚洲欧美一区在线观看| 久久精品人人爽| 在线观看国产一区二区| 欧美成人精品在线观看| 日韩视频在线观看一区二区| 欧美伦理91| 亚洲神马久久| 国产精品一区二区三区成人| 欧美一区二区免费| 国产精品网站一区| 午夜一区二区三区在线观看| 国产在线乱码一区二区三区| 开元免费观看欧美电视剧网站| 在线成人免费视频| 欧美精品在线免费播放| 中文日韩在线| 国产午夜精品全部视频在线播放| 久久免费视频在线| 亚洲精品久久久久久下一站| 欧美日韩一区在线观看视频| 亚洲欧美国产毛片在线| 国产人成一区二区三区影院| 久久亚洲一区二区三区四区| 亚洲国产老妈| 欧美视频中文一区二区三区在线观看| 亚洲第一毛片| 欧美精品免费看| 亚洲欧美综合| 亚洲高清视频在线观看| 欧美午夜精品久久久久久久| 久久er精品视频| 亚洲人成绝费网站色www| 国产精品国产a级| 久久久久免费观看| 国产精品综合网站| 久久影视三级福利片| 日韩亚洲欧美在线观看| 国产欧美精品在线播放| 麻豆精品91| 亚洲欧美日韩视频二区| 国产热re99久久6国产精品| 欧美sm重口味系列视频在线观看| 在线视频中文亚洲| 国产一区二区成人| 欧美精品一区二| 午夜在线播放视频欧美| 亚洲高清久久网| 国产精品高清在线| 久久一本综合频道| 亚洲午夜一级| 亚洲国产一区二区在线| 国产精品女人网站| 欧美成人精品一区| 亚洲欧美综合v| 亚洲国内在线| 国产精品永久在线| 欧美精品一区二区三区蜜桃| 久久精品九九| 亚洲视频精品| 亚洲国产经典视频| 国产午夜精品福利| 欧美日韩理论| 老司机一区二区三区| 亚洲欧美日韩天堂| 日韩视频免费看| 国产九九精品视频| 欧美美女日韩| 久久亚洲一区二区| 亚洲欧美综合国产精品一区| 99精品国产高清一区二区| 尤物yw午夜国产精品视频明星 | 国产欧美亚洲精品| 欧美日韩激情网| 麻豆精品传媒视频| 欧美一级视频一区二区| 日韩亚洲视频在线| 一色屋精品亚洲香蕉网站| 国产精品你懂的在线| 欧美成人69| 国产精品一卡| 欧美日韩一区二区三区视频 | 久久看片网站| 亚洲自拍电影| 99精品久久| 亚洲美女毛片| 亚洲激情视频网站| 精品成人免费| 狠狠色狠狠色综合日日tαg| 国产欧美日韩在线观看| 国产精品户外野外| 欧美日韩亚洲三区| 欧美韩日一区二区| 美女性感视频久久久| 久久久久成人精品免费播放动漫| 午夜免费日韩视频| 亚洲欧美另类久久久精品2019| 一区二区三区欧美在线| 9色porny自拍视频一区二区| 亚洲精品国产精品国自产在线 | 欧美日韩系列| 欧美精品一区二区三区四区| 欧美成人国产va精品日本一级| 久久一区二区三区av| 久久中文精品| 麻豆av一区二区三区| 免费人成精品欧美精品| 久久人人爽人人爽| 久久久久久日产精品| 久久米奇亚洲| 久久视频一区|