AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

揭秘XXLJOB:任務(wù)調(diào)度和執(zhí)行的全面指南

來源: 責(zé)編: 時(shí)間:2023-12-13 17:01:46 226觀看
導(dǎo)讀本文主要向大家介紹一下xxljob在調(diào)度任務(wù)時(shí)執(zhí)行了哪些操作,這也是xxljob最核心的功能表結(jié)構(gòu)xxljob是如何觸發(fā)任務(wù)的,首先我們先了解一下xxljob的表結(jié)構(gòu)xxl_job_info 記錄的是各個(gè)具體job的信息 是xxljob中最重要的表 這

本文主要向大家介紹一下xxljob在調(diào)度任務(wù)時(shí)執(zhí)行了哪些操作,這也是xxljob最核心的功能CpQ28資訊網(wǎng)——每日最新資訊28at.com

表結(jié)構(gòu)

xxljob是如何觸發(fā)任務(wù)的,首先我們先了解一下xxljob的表結(jié)構(gòu)CpQ28資訊網(wǎng)——每日最新資訊28at.com

xxl_job_info 記錄的是各個(gè)具體job的信息 是xxljob中最重要的表 這張表記錄的job 的調(diào)度類型,調(diào)度時(shí)機(jī),路由策略,阻塞策略等信息CpQ28資訊網(wǎng)——每日最新資訊28at.com

CREATE TABLE `xxl_job_info` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `job_group` int(11) NOT NULL COMMENT '執(zhí)行器主鍵ID',  `job_desc` varchar(255) NOT NULL,  `add_time` datetime DEFAULT NULL,  `update_time` datetime DEFAULT NULL,  `author` varchar(64) DEFAULT NULL COMMENT '作者',  `alarm_email` varchar(255) DEFAULT NULL COMMENT '報(bào)警郵件',  `schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '調(diào)度類型',  `schedule_conf` varchar(128) DEFAULT NULL COMMENT '調(diào)度配置,值含義取決于調(diào)度類型',  `misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '調(diào)度過期策略',  `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '執(zhí)行器路由策略',  `executor_handler` varchar(255) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)handler',  `executor_param` varchar(512) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)參數(shù)',  `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞處理策略',  `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任務(wù)執(zhí)行超時(shí)時(shí)間,單位秒',  `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失敗重試次數(shù)',  `glue_type` varchar(50) NOT NULL COMMENT 'GLUE類型',  `glue_source` mediumtext COMMENT 'GLUE源代碼',  `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE備注',  `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新時(shí)間',  `child_jobid` varchar(255) DEFAULT NULL COMMENT '子任務(wù)ID,多個(gè)逗號(hào)分隔',  `trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '調(diào)度狀態(tài):0-停止,1-運(yùn)行',  `trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次調(diào)度時(shí)間',  `trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次調(diào)度時(shí)間',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

xxl_job_log 這張表記錄了job執(zhí)行時(shí)的一些參數(shù) 包括了執(zhí)行次數(shù) 執(zhí)行參數(shù) jobid, 調(diào)度的時(shí)機(jī)和結(jié)果 xxl_job_log_report 記錄了調(diào)度中心的統(tǒng)計(jì)數(shù)據(jù) xxl_job_logglue記錄了glue類型job的日志CpQ28資訊網(wǎng)——每日最新資訊28at.com

xxl_job_registry 記錄了在調(diào)度中心注冊(cè)的執(zhí)行器信息 xxl_job_group 記錄了調(diào)度中心的分組情況 xxl_job_user 記錄了用戶信息 xxl_job_lock記錄了鎖信息 其實(shí)我們通過表的設(shè)計(jì)就以了解一些xxljob的設(shè)計(jì)思想,下面我們就來看一下一個(gè)任務(wù)是如何被調(diào)度的CpQ28資訊網(wǎng)——每日最新資訊28at.com

