在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

分布式定時(shí)調(diào)度:xxl-job最佳實(shí)踐方法

jf_ro2CN3Fa ? 來源:CSDN ? 2023-11-30 11:06 ? 次閱讀

一.定時(shí)任務(wù)概述

1.定時(shí)任務(wù)認(rèn)識

1.1.什么是定時(shí)任務(wù)

定時(shí)任務(wù)是按照指定時(shí)間周期運(yùn)行任務(wù)。使用場景為在某個固定時(shí)間點(diǎn)執(zhí)行,或者周期性的去執(zhí)行某個任務(wù),比如:每天晚上24點(diǎn)做數(shù)據(jù)匯總,定時(shí)發(fā)送短信等。

1.2.常見定時(shí)任務(wù)方案

While + Sleep : 通過循環(huán)加休眠的方式定時(shí)執(zhí)行

Timer和TimerTask實(shí)現(xiàn) :JDK自帶的定時(shí)任務(wù),可以實(shí)現(xiàn)簡單的間隔執(zhí)行任務(wù)(在指定時(shí)間點(diǎn)執(zhí)行某一任務(wù),也能定時(shí)的周期性執(zhí)行),無法實(shí)現(xiàn)按日歷去調(diào)度執(zhí)行任務(wù)。

ScheduledExecutorService : Java并發(fā)包下,JDK1.5出現(xiàn),是比較理想的定時(shí)任務(wù)實(shí)現(xiàn)方案。Eureka就使用的是它

QuartZ : 使用Quartz,它是一個異步任務(wù)調(diào)度框架,功能豐富,可以實(shí)現(xiàn)按日歷調(diào)度,支持持久化。

使用Spring Task ,Spring 3.0后提供Spring Task實(shí)現(xiàn)任務(wù)調(diào)度,支持按日歷調(diào)度,相比Quartz功能稍簡單,但是在開發(fā)基本夠用,支持注解編程方式。

SpringBoot中的Schedule : 通過@EnableScheduling+@Scheduled最實(shí)現(xiàn)定時(shí)任務(wù),底層使用的是Spring Task

2.分布式定時(shí)任務(wù)

2.1.遇到什么問題

上述的定時(shí)任務(wù)都是集中式(單體項(xiàng)目使用)的定時(shí)任務(wù),在分布式中將會面臨一些問題或不足

業(yè)務(wù)量大,單機(jī)性能瓶頸需要擴(kuò)展

多臺機(jī)器部署如何保證定時(shí)任務(wù)不重復(fù)執(zhí)行

定時(shí)任務(wù)時(shí)間需要可調(diào)整,可以暫停

機(jī)器發(fā)生故障down機(jī),定時(shí)任務(wù)依然可用,如何實(shí)現(xiàn)故障轉(zhuǎn)移

定時(shí)任務(wù),執(zhí)行日志是否可監(jiān)控

2.2.分布式定時(shí)任務(wù)xxl-job

XXL-JOB是一個分布式任務(wù)調(diào)度平臺,于2015問世,其核心設(shè)計(jì)目標(biāo)是開發(fā)迅速、學(xué)習(xí)簡單、輕量級、易擴(kuò)展。現(xiàn)已開放源代碼并接入多家公司線上產(chǎn)品線,開箱即用。其具備且不止如下能力

簡單 :支持通過Web頁面對任務(wù)進(jìn)行CRUD操作,操作簡單,一分鐘上手;

動態(tài) :支持動態(tài)修改任務(wù)狀態(tài)、啟動/停止任務(wù),以及終止運(yùn)行中任務(wù),即時(shí)生效;

調(diào)度中心HA(中心式) :調(diào)度采用中心式設(shè)計(jì),“調(diào)度中心”基于集群Quartz實(shí)現(xiàn)并支持集群部署,可保證調(diào)度中心HA;執(zhí)行器HA(分布式):任務(wù)分布式執(zhí)行,任務(wù)"執(zhí)行器"支持集群部署,可保證任務(wù)執(zhí)行HA;

彈性擴(kuò)容縮容 :一旦有新執(zhí)行器機(jī)器上線或者下線,下次調(diào)度時(shí)將會重新分配任務(wù);

路由策略 :執(zhí)行器集群部署時(shí)提供豐富的路由策略,包括:第一個、最后一個、輪詢、隨機(jī)、一致性HASH、最不經(jīng)常使用、最近最久未使用、故障轉(zhuǎn)移、忙碌轉(zhuǎn)移等;

故障轉(zhuǎn)移 :任務(wù)路由策略選擇"故障轉(zhuǎn)移"情況下,如果執(zhí)行器集群中某一臺機(jī)器故障,將會自動Failover切換到一臺正常的執(zhí)行器發(fā)送調(diào)度請求。

