【XXL-JOB】XXL-JOB的搭建和使用
【XXL-JOB】XXL-JOB的搭建和使用
文章目錄
- 【XXL-JOB】XXL-JOB的搭建和使用
- 1. 任務調度
- 1.1 實現任務調度
- 1.1.1 多線程實現
- 1.1.2 Timer實現
- 1.1.3 ScheduledExecutor實現
- 2. 分布式任務調度
- 2.1 采用分布式的原因
- 3. XXL-JOB
- 3.1 XXL-JOB介紹
- 3.2 執行流程
- 4. 搭建XXL-JOB
- 4.1 創建數據庫
- 4.2 導入依賴,配置執行器
- 4.3 調度中心配置
- 4.4 執行任務
- 4.5 查看日志
- 4.6 停止任務
1. 任務調度
任務調度:顧名思義,就是對任務的調度,它是指系統為了完成特定業務,基于給定時間點,給定時間間隔或者給定執行次數自動執行任務。
那么,我們如何去高效的處理一批任務呢?這里有兩種方案:
方案2的可擴展性更強,這是一種分布式任務調度的處理方案。
那么什么又是分布式任務調度呢?
給定多個場景:
- 某電商系統需要在每天上午10點,下午3點,晚上8點發放一批優惠券。
- 某財務系統需要在每天上午10點前結算前一天的賬單數據,統計匯總。
- 某電商平臺每天凌晨3點,要對訂單中的無效訂單進行清理。
- 12306網站會根據車次不同,設置幾個時間點分批次放票。
- 。。。。。。
以上這些問題,就是任務調度需要解決的問題。
1.1 實現任務調度
1.1.1 多線程實現
我們可以開啟一個線程,每隔一段時間就去執行一個任務。
如下代碼所示:
這個程序的功能是每隔1s,執行一次。
public static void main(String[] args) { //任務執行間隔時間final long timeInterval = 1000;Runnable runnable = new Runnable() {public void run() {while (true) {//TODO:somethingtry {Thread.sleep(timeInterval);} catch (InterruptedException e) {e.printStackTrace();}}}};Thread thread = new Thread(runnable);thread.start(); }Jdk也為我們提供了相關支持,如Timer、ScheduledExecutor。
1.1.2 Timer實現
如下代碼的功能是1s之后開始調度,并且每隔2s執行一次。
public static void main(String[] args){ Timer timer = new Timer(); timer.schedule(new TimerTask(){@Override public void run() { //TODO:something} }, 1000, 2000); //1秒后開始調度,每2秒執行一次 }Timer 的優點在于簡單易用,每個Timer對應一個線程,因此可以同時啟動多個Timer并行執行多個任務,同一個Timer中的任務是串行執行。
1.1.3 ScheduledExecutor實現
public static void main(String [] agrs){ScheduledExecutorService service = Executors.newScheduledThreadPool(10);service.scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {//TODO:somethingSystem.out.println("todo something");}}, 1,2, TimeUnit.SECONDS); }Java 5 推出了基于線程池設計的 ScheduledExecutor,其設計思想是,每一個被調度的任務都會由線程池中一個線程去執行,因此任務是并發執行的,相互之間不會受到干擾。
2. 分布式任務調度
通常任務調度的程序是集成在應用中的,比如:優惠卷服務中包括了定時發放優惠卷的的調度程序,結算服務中包括了定期生成報表的任務調度程序,由于采用分布式架構,一個服務往往會部署多個冗余實例來運行我們的業務,在這種分布式系統環境下運行任務調度,我們稱之為分布式任務調度。
如下圖:
2.1 采用分布式的原因
不管是任務調度程序集成在應用程序中,還是單獨構建的任務調度系統,如果采用分布式調度任務的方式就相當于將任務調度程序分布式構建,這樣就可以具有分布式系統的特點,并且提高任務的調度處理能力。
所以分布式調度要實現的目標是:
注:第五點尤為重要。
3. XXL-JOB
3.1 XXL-JOB介紹
XXL-JOB是一個輕量級分布式任務調度平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼并接入多家公司線上產品線,開箱即用。
官網:XXL-JOB
文檔:XXL-JOB文檔
XXL-JOB主要有調度中心、執行器、任務:
- 調度中心:
- 負責管理調度信息,按照調度配置發出調度請求,自身不承擔業務代碼
- 主要職責為執行器管理、任務管理、監控運維、日志管理等
- 執行器:
- 負責接收調度請求并執行任務邏輯
- 主要職責是注冊服務、任務執行服務(接收到任務后會放入線程池中的任務隊列)、執行結果上報、日志服務等
- 任務:
- 負責執行具體的業務處理。
3.2 執行流程
調度中心與執行器之間的工作流程如下:
執行流程:
4. 搭建XXL-JOB
首先下載XXL-JOB:
- GitHub:https://github.com/xuxueli/xxl-job
- Gitee:https://gitee.com/xuxueli0323/xxl-job
下載后使用idea打開項目:
項目模塊有三個:
- xxl-job-admin:調度中心
- xxl-job-core:項目的核心包
- xxl-job-executor-samples:執行器示例代碼(可參考)
- xxl-job-executor-sample-springboot:Springboot版本,通過Springboot管理執行器,推薦這種方式;
- xxl-job-executor-sample-frameless:無框架版本;
- doc:文檔資料,包含數據庫腳本
4.1 創建數據庫
創建數據庫,并導入doc文檔中的數據庫腳本:
導入成功之后,運行xxl-job-admin項目,登陸賬號為:admin,密碼為:123456
4.2 導入依賴,配置執行器
1)導入依賴
在我們需要執行任務調度的模塊中導入如下依賴:
<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId> </dependency>2)yml配置
在配置文件(可以在nacos或本地文件)中配置:
xxl:job:admin: addresses: http://localhost:8080/xxl-job-adminexecutor:appname: media-process-service #執行器名字(很重要,在調度中心要用到)address: ip: port: 9999 #執行器端口號logpath: /data/applogs/xxl-job/jobhandlerlogretentiondays: 30accessToken: default_token3)配置xxl-job的執行器
將示例工程下的配置類拷貝到自己的service工程下:
4.3 調度中心配置
進入調度中心添加執行器:
點擊新增,彈出如下對話框:
圖中的 AppName 填我們上面配置文件中配置的執行器名字,名稱隨意。其他的可以不填。
填寫完畢之后點擊保存。
重新運行我們的項目,如果控制臺中輸出如下內容說明執行器在調度中心注冊成功:
同時,我們可以在調度中心中查看到執行器的地址:
4.4 執行任務
我們復制示例工程中的 SampleXxjJob 到我們的項目中:
我們刪除部分代碼,只留如下代碼(任務代碼):
@Component public class SampleXxlJob {private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);/*** 1、簡單任務示例(Bean模式)*/@XxlJob("demoJobHandler")//記住這個名字,后面要使用public void demoJobHandler() throws Exception {XxlJobHelper.log("XXL-JOB, Hello World.");for (int i = 0; i < 5; i++) {XxlJobHelper.log("beat at:" + i);TimeUnit.SECONDS.sleep(2);}// default success} }1)在調度中心添加任務
進入調度中心,在任務管理中新增任務:
點擊新增,填寫任務信息:
注意紅色標記處:
調度類型選擇Cron,并配置Cron表達式設置定時策略。
Cron表達式是一個字符串,通過它可以定義調度策略,格式如下:
{秒數} {分鐘} {小時} {日期} {月份} {星期} {年份(可為空)}
xxl-job提供圖形界面去配置:
運行模式有BEAN和GLUE,bean模式較常用就是在項目工程中編寫執行器的任務代碼,GLUE是將任務代碼編寫在調度中心。
JobHandler任務方法名填寫@XxlJob注解中的名稱。
添加成功后,啟動任務。
4.5 查看日志
點擊左側菜單欄“調度日志”即可查看任務執行情況:
任務執行了一段之間要注意清理日志,點擊右上角的“清理”按鈕即可。
4.6 停止任務
如果想要停止任務,需要在調度中心中操作:
總結
以上是生活随笔為你收集整理的【XXL-JOB】XXL-JOB的搭建和使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 低压差DC-DC 小体积5V转3.3V
- 下一篇: python lackey