分散式環境下建立定時任務排程實踐

前言

Hi,大家好,我是希留。

上一篇文章我們介紹了建立定時任務的幾種方式

,建立定時任務的幾種方式,你還不會?

介紹了在分散式環境下使用quartz框架建立定時任務排程,但是這種方式有明顯的弊端,雖然Quartz可以基於資料庫實現作業的高可用,但缺少分散式並行排程的功能,且沒有解決任務分片的問題,不能實現水平擴充套件。不適合大型分散式專案使用。

本篇文章向大家介紹一下在分散式環境中的另一種建立方式,使用xxl-job框架建立定時任務排程。如果對你有幫助的話,還不忘點贊轉發支援一下,感謝!文末附有原始碼

目錄

一、xxl-job簡介

二、使用步驟

三、總結

一、xxl-job簡介

1、xxl-job

xxl-job是一個輕量級分散式任務排程框架 。其核心設計目標是開發迅速、學習簡單、輕量級、易擴充套件,主要分為排程中心和執行器兩部分,排程中心在啟動初始化的時候,會預設生成執行器的RPC代理物件(http協議呼叫), 執行器專案啟動之後,排程中心在觸發定時器之後透過jobHandle來呼叫執行器專案裡面的程式碼。

優點:輕量級,支援叢集部署,有完整的圖形管理介面,支援彈性擴容、分佈廣播、故障轉移等等高階功能。

缺點:排程中心透過獲取DB鎖來保證叢集中執行任務的唯一性,如果短任務很多,隨著排程中心叢集數量的增加,那麼資料庫的鎖競爭加大,導致效能下降。

分散式環境下建立定時任務排程實踐

二、使用步驟

1、下載原始碼匯入

Github下載地址:https://github。com/xuxueli/xxl-job/

Gitee下載地址:https://gitee。com/xuxueli0323/xxl-job

分散式環境下建立定時任務排程實踐

2、執行sql

執行db下的sql指令碼

分散式環境下建立定時任務排程實踐

3、修改xxl-job-admin專案配置

修改admin專案的資料庫配置,改成自己的資料庫連線,預設的埠號是8080,也可以修改合適的埠號,我把埠改成了8002。

分散式環境下建立定時任務排程實踐

4、啟動admin專案

訪問 http://localhost:8002/xxl-job-admin/

賬號密碼:admin / 123456

分散式環境下建立定時任務排程實踐

至此,任務排程中心就搭建好了。

5、自建一個任務示例demo專案

5。1 新增pom依賴

建立一個SpringBoot專案,新增xxl-job依賴

<!—— xxl-job-core 版本號根據自己下載的版本修改 ——> com。xuxueli xxl-job-core 2。3。0

5。2 日誌配置

新增日誌配置檔案

分散式環境下建立定時任務排程實踐

<?xml version=“1。0” encoding=“UTF-8”?> logback %d{HH:mm:ss。SSS} %contextName [%thread] %-5level %logger{36} - %msg%n ${log。path} ${log。path}。%d{yyyy-MM-dd}。zip %date %level [%thread] %logger{36} [%file : %line] %msg%n

5。3 properties檔案修改

application。properties 加入配置

需修改或自定義

xxl-job admin 地址

xxl。job。executor。appname 自定義名稱,後臺配置必須對應

xxl。job。executor。ip 當前電腦Ip,或部署專案的電腦Ip

xxl。job。executor。port 埠

# 埠號server。port=8081# 日誌logging。config=classpath:logback。xml### xxl-job admin 地址,多個逗號分隔“xxl。job。admin。addresses=http://127。0。0。1:8002/xxl-job-admin### xxl-job名稱 || socket ip 當前專案部署的ip地址/本機ip || socket 埠號xxl。job。executor。appname=xxl-job-executor-demoxxl。job。executor。ip=127。0。0。1xxl。job。executor。port=9999### xxl-job, access tokenxxl。job。accessToken=### xxl-job log pathxxl。job。executor。logpath=/data/applogs/xxl-job/jobhandler### xxl-job log retention daysxxl。job。executor。logretentiondays=-1

5。4 新增pom依賴

@Configurationpublic class XxlJobConfig { Logger logger = LoggerFactory。getLogger(XxlJobConfig。class); @Value(”${xxl。job。admin。addresses}“) private String adminAddresses; @Value(”${xxl。job。executor。appname}“) private String appName; @Value(”${xxl。job。executor。ip}“) private String ip; @Value(”${xxl。job。executor。port}“) private int port; @Value(”${xxl。job。accessToken}“) private String accessToken; @Value(”${xxl。job。executor。logpath}“) private String logPath; @Value(”${xxl。job。executor。logretentiondays}“) private int logRetentionDays; @Bean(initMethod = ”start“, destroyMethod = ”destroy“) public XxlJobSpringExecutor xxlJobExecutor() { logger。info(”>>>>>>>>>>> xxl-job xxljob。config init。“); XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); xxlJobSpringExecutor。setAdminAddresses(adminAddresses); xxlJobSpringExecutor。setAppname(appName); xxlJobSpringExecutor。setIp(ip); xxlJobSpringExecutor。setPort(port); xxlJobSpringExecutor。setAccessToken(accessToken); xxlJobSpringExecutor。setLogPath(logPath); xxlJobSpringExecutor。setLogRetentionDays(logRetentionDays); logger。info(ip+”:“+port); return xxlJobSpringExecutor; }}

5。5 新增pom依賴

@Componentpublic class DemoJobHandler { static int count = 0; @XxlJob(”demoJobHandler“) public void execute(String param) throws Exception { System。out。println(”hello,demoJobHandler執行job任務“+ count++); }}

6、admin後臺配置

開啟admin後臺管理介面,進行相關任務配置。

先新增一個執行器

分散式環境下建立定時任務排程實踐

在任務管理裡新建一個任務,配置對應要執行的時間策略。我配置的是一個每5秒執行一次的策略。

分散式環境下建立定時任務排程實踐

配置完成後,點選啟動

分散式環境下建立定時任務排程實踐

可以在示例demo專案的控制檯成功輸出job被執行的日誌,大功告成。

分散式環境下建立定時任務排程實踐

結語

好了,以上就是今天要講的內容,本文介紹了使用分散式任務排程平臺xxl-job建立任務排程的實踐。感謝大家的閱讀,喜歡的朋友,歡迎點贊轉發支援一下。