任務(wù)失敗告警 :默認(rèn)提供郵件方式失敗告警,同時(shí)預(yù)留擴(kuò)展接口,可方面的擴(kuò)展短信、釘釘?shù)雀婢绞剑?/p>

二.XXL-JOB初體驗(yàn)

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

1.1.設(shè)計(jì)思想

將調(diào)度行為抽象形成“調(diào)度中心”公共平臺,而平臺自身并不承擔(dān)業(yè)務(wù)邏輯,“調(diào)度中心”負(fù)責(zé)發(fā)起調(diào)度請求。

將任務(wù)抽象成分散的JobHandler,交由“執(zhí)行器”統(tǒng)一管理,“執(zhí)行器”負(fù)責(zé)接收調(diào)度請求并執(zhí)行對應(yīng)的JobHandler中業(yè)務(wù)邏輯。因此,“調(diào)度”和“任務(wù)”兩部分可以相互解耦,提高系統(tǒng)整體穩(wěn)定性和擴(kuò)展性;

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

xxl-job分為 調(diào)度中心和執(zhí)行器兩大模塊

調(diào)度模塊(調(diào)度中心)

負(fù)責(zé)管理調(diào)度信息,按照調(diào)度配置發(fā)出調(diào)度請求,自身不承擔(dān)業(yè)務(wù)代碼。調(diào)度系統(tǒng)與任務(wù)解耦,提高了系統(tǒng)可用性和穩(wěn)定性,同時(shí)調(diào)度系統(tǒng)性能不再受限于任務(wù)模塊;

支持可視化、簡單且動態(tài)的管理調(diào)度信息,包括任務(wù)新建,更新,刪除,GLUE開發(fā)和任務(wù)報(bào)警等,所有上述操作都會實(shí)時(shí)生效,同時(shí)支持監(jiān)控調(diào)度結(jié)果以及執(zhí)行日志,支持執(zhí)行器Failover(故障轉(zhuǎn)移)。

執(zhí)行模塊(執(zhí)行器)

負(fù)責(zé)接收調(diào)度請求并執(zhí)行任務(wù)邏輯。任務(wù)模塊專注于任務(wù)的執(zhí)行等操作,開發(fā)和維護(hù)更加簡單和高效;

接收“調(diào)度中心”的執(zhí)行請求、終止請求和日志請求等。

cb411750-8f20-11ee-939d-92fbcf53809c.png

調(diào)度中心高可用

基于數(shù)據(jù)庫的集群方案,數(shù)據(jù)庫選用Mysql;集群分布式并發(fā)環(huán)境中進(jìn)行定時(shí)任務(wù)調(diào)度時(shí),會在各個節(jié)點(diǎn)會上報(bào)任務(wù),存到數(shù)據(jù)庫中,執(zhí)行時(shí)會從數(shù)據(jù)庫中取出觸發(fā)器來執(zhí)行,如果觸發(fā)器的名稱和執(zhí)行時(shí)間相同,則只有一個節(jié)點(diǎn)去執(zhí)行此任務(wù)。

并行調(diào)度

調(diào)度采用線程池方式實(shí)現(xiàn),避免單線程因阻塞而引起任務(wù)調(diào)度延遲。XXL-JOB調(diào)度模塊默認(rèn)采用并行機(jī)制,在多線程調(diào)度的情況下,調(diào)度模塊被阻塞的幾率很低,大大提高了調(diào)度系統(tǒng)的承載量。

XXL-JOB的不同任務(wù)之間并行調(diào)度、并行執(zhí)行。XXL-JOB的單個任務(wù),針對多個執(zhí)行器是并行運(yùn)行的,針對單個執(zhí)行器是串行執(zhí)行的。同時(shí)支持任務(wù)終止。

執(zhí)行器(任務(wù))高可用

執(zhí)行器如若集群部署,調(diào)度中心將會感知到在線的所有執(zhí)行器,如“127.0.0.1:9997, 127.0.0.1:9998, 127.0.0.1:9999”。多個執(zhí)行器可以選擇“路由策略”來采用輪詢,隨機(jī)等方式進(jìn)行多機(jī)器調(diào)度。

當(dāng)任務(wù)”路由策略”選擇”故障轉(zhuǎn)移(FAILOVER)”時(shí),當(dāng)調(diào)度中心每次發(fā)起調(diào)度請求時(shí),會按照順序?qū)?zhí)行器發(fā)出心跳檢測請求,第一個檢測為存活狀態(tài)的執(zhí)行器將會被選定并發(fā)送調(diào)度請求。調(diào)度成功后,可在日志監(jiān)控界面查看“調(diào)度備注”