架構(gòu)簡述

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

  1. 執(zhí)行器注冊(cè)到調(diào)度中心
  2. 頁面新建/修改job ->根據(jù)執(zhí)行策略計(jì)算 下次執(zhí)行時(shí)間
  3. 執(zhí)行線程輪詢表  5s 執(zhí)行job  -> 阻塞策略
  4. 記錄執(zhí)行信息 ->更新下次執(zhí)行

大家可以看到上圖是一個(gè)簡要的job執(zhí)行的流程圖 在了解代碼前和大家簡要的介紹一下XXLJOB的通信結(jié)構(gòu),調(diào)度中心和執(zhí)行器各維護(hù)一個(gè)netty的服務(wù),雙方使用HTTP通信,執(zhí)行器的ip和端口在啟動(dòng)時(shí)會(huì)通過http調(diào)用通知調(diào)度中心,各位在啟動(dòng)服務(wù)時(shí)是可以看到XXLJOB對(duì)應(yīng)的日志的,在看XXLJOB的代碼時(shí)大家會(huì)看到一些以client或impl結(jié)尾的實(shí)現(xiàn),對(duì)應(yīng)的就是調(diào)度中心和執(zhí)行器的netty的實(shí)現(xiàn)。CpQ28資訊網(wǎng)——每日最新資訊28at.com

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

下面筆者帶大家深入了解一下具體的代碼 在執(zhí)行器端需配置一些參數(shù),從而時(shí)執(zhí)行器能夠找到調(diào)度中心CpQ28資訊網(wǎng)——每日最新資訊28at.com

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

包括了調(diào)度中心的地址,執(zhí)行器的ip,端口(可以不填),日志的過期時(shí)間(非必填)CpQ28資訊網(wǎng)——每日最新資訊28at.com

代碼詳解

  1. 啟動(dòng)/初始化階段 在服務(wù)啟動(dòng)時(shí)會(huì)啟動(dòng)netty的服務(wù)
XxlJobSpringExecutor#afterSingletonsInstantiated()->super.start()->initEmbedServer();->embedServer.start();->startRegistry();->ExecutorRegistryThread.getInstance().start()

最終啟動(dòng)一個(gè)名為registryThread的線程,在這個(gè)線程中調(diào)用 adminBiz.registry()方法,調(diào)用調(diào)度中心的接口實(shí)現(xiàn)注冊(cè) 此時(shí)調(diào)度中心與執(zhí)行器(客戶端)就建立起了連接 此外在spring的bean初始化完成后 在XxlJobAdminConfig這個(gè)類中還利用afterPropertiesSet實(shí)現(xiàn)了初始化了一些線程CpQ28資訊網(wǎng)——每日最新資訊28at.com

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

這些線程的作用分別為處理國際化對(duì)應(yīng)的語言,快慢線程池的初始化,服務(wù)注冊(cè)監(jiān)控,任務(wù)執(zhí)行監(jiān)控,任務(wù)完成監(jiān)控,日志報(bào)表處理 ,任務(wù)執(zhí)行,限于篇幅,這些線程的作用我們下期再詳細(xì)的解釋,到現(xiàn)在為止,XXLJOB的啟動(dòng)就已經(jīng)完成了。CpQ28資訊網(wǎng)——每日最新資訊28at.com

  1. 頁面處理

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

在調(diào)度中心的界面我們可以新建一個(gè)調(diào)度任務(wù),其中有幾個(gè)參數(shù)需要注意,jobhandler,運(yùn)行模式,阻塞策略,cron。由于目前大部分是在springboot中運(yùn)行的,所以大部分是依賴Bean執(zhí)行的,jobHandler則是代碼中定義的job名稱。運(yùn)行模式?jīng)Q定了調(diào)度中心選擇執(zhí)行器的邏輯CpQ28資訊網(wǎng)——每日最新資訊28at.com

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

阻塞策略決定了連續(xù)執(zhí)行時(shí)的策略CpQ28資訊網(wǎng)——每日最新資訊28at.com

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

cron則決定了調(diào)度的時(shí)間CpQ28資訊網(wǎng)——每日最新資訊28at.com

  1. 執(zhí)行

