日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

探索xxl-job

發布時間:2024/1/18 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 探索xxl-job 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

xxl-job是一個分布式的任務調度平臺,其核心設計目標是:學習簡單、開發迅速、輕量級、易擴展,現在已經開放源代碼并接入多家公司的線上產品線,開箱即用。xxl是xxl-job的開發者大眾點評的許雪里名稱的拼音開頭。

? xxl-job框架主要用于處理分布式的定時任務,其主要由調度中心和執行器組成。

調度模塊(調度中心):
負責管理調度信息,按照調度配置發出調度請求,自身不承擔業務代碼。調度系統與任務解耦,提高了系統可用性和穩定性,同時調度系統性能不再受限于任務模塊;
支持可視化、簡單且動態的管理調度信息,包括任務新建,更新,刪除,GLUE開發和任務報警等,所有上述操作都會實時生效,同時支持監控調度結果以及執行日志,支持執行器Failover。
執行模塊(執行器):
負責接收調度請求并執行任務邏輯。任務模塊專注于任務的執行等操作,開發和維護更加簡單和高效;
接收“調度中心”的執行請求、終止請求和日志請求等。

原理概述

1.執行器的注冊和發現
執行器的注冊和發現主要是關系兩張表:
xxl_job_registry:執行器的實例表,保存實例信息和心跳信息,xxl_job_group:每個服務注冊的實例列表。
執行器啟動線程每隔30秒向注冊表xxl_job_registry請求一次,更新執行器的心跳信息,調度中心啟動線程每隔30秒檢測一次xxl_job_registry,將超過90秒還沒有收到心跳的實例信息從xxl_job_registry刪除,并更新xxl_job_group服務的實例列表信息。
2.調度中心調用執行器
調度中心的操作:
調度中心通過循環不停的:
①關閉自動提交事務
②利用mysql的悲觀鎖,其他事務無法進入
3.讀取數據庫中的xxl_job_info:記錄定時任務的相關信息,該表中有trigger_next_time字段表示下一次任務的觸發時間。拿到距離當前時間5s內的任務列表。
①對于當前時間-任務的下一次觸發時間>5,直接調過不執行,重置trigger_next_time的時間。(超過5s)
②對于任務的下一次觸發時間<當前時間<任務的下一次觸發時間+5的任務(不超過5s的)
③對于任務的下一次觸發時間>當前時間,將其放入時間輪中,根據任務下一次觸發時間更新下下一次任務觸發時間。
4.commit提交事務,同時釋放排他鎖
執行器的操作:
①執行器接收到調度中心的調度信息,將調度信息放到對應的任務的等待隊列中
②執行器的任務處理線程從任務隊列中取出調度信息,執行業務邏輯,將結果放入一個公共的等待隊列中(每個任務都有一個單獨的處理線程和等待隊列,任務信息放入該隊列中)
③執行器有一個專門的回調線程定時批量從結果隊列中取出任務結果,并且回調告知調度中心。

路由策略

共有如下幾種路由策略,保證在分布式集群的項目中,保證同時只能有一個定時任務會被觸發:
其中,執行器的順序是執行器在注冊時的先后順序。

阻塞策略

使用xxl-job

1.準備階段:https://github.com/xuxueli/xxl-job
中心倉庫配置地址:

<!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ --> <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>${最新穩定版本}</version> </dependency>

2.代碼下載解壓,結果如下:

文件介紹:
①doc :文檔資料
②xxl-job-admin :調度中心,項目源碼
③xxl-job-core :公共Jar依賴
④xxl-job-executor-samples :執行器,Sample示例項目
MySQL表介紹:

- xxl_job_group:執行器信息表,維護任務執行器信息;- xxl_job_info:調度擴展信息表: 用于保存XXL-JOB調度任務的擴展信息,如任務分組、任務名、機器地址、執行器、執行入參和報警郵件等等;- xxl_job_lock:任務調度鎖表;- xxl_job_log:調度日志表: 用于保存XXL-JOB任務調度的歷史信息,如調度結果、執行結果、調度入參、調度機器和執行器等等;- xxl_job_log_report:調度日志報表:用戶存儲XXL-JOB任務調度日志的報表,調度中心報表功能頁面會用到;- xxl_job_logglue:任務GLUE日志:用于保存GLUE更新歷史,用于支持GLUE的版本回溯功能;- xxl_job_registry:執行器注冊表,維護在線的執行器和調度中心機器地址信息;- xxl_job_user:系統用戶表;

3.調度中心配置
調度中心配置文件地址:/xxl-job/xxl-job-admin/src/main/resources/application.properties

### 調度中心JDBC鏈接 spring.datasource.url=jdbc:mysql://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 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=xxx 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 ### 調度中心通訊TOKEN [選填]:非空時啟用; xxl.job.accessToken= ### 調度中心國際化配置 [必填]: 默認為 "zh_CN"/中文簡體, 可選范圍為 "zh_CN"/中文簡體, "zh_TC"/中文繁體 and "en"/英文; xxl.job.i18n=zh_CN ## 調度線程池最大線程配置【必填】 xxl.job.triggerpool.fast.max=200 xxl.job.triggerpool.slow.max=100 ### 調度中心日志表數據保存天數 [必填]:過期日志自動清理;限制大于等于7時生效,否則, 如-1,關閉自動清理功能; xxl.job.logretentiondays=30

4.執行器配置

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

執行器中的XxlJobConfig將根據配置文件中配置生成XxlJobSpringExecutor:

@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {logger.info(">>>>>>>>>>> xxl-job config init.");XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appname);xxlJobSpringExecutor.setAddress(address);xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setPort(port);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;}

①Bean模式下新建任務:(bean模式:以jobHandler方式維護在執行器端;需要結合JobHandler屬性匹配執行器中的任務)
②方式模式(需要在spring的容器中開發job)

xxl-job總結

xxl-job是一個中心式分布式的調度平臺,調度中心和執行器解耦,執行器和業務代碼耦合,代碼的侵入性少,學習簡單、開發簡單、輕量級。

總結

以上是生活随笔為你收集整理的探索xxl-job的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。