2.xxl-job安裝

2.1.下載源碼

請下載項(xiàng)目源碼并解壓,使用IDEA工具導(dǎo)入項(xiàng)目

項(xiàng)目代碼結(jié)構(gòu)如下

cb6304aa-8f20-11ee-939d-92fbcf53809c.png

doc :文檔,即SQL腳本所在目錄

db : “調(diào)度數(shù)據(jù)庫”建表腳本

xxl-job-admin : 調(diào)度中心項(xiàng)目源碼

xxl-job-core : 核心模塊,公共Jar依賴

xxl-job-executor-samples : 執(zhí)行器,Sample示例項(xiàng)目(大家可以在該項(xiàng)目上進(jìn)行開發(fā),也可以將現(xiàn)有項(xiàng)目改造生成執(zhí)行器項(xiàng)目)

2.2.導(dǎo)入數(shù)據(jù)庫

打開項(xiàng)目代碼,獲取 “調(diào)度數(shù)據(jù)庫初始化SQL腳本” 并執(zhí)行即可。“調(diào)度數(shù)據(jù)庫初始化SQL腳本” 位置為: /xxl-job/doc/db/tables_xxl_job.sql ,數(shù)據(jù)庫名:xxl_job

cb6754ce-8f20-11ee-939d-92fbcf53809c.png

數(shù)據(jù)庫如下

cb6f9670-8f20-11ee-939d-92fbcf53809c.png

xxl_job_lock :任務(wù)調(diào)度鎖表;

xxl_job_group :執(zhí)行器信息表,維護(hù)任務(wù)執(zhí)行器信息;

xxl_job_info :調(diào)度擴(kuò)展信息表:用于保存XXL-JOB調(diào)度任務(wù)的擴(kuò)展信息,如任務(wù)分組、任務(wù)名、機(jī)器地址、執(zhí)行器、執(zhí)行入?yún)⒑蛨?bào)警郵件等等;

xxl_job_log :調(diào)度日志表:用于保存XXL-JOB任務(wù)調(diào)度的歷史信息,如調(diào)度結(jié)果、執(zhí)行結(jié)果、調(diào)度入?yún)?、調(diào)度機(jī)器和執(zhí)行器等等;

xxl_job_log_report :調(diào)度日志報(bào)表:用戶存儲XXL-JOB任務(wù)調(diào)度日志的報(bào)表,調(diào)度中心報(bào)表功能頁面會用到;

xxl_job_logglue :任務(wù)GLUE日志:用于保存GLUE更新歷史,用于支持GLUE的版本回溯功能;

xxl_job_registry :執(zhí)行器注冊表,維護(hù)在線的執(zhí)行器和調(diào)度中心機(jī)器地址信息;

xxl_job_user :系統(tǒng)用戶表;

2.3.啟動調(diào)度中心

打開 xxl-job-admin 的配置文件,/xxl-job/xxl-job-admin/src/main/resources/application.properties 對調(diào)度中心進(jìn)行配置,重要配置如下

server.port : 根據(jù)情況修改端口

spring.datasource.url :指向剛才準(zhǔn)備的數(shù)據(jù)庫

spring.datasource.password : 記得修改成自己的數(shù)據(jù)庫密碼

spring.mail.username :配置自己的郵件賬號

spring.mail.password :郵件的授權(quán)碼,我下面是以qq郵箱為例

下面根據(jù)自己的情況進(jìn)行修改,不要直接復(fù)制

##調(diào)度中心JDBC鏈接:鏈接地址請保持和2.1章節(jié)所創(chuàng)建的調(diào)度數(shù)據(jù)庫的地址一致
spring.datasource.url=jdbc//127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root_pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
##報(bào)警郵箱
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.password=郵箱授權(quán)碼,不是登錄密碼
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
##調(diào)度中心通訊TOKEN [選填]:非空時(shí)啟用;
xxl.job.accessToken=
##調(diào)度中心國際化配置[必填]:默認(rèn)為"zh_CN"/中文簡體,可選范圍為"zh_CN"/中文簡體,"zh_TC"/中文繁體and"en"/英文;
xxl.job.i18n=zh_CN

>基于SpringCloudAlibaba+Gateway+Nacos+RocketMQ+Vue&Element實(shí)現(xiàn)的后臺管理系統(tǒng)+用戶小程序,支持RBAC動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
>
>*項(xiàng)目地址:
>*視頻教程

#調(diào)度線程池最大線程配置【必填】
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
##調(diào)度中心日志表數(shù)據(jù)保存天數(shù)[必填]:過期日志自動清理;限制大于等于7時(shí)生效,否則,如-1,關(guān)閉自動清理功能;
xxl.job.logretentiondays=30