下面我們深入了解一下一個(gè)job是如果被調(diào)度中心執(zhí)行的。執(zhí)行的邏輯在上文中提到的JobScheduleHelper中實(shí)現(xiàn)。首先會(huì)先獲取鎖,此處是利用mysql的for update實(shí)現(xiàn)的, 然后會(huì)獲取5秒內(nèi)的任務(wù)列表CpQ28資訊網(wǎng)——每日最新資訊28at.com

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

逐個(gè)遍歷拿到的任務(wù),如果任務(wù)已經(jīng)超過了執(zhí)行時(shí)間+預(yù)讀時(shí)間(5s),根據(jù)過期策略決定是丟棄還是立即執(zhí)行一次,并且更新下次執(zhí)行時(shí)間 如果當(dāng)前時(shí)間大于任務(wù)下次執(zhí)行時(shí)間,則將任務(wù)放入執(zhí)行線程池,等待執(zhí)行,更新下次執(zhí)行時(shí)間,如果下次執(zhí)行時(shí)間在5s內(nèi),則會(huì)將任務(wù)放入時(shí)間輪中,等待其他線程處理,再此更新此任務(wù)執(zhí)行時(shí)間如果均不是上述兩種情況,則會(huì)將任務(wù)放入時(shí)間輪中,更新執(zhí)行時(shí)間,等待其他線程處理。CpQ28資訊網(wǎng)——每日最新資訊28at.com

