前言
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 版本號根據自己下載的版本修改 ——>
5。2 日誌配置
新增日誌配置檔案
<?xml version=“1。0” encoding=“UTF-8”?>
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建立任務排程的實踐。感謝大家的閱讀,喜歡的朋友,歡迎點贊轉發支援一下。