然后啟動調(diào)度中心 ,執(zhí)行 XxlJobAdminApplication#main 方法 , 啟動之后,瀏覽器訪問 http://localhost:18080/xxl-job-admin/jobinfo?jobGroup=2 ;注意URL中有個上下文路徑。默認(rèn)登錄賬號 “admin/123456”, 登錄后運(yùn)行界面如下圖所示。

cb7ee652-8f20-11ee-939d-92fbcf53809c.jpg

2.3.配置部署“執(zhí)行器項(xiàng)目

“執(zhí)行器”項(xiàng)目:xxl-job-executor-sample-springboot (提供多種版本執(zhí)行器供選擇,現(xiàn)以 springboot 版本為例,可直接使用,也可以參考其并將現(xiàn)有項(xiàng)目改造成執(zhí)行器)

作用:負(fù)責(zé)接收“調(diào)度中心”的調(diào)度并執(zhí)行;可直接部署執(zhí)行器,也可以將執(zhí)行器集成到現(xiàn)有業(yè)務(wù)項(xiàng)目中。

修改配置:/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties

xxl.job.admin.addresses : 調(diào)度中心的地址,如果調(diào)度中心修改過端口,這里也要對應(yīng)修改

##調(diào)度中心部署跟地址[選填]:如調(diào)度中心集群部署存在多個地址則用逗號分隔。執(zhí)行器將會使用該地址進(jìn)行"執(zhí)行器心跳注冊"和"任務(wù)結(jié)果回調(diào)";為空則關(guān)閉自動注冊;
xxl.job.admin.addresses=http://127.0.0.1:18080/xxl-job-admin
##執(zhí)行器通訊TOKEN [選填]:非空時(shí)啟用;
xxl.job.accessToken=
##執(zhí)行器AppName [選填]:執(zhí)行器心跳注冊分組依據(jù);為空則關(guān)閉自動注冊
xxl.job.executor.appname=xxl-job-executor-sample
##執(zhí)行器注冊[選填]:優(yōu)先使用該配置作為注冊地址,為空時(shí)使用內(nèi)嵌服務(wù)”IP:PORT“作為注冊地址。從而更靈活的支持容器類型執(zhí)行器動態(tài)IP和動態(tài)映射端口問題。
xxl.job.executor.address=
##執(zhí)行器IP [選填]:默認(rèn)為空表示自動獲取IP,多網(wǎng)卡時(shí)可手動設(shè)置指定IP,該IP不會綁定Host僅作為通訊實(shí)用;地址信息用于"執(zhí)行器注冊"和"調(diào)度中心請求并觸發(fā)任務(wù)";
xxl.job.executor.ip=
##執(zhí)行器端口號[選填]:小于等于0則自動獲?。荒J(rèn)端口為9999,單機(jī)部署多個執(zhí)行器時(shí),注意要配置不同執(zhí)行器端口;
xxl.job.executor.port=9999
##執(zhí)行器運(yùn)行日志文件存儲磁盤路徑[選填]:需要對該路徑擁有讀寫權(quán)限;為空則使用默認(rèn)路徑;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
##執(zhí)行器日志文件保存天數(shù)[選填]:過期日志自動清理, 限制值大于等于3時(shí)生效;否則,如-1, 關(guān)閉自動清理功能;
xxl.job.executor.logretentiondays=30

上面配置是為了在Spring容器中創(chuàng)建一個 XxlJobSpringExecutor 執(zhí)行器Bean,見:com.xxl.job.executor.core.config.XxlJobConfig#xxlJobExecutor

@Bean
publicXxlJobSpringExecutorxxlJobExecutor(){
logger.info(">>>>>>>>>>>xxl-jobconfiginit.");
XxlJobSpringExecutorxxlJobSpringExecutor=newXxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

returnxxlJobSpringExecutor;
}

在com.xxl.job.executor.service.jobhandler.SampleXxlJob中提供了簡單的定時(shí)任務(wù)實(shí)例

為方便用戶參考與快速實(shí)用,示例執(zhí)行器內(nèi)原生提供多個Bean模式任務(wù)Handler,可以直接配置實(shí)用,如下:

demoJobHandler :簡單示例任務(wù),任務(wù)內(nèi)部模擬耗時(shí)任務(wù)邏輯,用戶可在線體驗(yàn)Rolling Log等功能;

shardingJobHandler :分片示例任務(wù),任務(wù)內(nèi)部模擬處理分片參數(shù),可參考熟悉分片任務(wù);

httpJobHandler :通用HTTP任務(wù)Handler;業(yè)務(wù)方只需要提供HTTP鏈接等信息即可,不限制語言、平臺。示例任務(wù)入?yún)⑷缦拢?/p>