for (XxlJobInfo jobInfo: scheduleList) {    // time-ring jump    if (nowTime > jobInfo.getTriggerNextTime() + PRE_READ_MS) {        // 2.1、trigger-expire > 5s:pass && make next-trigger-time        logger.warn(">>>>>>>>>>> xxl-job, schedule misfire, jobId = " + jobInfo.getId());        // 1、misfire match        MisfireStrategyEnum misfireStrategyEnum = MisfireStrategyEnum.match(jobInfo.getMisfireStrategy(), MisfireStrategyEnum.DO_NOTHING);        if (MisfireStrategyEnum.FIRE_ONCE_NOW == misfireStrategyEnum) {            // FIRE_ONCE_NOW 》 trigger            JobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.MISFIRE, -1, null, null, null);            logger.debug(">>>>>>>>>>> xxl-job, schedule push trigger : jobId = " + jobInfo.getId() );        }        // 2、fresh next        refreshNextValidTime(jobInfo, new Date());    } else if (nowTime > jobInfo.getTriggerNextTime()) {        // 2.2、trigger-expire < 5s:direct-trigger && make next-trigger-time        // 1、trigger        JobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.CRON, -1, null, null, null);        logger.debug(">>>>>>>>>>> xxl-job, schedule push trigger : jobId = " + jobInfo.getId() );        // 2、fresh next        refreshNextValidTime(jobInfo, new Date());        // next-trigger-time in 5s, pre-read again        if (jobInfo.getTriggerStatus()==1 && nowTime + PRE_READ_MS > jobInfo.getTriggerNextTime()) {            // 1、make ring second            int ringSecond = (int)((jobInfo.getTriggerNextTime()/1000)%60);            // 2、push time ring            pushTimeRing(ringSecond, jobInfo.getId());            // 3、fresh next            refreshNextValidTime(jobInfo, new Date(jobInfo.getTriggerNextTime()));        }    } else {        // 2.3、trigger-pre-read:time-ring trigger && make next-trigger-time        // 1、make ring second        int ringSecond = (int)((jobInfo.getTriggerNextTime()/1000)%60);        // 2、push time ring        pushTimeRing(ringSecond, jobInfo.getId());        // 3、fresh next        refreshNextValidTime(jobInfo, new Date(jobInfo.getTriggerNextTime()));/    }}

具體執(zhí)行任務(wù)的方法是 com.xxl.job.admin.core.trigger.XxlJobTrigger#triggerCpQ28資訊網(wǎng)——每日最新資訊28at.com

在這個(gè)方法中會(huì)根據(jù)執(zhí)行策略(ExecutorRouteStrategyEnum)選擇合適的執(zhí)行器,找到對(duì)應(yīng)的執(zhí)行器,利用netty的接口執(zhí)行對(duì)應(yīng)的任務(wù)CpQ28資訊網(wǎng)——每日最新資訊28at.com

尾聲

在本期文章中,向大家介紹了XXLJOB是如何啟動(dòng)和執(zhí)行任務(wù)的,在下期文章中將向大家介紹XXLJOB其他的細(xì)節(jié),由于一個(gè)定時(shí)任務(wù)系統(tǒng)的復(fù)雜,很多內(nèi)容還是需要各位讀者自己看一遍才能真正的理解,畢竟代碼才是真正的老師。CpQ28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-44391-0.html揭秘XXLJOB:任務(wù)調(diào)度和執(zhí)行的全面指南

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

上一篇: 探索Taro:跨平臺(tái)開發(fā)的實(shí)踐與原理

下一篇: 系統(tǒng)架構(gòu)達(dá)人親授:多電商活動(dòng)從容應(yīng)對(duì)的頂級(jí)秘籍!

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 使用LLM插件從命令行訪問Llama 2

    最近的一個(gè)大新聞是Meta AI推出了新的開源授權(quán)的大型語言模型Llama 2。這是一項(xiàng)非常重要的進(jìn)展:Llama 2可免費(fèi)用于研究和商業(yè)用途。(幾小時(shí)前,swyy發(fā)現(xiàn)它已從LLaMA 2更名為Lla
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運(yùn)營研究社作者 | 張知白編輯 | 楊佩汶設(shè)計(jì) | 晏談夢潔這個(gè)暑期,旅游賽道徹底火了:有的「地方」火了&mdash;&mdash;貴州村超旅游收入 1 個(gè)月超過 12 億;有的「博主」火了&m
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財(cái)經(jīng)(niudaocaijing)7月5日,企鵝FM發(fā)布官方公告稱由于業(yè)務(wù)調(diào)整,將于9月6日正式停止運(yùn)營,這意味著騰訊音樂長音頻業(yè)務(wù)走向消亡。騰訊在長音頻領(lǐng)域還在摸索。為
  • 新電商三兄弟,“抖快紅”成團(tuán)!

    來源:價(jià)值研究所作 者:Hernanderz 隨著內(nèi)容電商的概念興起,抖音、快手、小紅書組成的&ldquo;新電商三兄弟&rdquo;成為業(yè)內(nèi)一股不可忽視的勢力,給阿里、京東、拼多多帶去了巨大壓
  • 小米MIX Fold 3下月亮相:今年唯一無短板的全能折疊屏

    這段時(shí)間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都有新的進(jìn)展,其中榮耀、三星都已陸續(xù)發(fā)布了最新的折疊屏旗艦,尤其號(hào)榮耀Magi
  • 2納米決戰(zhàn)2025

    集微網(wǎng)報(bào)道 從三強(qiáng)爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺(tái)積電、三星,還是誓言重回先進(jìn)制程領(lǐng)先地位的英特爾,甚至初成立不久的新
  • iQOO 11S或7月上市:搭載“雞血版”驍龍8Gen2 史上最強(qiáng)5G Soc

    去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強(qiáng)機(jī),iQOO 11不僅全球首發(fā)2K 144Hz E6全感屏,搭載了第二代驍龍8平臺(tái)及144Hz電競屏,同時(shí)在快充
  • 回歸OPPO兩年,一加贏了銷量,輸了品牌

    成為OPPO旗下主打性能的先鋒品牌后,一加屢創(chuàng)佳績。今年618期間,一加手機(jī)全渠道銷量同比增長362%,憑借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • 榮耀Magicbook V 14 2021曙光藍(lán)版本正式開售,擁有觸摸屏

    榮耀 Magicbook V 14 2021 曙光藍(lán)版本正式開售,搭載 i7-11390H 處理器與 MX450 顯卡,配備 16GB 內(nèi)存與 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 鍵盤鍵程、
Top