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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.1.遇到什么問題

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

二.XXL-JOB初體驗

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

1.1.設(shè)計思想

將調(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)定性和擴展性;

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

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)定性,同時調(diào)度系統(tǒng)性能不再受限于任務(wù)模塊;

支持可視化、簡單且動態(tài)的管理調(diào)度信息,包括任務(wù)新建,更新,刪除,GLUE開發(fā)和任務(wù)報警等,所有上述操作都會實時生效,同時支持監(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)行定時任務(wù)調(diào)度時,會在各個節(jié)點會上報任務(wù),存到數(shù)據(jù)庫中,執(zhí)行時會從數(shù)據(jù)庫中取出觸發(fā)器來執(zhí)行,如果觸發(fā)器的名稱和執(zhí)行時間相同,則只有一個節(jié)點去執(zhí)行此任務(wù)。

并行調(diào)度

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

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

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

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

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

2.xxl-job安裝

2.1.下載源碼

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

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

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

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

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

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

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

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

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

打開項目代碼,獲取 “調(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)度擴展信息表:用于保存XXL-JOB調(diào)度任務(wù)的擴展信息,如任務(wù)分組、任務(wù)名、機器地址、執(zhí)行器、執(zhí)行入?yún)⒑蛨缶]件等等;

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

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

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

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

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
##報警郵箱
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 [選填]:非空時啟用;
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實現(xiàn)的后臺管理系統(tǒng)+用戶小程序,支持RBAC動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
>
>*項目地址:
>*視頻教程

#調(diào)度線程池最大線程配置【必填】
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
##調(diào)度中心日志表數(shù)據(jù)保存天數(shù)[必填]:過期日志自動清理;限制大于等于7時生效,否則,如-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”, 登錄后運行界面如下圖所示。

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

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

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

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

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

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

demoJobHandler :簡單示例任務(wù),任務(wù)內(nèi)部模擬耗時任務(wù)邏輯,用戶可在線體驗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實例中,開發(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;
}
//...省略...
}

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

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

3.配置定時任務(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í)行器項目的ip:port ,注意,該端口不是執(zhí)行器項目的server.port ,而是:xxl.job.executor.port 端口。你可以選擇自動注冊,也可以手動錄入。

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

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

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

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

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

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

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

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

任務(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ù)

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

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

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

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

4.2.編寫代碼

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

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

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

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

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

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

三.XXL-JOB集群部署

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

1.1.問題概述

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

DB配置保持一致;

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

當(dāng)啟動多個調(diào)度器時,執(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)度器時,執(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í)行器項目該注冊到哪個調(diào)度中心呢?我們通過Nginx來解決這個問題,原理如下圖:

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

我們再hosts配置 www.jobs.com作為nginx的主機域名,然后反向代理到多個調(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í)行器項目集群

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

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

執(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àn)在對執(zhí)行器項目做集群,修改xxl-job-executor-sample-springboot配置文件application.properties

server.port : 既然是做集群,項目端口需要修改

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

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

第一個實例配置

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

第二個實例配置

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

在 Configurations中配置,允許啟動多個實例

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

啟動實例如下

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

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

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

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

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

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

說在最后

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








審核編輯:劉清

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

    關(guān)注

    0

    文章

    43

    瀏覽量

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

    關(guān)注

    0

    文章

    98

    瀏覽量

    5466

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

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(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》——定時XXL_JOB_使用總結(jié)

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

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

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

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

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

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

    ,體驗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)度,實現(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)的特點,基于分布式系統(tǒng)整體性能最優(yōu),設(shè)計出適合分布式進(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 ?2008次閱讀
    <b class='flag-5'>分布式</b><b class='flag-5'>調(diào)度</b>子系統(tǒng)--初步研究

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

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

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

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

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

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

    鴻蒙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 ?824次閱讀

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

    平臺,展示如何利用 Flexus X 的高性能特性提升任務(wù)調(diào)度的效率和穩(wěn)定性。通過詳細(xì)的步驟和配置,幫助大家可以快速掌握在 Flexus X 上部署和運行 XXL-JOB方法,并將其應(yīng)用于實際項目中。
    的頭像 發(fā)表于 12-29 15:45 ?406次閱讀
    基于Flexus X加速MySQL鏡像搭建<b class='flag-5'>XXL-JOB</b>任務(wù)<b class='flag-5'>調(diào)度</b>平臺
    主站蜘蛛池模板: 扒开双腿疯狂进出爽爽爽 | 欧美五月 | 综合激情五月婷婷 | 国产三级黄色录像 | 欧美日韩一区视频 | 亚洲一级免费毛片 | 免费又黄又爽的禁片视频 | 日本一卡二卡3卡四卡网站精品 | 91久久另类重口变态 | 国产美女在线免费观看 | 手机看片久久青草福利盒子 | 亚洲国产成人久久笫一页 | 色婷婷一区二区三区四区成人 | 日本一区二区视频在线观看 | 美国bj69video18 | 性做久久久久 | 久久精品亚洲一级毛片 | 在线一级毛片 | 狠狠狠狼鲁欧美综合网免费 | 天天摸天天躁天天添天天爽 | 欧美精品一区视频 | 色天天综合久久久久综合片 | 在线观看黄的网站 | 五月激情啪啪 | 亚洲精品日韩专区silk | 精品一区二区三区免费爱 | 国产真实偷乱视频在线观看 | 深夜视频免费在线观看 | 天天做天天爽爽快快 | 天天综合天天色 | 午夜色大片 | 狠狠狠狠狠狠狠狠 | 四虎午夜剧场 | 日本xxxxbbbb| 香港经典a毛片免费观看爽爽影院 | 在线看你懂得 | 狠狠插狠狠插 | 黄色福利网 | 天堂精品视频 | 日xxxx| 农村三级毛片 |