/**
*XxlJob開發(fā)示例(Bean模式)
*
*開發(fā)步驟:
*1、在SpringBean實(shí)例中,開發(fā)Job方法,方式格式要求為"publicReturnTexecute(Stringparam)"
*2、為Job方法添加注解"@XxlJob(value="自定義jobhandler名稱", init ="JobHandler初始化方法", destroy ="JobHandler銷毀方法")",注解value值對應(yīng)的是調(diào)度中心新建任務(wù)的JobHandler屬性的值。
* 3、執(zhí)行日志:需要通過"XxlJobLogger.log"打印執(zhí)行日志;
*
*@authorxuxueli2019-12-112151
*/
@Component
publicclassSampleXxlJob{
privatestaticLoggerlogger=LoggerFactory.getLogger(SampleXxlJob.class);
/**
*1、簡單任務(wù)示例(Bean模式)
*/
@XxlJob("demoJobHandler")
publicReturnTdemoJobHandler(Stringparam)throwsException{
logger.info("XXL-JOB,HelloWorld.param={}",param);
returnReturnT.SUCCESS;
}
//...省略...
}

【重要】 如果我們要寫自己的定時(shí)任務(wù),參照上面方法,在方法上注解一個@XxlJob("任務(wù)名字") ,方法可以接受一個字符串參數(shù),方法需要返回ReturnT格式。

最后啟動執(zhí)行器項(xiàng)目.

3.配置定時(shí)任務(wù)

3.1.執(zhí)行器創(chuàng)建

打開調(diào)度中心可視化界面,在執(zhí)行器管理界面,添加新增執(zhí)行器

cb9aec3a-8f20-11ee-939d-92fbcf53809c.png

appName : 執(zhí)行器的名字,可以任意填寫

名稱:任意填寫

注冊方式:調(diào)度中心是通過RPC的方式對執(zhí)行器發(fā)起調(diào)度,所以這里需要的是執(zhí)行器項(xiàng)目的ip:port ,注意,該端口不是執(zhí)行器項(xiàng)目的server.port ,而是:xxl.job.executor.port 端口。你可以選擇自動注冊,也可以手動錄入。

3.2.創(chuàng)建任務(wù)

在 任務(wù)管理 界面,新增任務(wù)

cbb3ad38-8f20-11ee-939d-92fbcf53809c.png

路由策略 :有輪詢,隨機(jī),故障轉(zhuǎn)移等等策略,是用在集群模式下的調(diào)度方式。

cron : 定時(shí)任務(wù)的執(zhí)行時(shí)間規(guī)則,時(shí)間表達(dá)式

JobHandler : 這個是要對應(yīng) “執(zhí)行器項(xiàng)目”中 @XxlJob("demoJobHandler") 注解中的名字

運(yùn)行模式 :Bean ,使用內(nèi)置代碼方式,也可以執(zhí)行在線執(zhí)行代碼方式

報(bào)警郵件 :如果定時(shí)任務(wù)失敗,會發(fā)送報(bào)警郵件到郵箱

任務(wù)參數(shù) :這個參數(shù)可以傳遞給 @XxlJob("demoJobHandler")所在方法的參數(shù)。

創(chuàng)建好任務(wù)之后就可以執(zhí)行了

cbc67fc6-8f20-11ee-939d-92fbcf53809c.png

調(diào)度日志

cbda9d26-8f20-11ee-939d-92fbcf53809c.png

IDEA工具控制臺效果

15:47:33.017logback[Thread-16]INFOc.x.j.e.s.jobhandler.SampleXxlJob-XXL-JOB,HelloWorld.param=
15:47:34.007logback[Thread-16]INFOc.x.j.e.s.jobhandler.SampleXxlJob-XXL-JOB,HelloWorld.param=
15:47:35.008logback[Thread-16]INFOc.x.j.e.s.jobhandler.SampleXxlJob-XXL-JOB,HelloWorld.param=
...省略...

4.GLUE模式(Java)

4.1.添加任務(wù)

該模式支持在線編輯定時(shí)任務(wù)的內(nèi)容,立刻執(zhí)行,無需再開發(fā)工具中編輯代碼,也無需重啟項(xiàng)目。

請點(diǎn)擊任務(wù)右側(cè) “GLUE” 按鈕,進(jìn)入 “GLUE編輯器開發(fā)界面” ,見下圖?!癎LUE模式(Java)” 運(yùn)行模式的任務(wù)默認(rèn)已經(jīng)初始化了示例任務(wù)代碼,即打印Hello World。

cbe14cc0-8f20-11ee-939d-92fbcf53809c.png

任務(wù)以源碼方式維護(hù)在調(diào)度中心,支持通過Web IDE在線更新,實(shí)時(shí)編譯和生效,因此不需要指定JobHandler

4.2.編寫代碼

保存之后可以在操作按鈕里面去編寫任務(wù)

cbe4e2c2-8f20-11ee-939d-92fbcf53809c.png

(“GLUE模式(Java)” 運(yùn)行模式的任務(wù)實(shí)際上是一段繼承自IJobHandler的Java類代碼,它在執(zhí)行器項(xiàng)目中運(yùn)行,可使用@Resource/@Autowire注入執(zhí)行器里中的其他服務(wù)),比如我的定時(shí)任務(wù)如下,編輯好之后點(diǎn)擊保存

cbfb3428-8f20-11ee-939d-92fbcf53809c.png

保存好之后,啟動定時(shí)任務(wù),效果如下

cc1b343a-8f20-11ee-939d-92fbcf53809c.png

三.XXL-JOB集群部署

1.調(diào)度中心集群

1.1.問題概述

調(diào)度中心支持集群部署,提升調(diào)度系統(tǒng)容災(zāi)和可用性。調(diào)度中心集群部署時(shí),幾點(diǎn)要求和建議:

DB配置保持一致;

集群機(jī)器時(shí)鐘保持一致(單機(jī)集群忽視);

當(dāng)啟動多個調(diào)度器時(shí),執(zhí)行器配置調(diào)度中心部署跟地址可以用逗號分隔。執(zhí)行器將會使用該地址進(jìn)行"執(zhí)行器心跳注冊"和"任務(wù)結(jié)果回調(diào)";為空則關(guān)閉自動注冊;

但是建議:推薦通過nginx為調(diào)度中心集群做負(fù)載均衡,分配域名。調(diào)度中心訪問、執(zhí)行器回調(diào)配置、調(diào)用API服務(wù)等操作均通過該域名進(jìn)行。

1.2.啟動多個調(diào)度中心

修改調(diào)度中心端口,啟動多個調(diào)度中心,

1.3.配置Nginx負(fù)載均衡

當(dāng)啟動多個調(diào)度器時(shí),執(zhí)行器配置調(diào)度中心部署跟地址可以用逗號分隔。執(zhí)行器將會使用該地址進(jìn)行“執(zhí)行器心跳注冊”和“任務(wù)結(jié)果回調(diào)”;為空則關(guān)閉自動注冊;

但是建議:推薦通過nginx為調(diào)度中心集群做負(fù)載均衡,分配域名。調(diào)度中心訪問、執(zhí)行器回調(diào)配置、調(diào)用API服務(wù)等操作均通過該域名進(jìn)行。

我們啟動了2個調(diào)度中心,那么我的執(zhí)行器項(xiàng)目該注冊到哪個調(diào)度中心呢?我們通過Nginx來解決這個問題,原理如下圖:

cc2ad57a-8f20-11ee-939d-92fbcf53809c.png

我們再hosts配置 www.jobs.com作為nginx的主機(jī)域名,然后反向代理到多個調(diào)度中心,這樣一來執(zhí)行器就只需要注冊到www.jobs.com Nginx即可。

修改 C:WindowsSystem32driversetchosts增加配置如下

127.0.0.1www.jobs.com

Nginx配置如下

#調(diào)度中心
upstreamjobs{
serverlocalhost:18080;
serverlocalhost:18081;
}

server{
listen80;
#使用域名
server_namewww.jobs.com;

#charsetkoi8-r;

#access_loglogs/host.access.logmain;

location/{
#調(diào)度中心反向代理配置
proxy_passhttp://jobs/;
}

#error_page404/404.html;

#redirectservererrorpagestothestaticpage/50x.html
#
error_page500502503504/50x.html;
location=/50x.html{
roothtml;
}


}

2.執(zhí)行器項(xiàng)目集群

執(zhí)行器支持集群部署,提升調(diào)度系統(tǒng)可用性,同時(shí)提升任務(wù)處理能力。

執(zhí)行器集群部署時(shí),幾點(diǎn)要求和建議:

執(zhí)行器回調(diào)地址(xxl.job.admin.addresses)需要保持一致;執(zhí)行器根據(jù)該配置進(jìn)行執(zhí)行器自動注冊等操作。

同一個執(zhí)行器集群內(nèi)AppName(xxl.job.executor.appname)需要保持一致;調(diào)度中心根據(jù)該配置動態(tài)發(fā)現(xiàn)不同集群的在線執(zhí)行器列表。

2.1.啟動多個執(zhí)行器項(xiàng)目

現(xiàn)在對執(zhí)行器項(xiàng)目做集群,修改xxl-job-executor-sample-springboot配置文件application.properties

server.port : 既然是做集群,項(xiàng)目端口需要修改

xxl.job.admin.addresses : 調(diào)度中心地址需要修改成www.jobs.com ,多個執(zhí)行器配置同一個地址。

xxl.job.executor.port : RPC通信端口也要修改,多個執(zhí)行器該端口需要不一樣

第一個實(shí)例配置

server.port=19090
xxl.job.admin.addresses=http://www.jobs.com/xxl-job-admin#對應(yīng)Nginx地址
xxl.job.executor.port=9999

第二個實(shí)例配置

server.port=19091
xxl.job.admin.addresses=http://www.jobs.com/xxl-job-admin
xxl.job.executor.port=9998

在 Configurations中配置,允許啟動多個實(shí)例

cc3a78c2-8f20-11ee-939d-92fbcf53809c.png

啟動實(shí)例如下

cc46fcfa-8f20-11ee-939d-92fbcf53809c.png

2.2.配置定時(shí)任務(wù)

通過http://www.jobs.com/xxl-job-admin 訪問調(diào)度中心管理界面,在執(zhí)行器管理中可以看到多臺執(zhí)行器實(shí)例

cc879008-8f20-11ee-939d-92fbcf53809c.png

在任務(wù)管理中,可以編輯任務(wù),然后選擇路由策略,比如:選擇輪詢,然后啟動任務(wù),就會看到兩個執(zhí)行器項(xiàng)目輪著執(zhí)行定時(shí)任務(wù)。

cc9b1484-8f20-11ee-939d-92fbcf53809c.png

說在最后

xxl-job確實(shí)很強(qiáng)大,功能也很全,經(jīng)過該文章學(xué)習(xí)相信你可以把xxl-job給用起來了,但是如果你的項(xiàng)目是一個小體量的單體,我不太建議使用它,Quzrtz或者SpringBoot Task就足夠 ,對于xxl-job個人還是有些笨重。








審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Hash算法
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    7481
  • 調(diào)度器
    +關(guān)注

    關(guān)注

    0

    文章

    98

    瀏覽量

    5407

原文標(biāo)題:分布式定時(shí)調(diào)度:xxl-job 最佳實(shí)踐

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    幾款國產(chǎn)開源分布式任務(wù)調(diào)度系統(tǒng)

    互聯(lián)網(wǎng)分布式任務(wù)調(diào)度工具
    發(fā)表于 05-06 16:29

    分布式_Job》——定時(shí)XXL_JOB_使用總結(jié)

    分布式_Job》——定時(shí)XXL_JOB_使用總結(jié)
    發(fā)表于 07-08 17:56

    運(yùn)行調(diào)度中心后訪問出現(xiàn)500錯誤怎么解決

    XXL-Job 訪問調(diào)度中心出現(xiàn) 500 應(yīng)用程序異常
    發(fā)表于 11-08 09:39

    關(guān)于XXL-JOB定時(shí)調(diào)度器的使用總結(jié)

    XXL-JOB 定時(shí)調(diào)度器 使用小結(jié)
    發(fā)表于 04-23 14:53

    HarmonyOS應(yīng)用開發(fā)-分布式任務(wù)調(diào)度

    ,體驗(yàn)HarmonyOS的分布式任務(wù)調(diào)度。您將建立什么在這個CodeLab中,你將創(chuàng)建DemoProject,并將Demo編譯成HAP,此示例應(yīng)用程序展示了如何使用分布式任務(wù)調(diào)度。您將
    發(fā)表于 09-18 09:21

    鴻蒙分布式任務(wù)調(diào)度

    鴻蒙分布式任務(wù)調(diào)度,實(shí)現(xiàn)跨設(shè)備FA拉起
    發(fā)表于 06-12 17:28

    鴻蒙分布式任務(wù)調(diào)度——數(shù)據(jù)傳遞

    鴻蒙分布式任務(wù)調(diào)度之?dāng)?shù)據(jù)傳遞
    發(fā)表于 06-12 17:29

    【學(xué)習(xí)打卡】OpenHarmony的分布式任務(wù)調(diào)度

    之前我們分享過分布式軟總線和分布式數(shù)據(jù)管理,今天主要說一下OpenHarmony的分布式任務(wù)調(diào)度,分布式任務(wù)
    發(fā)表于 07-18 17:06

    分布式系統(tǒng)進(jìn)程調(diào)度方法研究

    針對故障診斷系統(tǒng)的特點(diǎn),基于分布式系統(tǒng)整體性能最優(yōu),設(shè)計(jì)出適合分布式進(jìn)程調(diào)度、滿足航天器故障診斷需求的分布式多進(jìn)程調(diào)度結(jié)構(gòu)。
    發(fā)表于 02-22 11:15 ?5次下載
    <b class='flag-5'>分布式</b>系統(tǒng)進(jìn)程<b class='flag-5'>調(diào)度</b><b class='flag-5'>方法</b>研究

    分布式調(diào)度子系統(tǒng)--初步研究

    分布式調(diào)度子系統(tǒng) -- 初步研究 ? 1.? 總體描述 1.1.? 總體介紹 分布式任務(wù)調(diào)度基于分布式軟總線、
    發(fā)表于 10-24 12:12 ?1956次閱讀
    <b class='flag-5'>分布式</b><b class='flag-5'>調(diào)度</b>子系統(tǒng)--初步研究

    什么是定時(shí)任務(wù) xxl-job架構(gòu)設(shè)計(jì)方案

    同一個執(zhí)行器集群內(nèi)AppName(xxl.job.executor.appname)需要保持一致;調(diào)度中心根據(jù)該配置動態(tài)發(fā)現(xiàn)不同集群的在線執(zhí)行器列表。
    發(fā)表于 11-14 12:44 ?1646次閱讀

    xxl-job驚艷的設(shè)計(jì),怎能叫人不愛

    xxl-job 定義了兩個接口 ExecutorBiz,AdminBiz,ExecutorBiz 接口中封裝了向心跳,暫停,觸發(fā)執(zhí)行等操作,AdminBiz 封裝了回調(diào),注冊,取消注冊操作,接口的實(shí)現(xiàn)類中,并沒有通信相關(guān)的處理。
    的頭像 發(fā)表于 12-22 14:43 ?908次閱讀

    xxl-job任務(wù)調(diào)度中間件解決定時(shí)任務(wù)的調(diào)度問題

    xxl-job是一款非常優(yōu)秀的任務(wù)調(diào)度中間件,輕量級、使用簡單、支持分布式等優(yōu)點(diǎn),讓它廣泛應(yīng)用在我們的項(xiàng)目中,解決了不少定時(shí)任務(wù)的調(diào)度問題。
    的頭像 發(fā)表于 01-31 09:53 ?2372次閱讀

    鴻蒙OS 分布式任務(wù)調(diào)度

    鴻蒙OS 分布式任務(wù)調(diào)度概述 在 HarmonyO S中,分布式任務(wù)調(diào)度平臺對搭載 HarmonyOS 的多設(shè)備構(gòu)筑的“超級虛擬終端”提供統(tǒng)一的組件管理能力,為應(yīng)用定義統(tǒng)一的能力基線、
    的頭像 發(fā)表于 01-29 16:50 ?676次閱讀

    基于Flexus X加速M(fèi)ySQL鏡像搭建XXL-JOB任務(wù)調(diào)度平臺

    平臺,展示如何利用 Flexus X 的高性能特性提升任務(wù)調(diào)度的效率和穩(wěn)定性。通過詳細(xì)的步驟和配置,幫助大家可以快速掌握在 Flexus X 上部署和運(yùn)行 XXL-JOB方法,并將其應(yīng)用于實(shí)際項(xiàng)目中。
    的頭像 發(fā)表于 12-29 15:45 ?320次閱讀
    基于Flexus X加速M(fèi)ySQL鏡像搭建<b class='flag-5'>XXL-JOB</b>任務(wù)<b class='flag-5'>調(diào)度</b>平臺
    主站蜘蛛池模板: 午夜色大片 | 校园春色亚洲欧美 | 日本黄色免费网址 | 一女被多男玩很肉很黄文 | 视频在线二区 | 最新地址四虎www4hutv | 欧美性猛交xxxx免费 | 日韩一二三级 | 真实一级一级一片免费视频 | 午夜黄网站 | 午夜视频一区二区 | 久久噜国产精品拍拍拍拍 | 老熟女毛片 | 久久国产乱子伦精品免费午夜 | 关晓彤被调教出奶水的视频 | 成人欧美一区二区三区视频不卡 | 亚洲插插| 爱爱免费视频 | 天堂资源在线8 | 午夜 dy888理论久久 | 二级片在线| 黄色免费看视频 | 直接看黄的网站 | 男女爱爱爽爽福利免费视频 | 国产精品自线在线播放 | 久久亚洲精品成人综合 | 在线电影天堂 | 色多多www | 四虎国产永久免费久久 | 伊人网网 | 色玖玖| 天天操天天做 | 欧美性黑人十极品hd | 日韩黄色免费 | 亚洲免费影视 | 日本三级黄色网址 | 久久狠狠第一麻豆婷婷天天 | 草久视频在线观看 | av基地| 双性人皇上被c到哭 | 国产精品偷伦费观看 |