XXL-JOB是一個輕量級分佈式任務調度平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼並接入多家公司線上產品線,開箱即用。php
於2015年中,我在github上建立XXL-JOB項目倉庫並提交第一個commit,隨之進行系統結構設計,UI選型,交互設計……html
於2015-11月,XXL-JOB終於RELEASE了第一個大版本V1.0, 隨後我將之發佈到OSCHINA,XXL-JOB在OSCHINA上得到了@紅薯的熱門推薦,同期分別達到了OSCHINA的「熱門動彈」排行第一和git.oschina的開源軟件月熱度排行第一,在此特別感謝紅薯,感謝你們的關注和支持。java
於2015-12月,我將XXL-JOB發表到我司內部知識庫,而且獲得內部同事承認。node
於2016-01月,我司展開XXL-JOB的內部接入和定製工做,在此感謝袁某和尹某兩位同事的貢獻,同時也感謝內部其餘給與關注與支持的同事。python
於2017-05-13,在上海舉辦的 "第62期開源中國源創會" 的 "放碼過來" 環節,我登臺對XXL-JOB作了演講,臺下五百位在場觀衆反響熱烈(圖文回顧 )。mysql
於2017-10-22,又拍雲 Open Talk 聯合 Spring Cloud 中國社區舉辦的 "進擊的微服務實戰派上海站",我登臺對XXL-JOB作了演講,現場觀衆反響熱烈並在會後與XXL-JOB用戶熱烈討論交流。nginx
於2017-12-11,XXL-JOB有幸參會《InfoQ ArchSummit全球架構師峯會》,並被拍拍貸架構總監"楊波老師"在專題 "微服務原理、基礎架構和開源實踐" 中現場介紹。git
於2017-12-18,XXL-JOB參與"2017年度最受歡迎中國開源軟件"評比,在當時已錄入的約九千個國產開源項目中角逐,最終進入了前30強。github
於2018-01-15,XXL-JOB參與"2017碼雲最火開源項目"評比,在當時已錄入的約六千五百個碼雲項目中角逐,最終進去了前20強。ajax
於2018-04-14,iTechPlus在上海舉辦的 "2018互聯網開發者大會",我登臺對XXL-JOB作了演講,現場觀衆反響熱烈並在會後與XXL-JOB用戶熱烈討論交流。
於2018-05-27,在上海舉辦的 "第75期開源中國源創會" 的 "架構" 主題專場,我登臺進行「基礎架構與中間件圖譜」主題演講,臺下上千位在場觀衆反響熱烈(圖文回顧 )。
於2018-12-05,XXL-JOB參與"2018年度最受歡迎中國開源軟件"評比,在當時已錄入的一萬多個國產開源項目中角逐,最終排名第19名。
我司大衆點評目前已接入XXL-JOB,內部別名《Ferrari》(Ferrari基於XXL-JOB的V1.1版本定製而成,新接入應用推薦升級最新版本)。 據最新統計, 自2016-01-21接入至2017-12-01期間,該系統已調度約100萬次,表現優異。新接入應用推薦使用最新版本,由於通過數十個版本的更新,系統的任務模型、UI交互模型以及底層調度通信模型都有了較大的優化和提高,核心功能更加穩定高效。
至今,XXL-JOB已接入多家公司的線上產品線,接入場景如電商業務,O2O業務和大數據做業等,截止最新統計時間爲止,XXL-JOB已接入的公司包括不限於:
- 一、大衆點評;
- 二、山東學而網絡科技有限公司; - 三、安徽慧通互聯科技有限公司; - 四、人人聚財金服; - 五、上海棠棣信息科技股份有限公司 - 六、運滿滿 - 七、米其林 (中國區) - 八、媽媽聯盟 - 九、九櫻天下(北京)信息技術有限公司 - 十、萬普拉斯科技有限公司(一加手機) - 十一、上海億保健康管理有限公司 - 十二、海爾馨廚 (海爾) - 1三、河南大紅包電子商務有限公司 - 1四、成都順點科技有限公司 - 1五、深圳市怡亞通 - 1六、深圳麥亞信科技股份有限公司 - 1七、上海博瑩科技信息技術有限公司 - 1八、中國平安科技有限公司 - 1九、杭州知時信息科技有限公司 - 20、博瑩科技(上海)有限公司 - 2一、成都依能股份有限責任公司 - 2二、湖南高陽通聯信息技術有限公司 - 2三、深圳市邦德文化發展有限公司 - 2四、福建阿思可網絡教育有限公司 - 2五、優信二手車 - 2六、上海悠遊堂投資發展股份有限公司 - 2七、北京粉筆藍天科技有限公司 - 2八、中秀科技(無錫)有限公司 - 2九、武漢空心科技有限公司 - 30、北京螞蟻風暴科技有限公司 - 3一、四川互宜達科技有限公司 - 3二、錢包行雲(北京)科技有限公司 - 3三、重慶欣才集團 - 3四、咪咕互動娛樂有限公司(中國移動) - 3五、北京諾亦騰科技有限公司 - 3六、增加引擎(北京)信息技術有限公司 - 3七、北京英貝思科技有限公司 - 3八、剛泰集團 - 3九、深圳泰久信息系統股份有限公司 - 40、隨行付支付有限公司 - 4一、廣州瀚農網絡科技有限公司 - 4二、享點科技有限公司 - 4三、杭州比智科技有限公司 - 4四、圳臨界線網絡科技有限公司 - 4五、廣州知識圈網絡科技有限公司 - 4六、國譽商業上海有限公司 - 4七、海爾消費金融有限公司,嗨付、夠花 (海爾) - 4八、廣州巴圖魯信息科技有限公司 - 4九、深圳市鵬海運電子數據交換有限公司 - 50、深圳市亞飛電子商務有限公司 - 5一、上海趣醫網絡有限公司 - 5二、聚金資本 - 5三、北京父母邦網絡科技有限公司 - 5四、中山元赫軟件科技有限公司 - 5五、中商惠民(北京)電子商務有限公司 - 5六、凱京集團 - 5七、華夏票聯(北京)科技有限公司 - 5八、拍拍貸 - 5九、北京尚德機構在線教育有限公司 - 60、任子行股份有限公司 - 6一、北京時態電子商務有限公司 - 6二、深圳卷皮網絡科技有限公司 - 6三、北京安博通科技股份有限公司 - 6四、將來無線網 - 6五、廈門瓷禧網絡有限公司 - 6六、北京遞藍科軟件股份有限公司 - 6七、鄭州創海軟件科技公司 - 6八、北京國槐信息科技有限公司 - 6九、浪潮軟件集團 - 70、多立恆(北京)信息技術有限公司 - 7一、廣州極迅客信息科技有限公司 - 7二、赫基(中國)集團股份有限公司 - 7三、海投匯 - 7四、上海潤益創業孵化器管理股份有限公司 - 7五、漢納森(廈門)數據股份有限公司 - 7六、安信信託 - 7七、嵐儒財富 - 7八、捷道軟件 - 7九、湖北享七網絡科技有限公司 - 80、湖南創發科技責任有限公司 - 8一、深圳小安時代互聯網金融服務有限公司 - 8二、湖北享七網絡科技有限公司 - 8三、錢包行雲(北京)科技有限公司 - 8四、360金融 (360) - 8五、易企秀 - 8六、摩貝(上海)生物科技有限公司 - 8七、廣東芯智慧科技有限公司 - 8八、聯想集團 (聯想) - 8九、怪獸充電 - 90、行圓汽車 - 9一、深圳店店通科技郵箱公司 - 9二、京東 (京東) - 9三、米莊理財 - 9四、咖啡易融 - 9五、梧桐誠選 - 9六、恆大地產 (恆大) - 9七、昆明龍慧 - 9八、上海澀瑤軟件 - 9九、易信 (網易) - 100、銅板街 - 10一、杭州雲若網絡科技有限公司 - 10二、特百惠(中國)有限公司 - 10三、常山衆卡運力供應鏈管理有限公司 - 10四、深圳立創電子商務有限公司 - 10五、杭州智諾科技股份有限公司 - 10六、北京雲漾信息科技有限公司 - 10七、深圳市多銀科技有限公司 - 10八、親寶寶 - 10九、上海博卡軟件科技有限公司 - 1十、智慧樹在線教育平臺 - 1十一、米族金融 - 1十二、北京辰森世紀 - 11三、雲南滇醫通 - 11四、廣州市分領網絡科技有限責任公司 - 11五、浙江微能科技有限公司 - 11六、上海馨飛電子商務有限公司 - 11七、上海寶尊電子商務有限公司 - 11八、直客通科技技術有限公司 - 11九、科度科技有限公司 - 120、上海數慧系統技術有限公司 - 12一、個人醫藥網 - 12二、多粉平臺 - 12三、鐵甲二手機 - 12四、上海海新得數據技術有限公司 - 12五、深圳市珍愛網信息技術有限公司 (珍愛網) - 12六、小蜜蜂 - 12七、吉榮數科技 - 12八、上海愷域信息科技有限公司 - 12九、廣州荔支網絡有限公司(荔枝FM) - 130、杭州閃寶科技有限公司 - 13一、北京互聯新網科技發展有限公司 - 13二、譽道科技 - 13三、山西兆盛房地產開發有限公司 - 13四、北京藍睿通達科技有限公司 - 13五、月亮小屋(中國)有限公司(藍月亮) - 13六、青島國瑞信息技術有限公司 - 13七、博雅雲計算(北京)有限公司 - 13八、華泰證券香港子公司 - 13九、杭州東方通訊軟件技術有限公司 - 140、武漢博晟安全技術股份有限公司 - 14一、深圳市六度人和科技有限公司 - 14二、杭州趣維科技有限公司(小影) - 14三、寧波單車俠之家科技有限公司(單車俠) - 14四、丁丁雲康信息科技(北京)有限公司 - 14五、雲錢袋 - 14六、南京中興力維 - 14七、上海矽昌通訊技術有限公司 - 14八、深圳薩科科技 - 14九、中通服創立科技有限責任公司 - 150、深圳市對莊科技有限公司 - 15一、上證所信息網絡有限公司 - 15二、杭州火燒雲科技有限公司(婚禮紀) - 15三、天津青芒果科技有限公司 (芒果頭條) - 15四、長飛光纖光纜股份有限公司 - 15五、世紀凱歌(北京)醫療科技有限公司 - 15六、浙江霖梓控股有限公司 - 15七、江西騰飛網絡技術有限公司 - 15八、安迅物流有限公司 - 15九、肉聯網 - 160、北京北廣梯影廣告傳媒有限公司 - 16一、上海數慧系統技術有限公司 - 16二、大志天成 - 16三、上海雲鵲醫 - 16四、上海雲鵲醫 - 16五、墨跡天氣(墨跡天氣) - 16六、上海逸橙信息科技有限公司 - 16七、沅朋物聯 - 16八、杭州恆生雲融網絡科技有限公司 - 16九、綠米聯創 - 170、重慶易寵科技有限公司 - 17一、安徽引航科技有限公司(樂職網) - 17二、上海數聯醫信企業發展有限公司 - 17三、良彬建材 - 17四、杭州求是同創網絡科技有限公司 - 17五、荷馬國際 - 17六、點僱網 - 17七、深圳市華星光電技術有限公司 - 17八、廈門神州鷹軟件科技有限公司 - 17九、深圳市招商信諾人壽保險有限公司 - 180、上海好屋網信息技術有限公司 - 18一、海信集團 - 18二、信凌可信息科技(上海)有限公司 - 18三、長春天成科技發展有限公司 - 18四、用友金融信息技術股份有限公司(用友) - 18五、北京咖啡易融有限公司 - 18六、國投瑞銀基金管理有限公司 - 18七、晉鬆(上海)網絡信息技術有限公司 - 18八、深圳市隨手科技有限公司(隨手記) - 18九、深圳水務科技有限公司 - 190、易企秀 - 19一、北京磁雲科技 - 19二、南京蜂泰互聯網科技有限公司 - 19三、章魚直播 - 19四、獎多多科技 - 19五、天津市神州商龍科技股份有限公司 - 19六、岩心科技 - 19七、車碼科技(北京)有限公司 - 19八、貴陽市投資控股集團 - 19九、康旗股份 - 200、龍騰出行 - 20一、杭州華量軟件 - 20二、合肥頂嶺醫療科技有限公司 - 20三、重慶表達式科技有限公司 - 20四、上海米道信息科技有限公司 - 20五、北京益友會科技有限公司 - 20六、北京融貫電子商務有限公司 - 20七、中國外匯交易中心 - 20八、中國外運股份有限公司 - 20九、中國上海曉圈教育科技有限公司 - 2十、普聯軟件股份有限公司 - 2十一、北京科藍軟件股份有限公司 - 2十二、江蘇斯諾物聯科技有限公司 - 21三、北京搜狐-狐友(搜狐) - 21四、新大陸網商金融 - 21五、山東神碼中稅信息科技有限公司 - ……
更多接入的公司,歡迎在 登記地址 登記,登記僅僅爲了產品推廣。
歡迎你們的關注和使用,XXL-JOB也將擁抱變化,持續發展。
源碼倉庫地址 | Release Download |
---|---|
https://github.com/xuxueli/xxl-job | Download |
http://gitee.com/xuxueli0323/xxl-job | Download |
<!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>${最新穩定版本}</version> </dependency>
請下載項目源碼並解壓,獲取 "調度數據庫初始化SQL腳本" 並執行便可,正常狀況下應該生成16張表。
"調度數據庫初始化SQL腳本" 位置爲:
/xxl-job/doc/db/tables_xxl_job.sql
調度中心支持集羣部署,集羣狀況下各節點務必鏈接同一個mysql實例;
若是mysql作主從,調度中心集羣節點務必強制走主庫;
解壓源碼,按照maven格式將源碼導入IDE, 使用maven進行編譯便可,源碼結構以下:
xxl-job-admin:調度中心
xxl-job-core:公共依賴 xxl-job-executor-samples:執行器Sample示例(選擇合適的版本執行器,可直接使用,也能夠參考其並將現有項目改形成執行器) :xxl-job-executor-sample-springboot:Springboot版本,經過Springboot管理執行器,推薦這種方式; :xxl-job-executor-sample-spring:Spring版本,經過Spring容器管理執行器,比較通用; :xxl-job-executor-sample-frameless:無框架版本; :xxl-job-executor-sample-jfinal:JFinal版本,經過JFinal管理執行器; :xxl-job-executor-sample-nutz:Nutz版本,經過Nutz管理執行器;
調度中心項目:xxl-job-admin
做用:統一管理任務調度平臺上調度任務,負責觸發調度執行,而且提供任務管理平臺。
調度中心配置文件地址:
/xxl-job/xxl-job-admin/src/main/resources/xxl-job-admin.properties
調度中心配置內容說明:
### 調度中心JDBC連接:連接地址請保持和 2.1章節 所建立的調度數據庫的地址一致
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 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=xxx spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true ### 登陸帳號 xxl.job.login.username=admin xxl.job.login.password=123456 ### 調度中心通信TOKEN,非空時啓用 xxl.job.accessToken= ### 調度中心國際化設置,默認爲中文版本,值設置爲「en」時切換爲英文版本 xxl.job.i18n=
若是已經正確進行上述配置,可將項目編譯打包部署。 調度中心訪問地址:http://localhost:8080/xxl-job-admin (該地址執行器將會使用到,做爲回調地址),登陸後運行界面以下圖所示
至此「調度中心」項目已經部署成功。
調度中心支持集羣部署,提高調度系統容災和可用性。
調度中心集羣部署時,幾點要求和建議:
// Docker地址:https://hub.docker.com/r/xuxueli/xxl-job-admin/ (建議指定版本號)
docker pull xuxueli/xxl-job-admin
docker run -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin -d xuxueli/xxl-job-admin
/** * 如需自定義 mysql 等配置,可經過 "PARAMS" 指定,參數格式 RAMS="--key=value --key2=value2" ; * 配置項參考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties */ docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin -d xuxueli/xxl-job-admin
「執行器」項目:xxl-job-executor-sample-springboot (提供多種版本執行器供選擇,現以 springboot 版本爲例,可直接使用,也能夠參考其並將現有項目改形成執行器)
做用:負責接收「調度中心」的調度並執行;可直接部署執行器,也能夠將執行器集成到現有業務項目中。
確認pom文件中引入了 "xxl-job-core" 的maven依賴;
執行器配置,配置文件地址:
/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties
執行器配置,配置內容說明:
### 調度中心部署跟地址 [選填]:如調度中心集羣部署存在多個地址則用逗號分隔。執行器將會使用該地址進行"執行器心跳註冊"和"任務結果回調";爲空則關閉自動註冊;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin ### 執行器AppName [選填]:執行器心跳註冊分組依據;爲空則關閉自動註冊 xxl.job.executor.appname=xxl-job-executor-sample ### 執行器IP [選填]:默認爲空表示自動獲取IP,多網卡時可手動設置指定IP,該IP不會綁定Host僅做爲通信實用;地址信息用於 "執行器註冊" 和 "調度中心請求並觸發任務"; xxl.job.executor.ip= ### 執行器端口號 [選填]:小於等於0則自動獲取;默認端口爲9999,單機部署多個執行器時,注意要配置不一樣執行器端口; xxl.job.executor.port=9999 ### 執行器通信TOKEN [選填]:非空時啓用; xxl.job.accessToken= ### 執行器運行日誌文件存儲磁盤路徑 [選填] :須要對該路徑擁有讀寫權限;爲空則使用默認路徑; xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler ### 執行器日誌保存天數 [選填] :值大於3時生效,啓用執行器Log文件按期清理功能,不然不生效; xxl.job.executor.logretentiondays=-1
執行器組件,配置文件地址:
/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java
執行器組件,配置內容說明:
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobSpringExecutor xxlJobExecutor() { logger.info(">>>>>>>>>>> xxl-job 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); return xxlJobSpringExecutor; }
若是已經正確進行上述配置,可將執行器項目編譯打部署,系統提供多種執行器Sample示例項目,選擇其中一個便可,各自的部署方式以下。
xxl-job-executor-sample-springboot:項目編譯打包成springboot類型的可執行JAR包,命令啓動便可;
xxl-job-executor-sample-spring:項目編譯打包成WAR包,並部署到tomcat中。 xxl-job-executor-sample-jfinal:同上 xxl-job-executor-sample-nutz:同上
至此「執行器」項目已經部署結束。
執行器支持集羣部署,提高調度系統可用性,同時提高任務處理能力。
執行器集羣部署時,幾點要求和建議:
本示例以新建一個 「GLUE模式(Java)」 運行模式的任務爲例。更多有關任務的詳細配置,請查看「章節三:任務詳解」。 ( 「GLUE模式(Java)」的執行代碼託管到調度中心在線維護,相比「Bean模式任務」須要在執行器項目開發部署上線,更加簡便輕量)
前提:請確認「調度中心」和「執行器」項目已經成功部署並啓動;
登陸調度中心,點擊下圖所示「新建任務」按鈕,新建示例任務。而後,參考下面截圖中任務的參數配置,點擊保存。
請點擊任務右側 「GLUE」 按鈕,進入 「GLUE編輯器開發界面」 ,見下圖。「GLUE模式(Java)」 運行模式的任務默認已經初始化了示例任務代碼,即打印Hello World。 ( 「GLUE模式(Java)」 運行模式的任務其實是一段繼承自IJobHandler的Java類代碼,它在執行器項目中運行,可以使用@Resource/@Autowire注入執行器裏中的其餘服務,詳細介紹請查看第三章節)
請點擊任務右側 「執行」 按鈕,可手動觸發一次任務執行(一般狀況下,經過配置Cron表達式進行任務調度出發)。
請點擊任務右側 「日誌」 按鈕,可前往任務日誌界面查看任務日誌。 在任務日誌界面中,可查看該任務的歷史調度記錄以及每一次調度的任務調度信息、執行參數和執行信息。運行中的任務點擊右側的「執行日誌」按鈕,可進入日誌控制檯查看實時執行日誌。
在日誌控制檯,能夠Rolling方式實時查看任務在執行器一側運行輸出的日誌信息,實時監控任務進度;
- 執行器:任務的綁定的執行器,任務觸發調度時將會自動發現註冊成功的執行器, 實現任務自動發現功能; 另外一方面也能夠方便的進行任務分組。每一個任務必須綁定一個執行器, 可在 "執行器管理" 進行設置;
- 任務描述:任務的描述信息,便於任務管理; - 路由策略:當執行器集羣部署時,提供豐富的路由策略,包括; FIRST(第一個):固定選擇第一個機器; LAST(最後一個):固定選擇最後一個機器; ROUND(輪詢):; RANDOM(隨機):隨機選擇在線的機器; CONSISTENT_HASH(一致性HASH):每一個任務按照Hash算法固定選擇某一臺機器,且全部任務均勻散列在不一樣機器上。 LEAST_FREQUENTLY_USED(最不常用):使用頻率最低的機器優先被選舉; LEAST_RECENTLY_USED(最近最久未使用):最久爲使用的機器優先被選舉; FAILOVER(故障轉移):按照順序依次進行心跳檢測,第一個心跳檢測成功的機器選定爲目標執行器併發起調度; BUSYOVER(忙碌轉移):按照順序依次進行空閒檢測,第一個空閒檢測成功的機器選定爲目標執行器併發起調度; SHARDING_BROADCAST(分片廣播):廣播觸發對應集羣中全部機器執行一次任務,同時系統自動傳遞分片參數;可根據分片參數開發分片任務; - Cron:觸發任務執行的Cron表達式; - 運行模式: BEAN模式:任務以JobHandler方式維護在執行器端;須要結合 "JobHandler" 屬性匹配執行器中任務; GLUE模式(Java):任務以源碼方式維護在調度中心;該模式的任務其實是一段繼承自IJobHandler的Java類代碼並 "groovy" 源碼方式維護,它在執行器項目中運行,可以使用@Resource/@Autowire注入執行器裏中的其餘服務; GLUE模式(Shell):任務以源碼方式維護在調度中心;該模式的任務其實是一段 "shell" 腳本; GLUE模式(Python):任務以源碼方式維護在調度中心;該模式的任務其實是一段 "python" 腳本; GLUE模式(PHP):任務以源碼方式維護在調度中心;該模式的任務其實是一段 "php" 腳本; GLUE模式(NodeJS):任務以源碼方式維護在調度中心;該模式的任務其實是一段 "nodejs" 腳本; GLUE模式(PowerShell):任務以源碼方式維護在調度中心;該模式的任務其實是一段 "PowerShell" 腳本; - JobHandler:運行模式爲 "BEAN模式" 時生效,對應執行器中新開發的JobHandler類「@JobHandler」註解自定義的value值; - 阻塞處理策略:調度過於密集執行器來不及處理時的處理策略; 單機串行(默認):調度請求進入單機執行器後,調度請求進入FIFO隊列並以串行方式運行; 丟棄後續調度:調度請求進入單機執行器後,發現執行器存在運行的調度任務,本次請求將會被丟棄並標記爲失敗; 覆蓋以前調度:調度請求進入單機執行器後,發現執行器存在運行的調度任務,將會終止運行中的調度任務並清空隊列,而後運行本地調度任務; - 子任務:每一個任務都擁有一個惟一的任務ID(任務ID能夠從任務列表獲取),當本任務執行結束而且執行成功時,將會觸發子任務ID所對應的任務的一次主動調度。 - 任務超時時間:支持自定義任務超時時間,任務運行超時將會主動中斷任務; - 失敗重試次數;支持自定義任務失敗重試次數,當任務失敗時將會按照預設的失敗重試次數主動進行重試; - 報警郵件:任務調度失敗時郵件通知的郵箱地址,支持配置多郵箱地址,配置多個郵箱地址時用逗號分隔; - 負責人:任務的負責人; - 執行參數:任務執行所需的參數;
任務邏輯以JobHandler的形式存在於「執行器」所在項目中,開發流程以下:
- 一、繼承"IJobHandler":「com.xxl.job.core.handler.IJobHandler」;
- 二、註冊到Spring容器:添加「@Component」註解,被Spring容器掃描爲Bean實例; - 三、註冊到執行器工廠:添加「@JobHandler(value="自定義jobhandler名稱")」註解,註解value值對應的是調度中心新建任務的JobHandler屬性的值。 - 四、執行日誌:須要經過 "XxlJobLogger.log" 打印執行日誌; (可參考Sample示例執行器中的DemoJobHandler,見下圖)
參考上文「配置屬性詳細說明」對新建的任務進行參數配置,運行模式選中 "BEAN模式",JobHandler屬性填寫任務註解「@JobHandler」中定義的值;
爲方便用戶參考與快速實用,示例執行器內原生提供多個Bean模式任務Handler,能夠直接配置實用,以下:
任務以源碼方式維護在調度中心,支持經過Web IDE在線更新,實時編譯和生效,所以不須要指定JobHandler。開發流程以下:
參考上文「配置屬性詳細說明」對新建的任務進行參數配置,運行模式選中 "GLUE模式(Java)";
選中指定任務,點擊該任務右側「GLUE」按鈕,將會前往GLUE任務的Web IDE界面,在該界面支持對任務代碼進行開發(也能夠在IDE中開發完成後,複製粘貼到編輯中)。
版本回溯功能(支持30個版本的版本回溯):在GLUE任務的Web IDE界面,選擇右上角下拉框「版本回溯」,會列出該GLUE的更新歷史,選擇相應版本便可顯示該版本代碼,保存後GLUE代碼即回退到對應的歷史版本;
參考上文「配置屬性詳細說明」對新建的任務進行參數配置,運行模式選中 "GLUE模式(Shell)";
選中指定任務,點擊該任務右側「GLUE」按鈕,將會前往GLUE任務的Web IDE界面,在該界面支持對任務代碼進行開發(也能夠在IDE中開發完成後,複製粘貼到編輯中)。
該模式的任務其實是一段 "shell" 腳本;
參考上文「配置屬性詳細說明」對新建的任務進行參數配置,運行模式選中 "GLUE模式(Python)";
選中指定任務,點擊該任務右側「GLUE」按鈕,將會前往GLUE任務的Web IDE界面,在該界面支持對任務代碼進行開發(也能夠在IDE中開發完成後,複製粘貼到編輯中)。
該模式的任務其實是一段 "python" 腳本;
參考上文「配置屬性詳細說明」對新建的任務進行參數配置,運行模式選中 "GLUE模式(NodeJS)";
選中指定任務,點擊該任務右側「GLUE」按鈕,將會前往GLUE任務的Web IDE界面,在該界面支持對任務代碼進行開發(也能夠在IDE中開發完成後,複製粘貼到編輯中)。
該模式的任務其實是一段 "nodejS" 腳本;
同上
同上
點擊進入"執行器管理"界面, 以下圖:
一、"調度中心OnLine:"右側顯示在線的"調度中心"列表, 任務執行結束後, 將會以failover的模式進行回調調度中心通知執行結果, 避免回調的單點風險;
二、"執行器列表" 中顯示在線的執行器列表, 可經過"OnLine 機器"查看對應執行器的集羣機器。
點擊按鈕 "+新增執行器" 彈框以下圖, 可新增執行器配置:
AppName: 是每一個執行器集羣的惟一標示AppName, 執行器會週期性以AppName爲對象進行自動註冊。可經過該配置自動發現註冊成功的執行器, 供任務調度時使用;
名稱: 執行器的名稱, 由於AppName限制字母數字等組成,可讀性不強, 名稱爲了提升執行器的可讀性; 排序: 執行器的排序, 系統中須要執行器的地方,如任務新增, 將會按照該排序讀取可用的執行器列表; 註冊方式:調度中心獲取執行器地址的方式; 自動註冊:執行器自動進行執行器註冊,調度中心經過底層註冊表能夠動態發現執行器機器地址; 手動錄入:人工手動錄入執行器的地址信息,多地址逗號分隔,供調度中心使用; 機器地址:"註冊方式"爲"手動錄入"時有效,支持人工維護執行器的地址信息;
進入任務管理界面,點擊「新增任務」按鈕,在彈出的「新增任務」界面配置任務屬性後保存便可。詳情頁參考章節 "3、任務詳解"。
進入任務管理界面,選中指定任務。點擊該任務右側「編輯」按鈕,在彈出的「編輯任務」界面更新任務屬性後保存便可,能夠修改設置的任務屬性信息:
該操做僅針對GLUE任務。
選中指定任務,點擊該任務右側「GLUE」按鈕,將會前往GLUE任務的Web IDE界面,在該界面支持對任務代碼進行開發。可參考章節 "3.2 GLUE模式(Java)"。
可對任務進行「啓動」和「中止」操做。 須要注意的是,此處的啓動/中止僅針對任務的後續調度觸發行爲,不會影響到已經觸發的調度任務,如需終止已經觸發的調度任務,可查看「4.9 終止運行中的任務」
點擊「執行」按鈕,可手動觸發一次任務調度,不影響原有調度規則。
點擊「日誌」按鈕,能夠查看任務歷史調度日誌。在歷史調入日誌界面可查看每次任務調度的調度結果、執行結果等,點擊「執行日誌」按鈕可查看執行器完整日誌。
調度時間:"調度中心"觸發本次調度並向"執行器"發送任務執行信號的時間;
調度結果:"調度中心"觸發本次調度的結果,200表示成功,500或其餘表示失敗; 調度備註:"調度中心"觸發本次調度的日誌信息; 執行器地址:本次任務執行的機器地址 運行模式:觸發調度時任務的運行模式,運行模式可參考章節 "3、任務詳解"; 任務參數:本地任務執行的入參 執行時間:"執行器"中本次任務執行結束後回調的時間; 執行結果:"執行器"中本次任務執行的結果,200表示成功,500或其餘表示失敗; 執行備註:"執行器"中本次任務執行的日誌信息; 操做: "執行日誌"按鈕:點擊可查看本地任務執行的詳細日誌信息;詳見「4.8 查看執行日誌」; "終止任務"按鈕:點擊可終止本地調度對應執行器上本任務的執行線程,包括未執行的阻塞任務一併被終止;
點擊執行日誌右側的 「執行日誌」 按鈕,可跳轉至執行日誌界面,能夠查看業務代碼中打印的完整日誌,以下圖;
僅針對執行中的任務。 在任務日誌界面,點擊右側的「終止任務」按鈕,將會向本次任務對應的執行器發送任務終止請求,將會終止掉本次任務,同時會清空掉整個任務執行隊列。
任務終止時經過 "interrupt" 執行線程的方式實現, 將會觸發 "InterruptedException" 異常。所以若是JobHandler內部catch到了該異常並消化掉的話, 任務終止功能將不可用。
所以, 若是遇到上述任務終止不可用的狀況, 須要在JobHandler中應該針對 "InterruptedException" 異常進行特殊處理 (向上拋出) , 正確邏輯以下:
try{
// do something } catch (Exception e) { if (e instanceof InterruptedException) { throw e; } logger.warn("{}", e); }
並且,在JobHandler中開啓子線程時,子線程也不可catch處理"InterruptedException",應該主動向上拋出。
任務終止時會執行對應JobHandler的"destroy()"方法,能夠藉助該方法處理一些資源回收的邏輯。
在任務日誌界面,選中執行器和任務以後,點擊右側的"刪除"按鈕將會出現"日誌清理"彈框,彈框中支持選擇不一樣類型的日誌清理策略,選中後點擊"肯定"按鈕便可進行日誌清理操做;
點擊刪除按鈕,能夠刪除對應任務。
進入 "用戶管理" 界面,可查看和管理用戶信息;
目前用戶分爲兩種角色:
- /doc :文檔資料
- /db :「調度數據庫」建表腳本 - /xxl-job-admin :調度中心,項目源碼 - /xxl-job-core :公共Jar依賴 - /xxl-job-executor-samples :執行器,Sample示例項目(你們能夠在該項目上進行開發,也能夠將現有項目改造生成執行器項目)
XXL-JOB調度模塊基於自研調度組件並支持集羣部署,調度數據庫表說明以下:
- xxl_job_lock:任務調度鎖表;
- xxl_job_group:執行器信息表,維護任務執行器信息; - xxl_job_info:調度擴展信息表: 用於保存XXL-JOB調度任務的擴展信息,如任務分組、任務名、機器地址、執行器、執行入參和報警郵件等等; - xxl_job_log:調度日誌表: 用於保存XXL-JOB任務調度的歷史信息,如調度結果、執行結果、調度入參、調度機器和執行器等等; - xxl_job_logglue:任務GLUE日誌:用於保存GLUE更新歷史,用於支持GLUE的版本回溯功能; - xxl_job_registry:執行器註冊表,維護在線的執行器和調度中心機器地址信息; - xxl_job_user:系統用戶表;
將調度行爲抽象造成「調度中心」公共平臺,而平臺自身並不承擔業務邏輯,「調度中心」負責發起調度請求。
將任務抽象成分散的JobHandler,交由「執行器」統一管理,「執行器」負責接收調度請求並執行對應的JobHandler中業務邏輯。
所以,「調度」和「任務」兩部分能夠相互解耦,提升系統總體穩定性和擴展性;
Quartz做爲開源做業調度中的佼佼者,是做業調度的首選。可是集羣環境中Quartz採用API的方式對任務進行管理,從而能夠避免上述問題,可是一樣存在如下問題:
XXL-JOB彌補了quartz的上述不足之處。
XXL-JOB最終選擇自研調度組件(早期調度組件基於Quartz);一方面是爲了精簡系統下降冗餘依賴,另外一方面是爲了提供系統的可控度與穩定性;
XXL-JOB中「調度模塊」和「任務模塊」徹底解耦,調度模塊進行任務調度時,將會解析不一樣的任務參數發起遠程調用,調用各自的遠程執行器服務。這種調用模型相似RPC調用,調度中心提供調用代理的功能,而執行器提供遠程服務的功能。
基於數據庫的集羣方案,數據庫選用Mysql;集羣分佈式併發環境中進行定時任務調度時,會在各個節點會上報任務,存到數據庫中,執行時會從數據庫中取出觸發器來執行,若是觸發器的名稱和執行時間相同,則只有一個節點去執行此任務。
調度採用線程池方式實現,避免單線程因阻塞而引發任務調度延遲。
XXL-JOB調度模塊默認採用並行機制,在多線程調度的狀況下,調度模塊被阻塞的概率很低,大大提升了調度系統的承載量。
XXL-JOB的每一個調度任務雖然在調度模塊是並行調度執行的,可是任務調度傳遞到任務模塊的「執行器」確實串行執行的,同時支持任務終止。
任務調度錯過觸發時間時的處理策略:
調度模塊的「調度中心」做爲Web服務部署時,一方面承擔調度中心功能,另外一方面也爲執行器提供API服務。
調度中心提供的"日誌回調服務API服務"代碼位置以下:
xxl-job-admin#com.xxl.job.admin.controller.JobApiController.callback
「執行器」在接收到任務執行請求後,執行任務,在執行結束以後會將執行結果回調通知「調度中心」:
執行器如若集羣部署,調度中心將會感知到在線的全部執行器,如「127.0.0.1:9997, 127.0.0.1:9998, 127.0.0.1:9999」。
當任務"路由策略"選擇"故障轉移(FAILOVER)"時,當調度中心每次發起調度請求時,會按照順序對執行器發出心跳檢測請求,第一個檢測爲存活狀態的執行器將會被選定併發送調度請求。
調度成功後,可在日誌監控界面查看「調度備註」,以下;
「調度備註」能夠看出本地調度運行軌跡,執行器的"註冊方式"、"地址列表"和任務的"路由策略"。"故障轉移(FAILOVER)"路由策略下,調度中心首先對第一個地址進行心跳檢測,心跳失敗所以自動跳過,第二個依然心跳檢測失敗…… 直至心跳檢測第三個地址「127.0.0.1:9999」成功,選定爲「目標執行器」;而後對「目標執行器」發送調度請求,調度流程結束,等待執行器回調執行結果。
調度中心每次進行任務調度,都會記錄一條任務日誌,任務日誌主要包括如下三部份內容:
調度日誌,針對單次調度,屬性說明以下:
原理:XXL-JOB中每一個任務都對應有一個任務ID,同時,每一個任務支持設置屬性「子任務ID」,所以,經過「任務ID」能夠匹配任務依賴關係。
當父任務執行結束而且執行成功時,將會根據「子任務ID」匹配子任務依賴,若是匹配到子任務,將會主動觸發一次子任務的執行。
在任務日誌界面,點擊任務的「執行備註」的「查看」按鈕,能夠看到匹配子任務以及觸發子任務執行的日誌信息,如無信息則表示未觸發子任務執行,可參考下圖。
得益於上述兩點優化,理論上默認配置下的調度中心,單機可以支撐 5000 任務併發運行穩定運行;
實際場景中,因爲調度中心與執行器網絡ping延遲不一樣、DB讀寫耗時不一樣、任務調度密集程度不一樣,會致使任務量上限會上下波動。
如若須要支撐更多的任務量,能夠經過 "調大調度線程數" 、"下降調度中心與執行器ping延遲" 和 "提高機器配置" 幾種方式優化。
開發步驟:可參考 "章節三" ; 原理:每一個Bean模式任務都是一個Spring的Bean類實例,它被維護在「執行器」項目的Spring容器中。任務類須要加「@JobHandler(value="名稱")」註解,由於「執行器」會根據該註解識別Spring容器中的任務。任務類須要繼承統一接口「IJobHandler」,任務邏輯在execute方法中開發,由於「執行器」在接收到調度中心的調度請求時,將會調用「IJobHandler」的execute方法,執行任務邏輯。
開發步驟:可參考 "章節三" ; 原理:每一個 "GLUE模式(Java)" 任務的代碼,其實是「一個繼承自「IJobHandler」的實現類的類代碼」,「執行器」接收到「調度中心」的調度請求時,會經過Groovy類加載器加載此代碼,實例化成Java對象,同時注入此代碼中聲明的Spring服務(請確保Glue代碼中的服務和類引用在「執行器」項目中存在),而後調用該對象的execute方法,執行任務邏輯。
開發步驟:可參考 "章節三" ; 原理:腳本任務的源碼託管在調度中心,腳本邏輯在執行器運行。當觸發腳本任務時,執行器會加載腳本源碼在執行器機器上生成一份腳本文件,而後經過Java代碼調用該腳本;而且實時將腳本輸出日誌寫到任務日誌文件中,從而在調度中心能夠實時監控腳本運行狀況;
目前支持的腳本類型以下:
- shell腳本:任務運行模式選擇爲 "GLUE模式(Shell)"時支持 "shell" 腳本任務;
- python腳本:任務運行模式選擇爲 "GLUE模式(Python)"時支持 "python" 腳本任務; - nodejs腳本:務運行模式選擇爲 "GLUE模式(NodeJS)"時支持 "nodejs" 腳本任務;
腳本任務經過 Exit Code 判斷任務執行結果,狀態碼可參考章節 "5.15 任務執行結果說明";
執行器其實是一個內嵌的Server,默認端口9999(配置項:xxl.job.executor.port)。
在項目啓動時,執行器會經過「@JobHandler」識別Spring容器中「Bean模式任務」,以註解的value屬性爲key管理起來。
「執行器」接收到「調度中心」的調度請求時,若是任務類型爲「Bean模式」,將會匹配Spring容器中的「Bean模式任務」,而後調用其execute方法,執行任務邏輯。若是任務類型爲「GLUE模式」,將會加載GLue代碼,實例化Java對象,注入依賴的Spring服務(注意:Glue代碼中注入的Spring服務,必須存在與該「執行器」項目的Spring容器中),而後調用execute方法,執行任務邏輯。
XXL-JOB會爲每次調度請求生成一個單獨的日誌文件,須要經過 "XxlJobLogger.log" 打印執行日誌,「調度中心」查看執行日誌時將會加載對應的日誌文件。
(歷史版本經過重寫LOG4J的Appender實現,存在依賴限制,該方式在新版本已經被拋棄)
日誌文件存放的位置可在「執行器」配置文件進行自定義,默認目錄格式爲:/data/applogs/xxl-job/jobhandler/「格式化日期」/「數據庫調度日誌記錄的主鍵ID.log」。
在JobHandler中開啓子線程時,子線程將會將會把日誌打印在父線程即JobHandler的執行日誌中,方便日誌追蹤。
- 一、「調度中心」向「執行器」發送http調度請求: 「執行器」中接收請求的服務,其實是一臺內嵌Server,默認端口9999;
- 二、「執行器」執行任務邏輯; - 三、「執行器」http回調「調度中心」調度結果: 「調度中心」中接收回調的服務,是針對執行器開放一套API服務;
調度中心向執行器發送的調度請求時使用RequestModel和ResponseModel兩個對象封裝調度請求參數和響應數據, 在進行通信以前底層會將上述兩個對象對象序列化,並進行數據協議以及時間戳檢驗,從而達到數據加密的功能;
自v1.5版本以後, 任務取消了"任務執行機器"屬性, 改成經過任務註冊和自動發現的方式, 動態獲取遠程執行器地址並執行。
AppName: 每一個執行器機器集羣的惟一標示, 任務註冊以 "執行器" 爲最小粒度進行註冊; 每一個任務經過其綁定的執行器可感知對應的執行器機器列表;
註冊表: 見"xxl_job_registry"表, "執行器" 在進行任務註冊時將會週期性維護一條註冊記錄,即機器地址和AppName的綁定關係; "調度中心" 從而能夠動態感知每一個AppName在線的機器列表; 執行器註冊: 任務註冊Beat週期默認30s; 執行器以一倍Beat進行執行器註冊, 調度中心以一倍Beat進行動態任務發現; 註冊信息的失效時間被三倍Beat; 執行器註冊摘除:執行器銷燬時,將會主動上報調度中心並摘除對應的執行器機器信息,提升心跳註冊的實時性;
爲保證系統"輕量級"而且下降學習部署成本,沒有采用Zookeeper做爲註冊中心,採用DB方式進行任務註冊發現;
自v1.6.2以後,任務執行結果經過 "IJobHandler" 的返回值 "ReturnT" 進行判斷; 當返回值符合 "ReturnT.code == ReturnT.SUCCESS_CODE" 時表示任務執行成功,不然表示任務執行失敗,並且能夠經過 "ReturnT.msg" 回調錯誤信息給調度中心; 從而,在任務邏輯中能夠方便的控制任務執行結果;
執行器集羣部署時,任務路由策略選擇"分片廣播"狀況下,一次任務調度將會廣播觸發對應集羣中全部執行器執行一次任務,同時系統自動傳遞分片參數;可根據分片參數開發分片任務;
"分片廣播" 以執行器爲維度進行分片,支持動態擴容執行器集羣從而動態增長分片數量,協同進行業務處理;在進行大數據量業務操做時可顯著提高任務處理能力和速度。
"分片廣播" 和普通任務開發流程一致,不一樣之處在於能夠能夠獲取分片參數,獲取分片參數進行分片業務處理。
// 可參考Sample示例執行器中的示例任務"ShardingJobHandler"瞭解試用
ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
// 腳本任務入參固定爲三個,依次爲:任務傳參、分片序號、分片總數。以Shell模式任務爲例,獲取分片參數代碼以下
echo "分片序號 index = $2" echo "分片總數 total = $3"
分片參數屬性說明:
index:當前分片序號(從0開始),執行器集羣列表中當前執行器的序號;
total:總分片數,執行器集羣的總機器數量;
該特性適用場景如:
爲提高系統安全性,調度中心和執行器進行安全性校驗,雙方AccessToken匹配才容許通信;
調度中心和執行器,可經過配置項 "xxl.job.accessToken" 進行AccessToken的設置。
調度中心和執行器,若是須要正常通信,只有兩種設置;
調度中心提供了API服務,主要分爲兩種類型:
一、任務結果回調服務;
二、執行器註冊服務; 三、執行器註冊摘除服務; 四、觸發任務單次執行服務,支持任務根據業務事件觸發;
API服務位置:com.xxl.job.core.biz.AdminBiz.java
API服務請求參考代碼:com.xxl.job.adminbiz.AdminBizTest.java
一、任務列表查詢;
二、任務新增; 三、任務更新; 四、任務刪除; 五、任務啓動; 六、任務中止; 七、任務觸發;
API服務位置:com.xxl.job.admin.controller.JobInfoController.java
API服務請求參考代碼:可參考任務界面操做的ajax請求。任何ajax接口都可配置成爲API服務,只需在待啓用的API服務上添加 「@PermessionLimit(limit = false)」 註解取消登錄態攔截便可;
執行器提供了API服務,供調度中心選擇使用,目前提供的API服務有:
一、心跳檢測:調度中心使用
二、忙碌檢測:調度中心使用 三、觸發任務執行:調度中心使用;本地進行任務開發時,可以使用該API服務模擬觸發任務; 四、獲取Rolling Log:調度中心使用 五、終止任務:調度中心使用
API服務位置:com.xxl.job.core.biz.ExecutorBiz
API服務請求參考代碼:com.xxl.job.executor.ExecutorBizTest
一次完整任務流程包括"調度(調度中心) + 執行(執行器)"兩個階段。
調度中心與業務解耦,只需部署一次後常年不須要維護。可是,執行器中託管運行着業務做業,做業上線和變動須要重啓執行器,尤爲是Bean模式任務。 執行器重啓可能會中斷運行中的任務。可是,XXL-JOB得益於自建執行器與自建註冊中心,能夠經過灰度上線的方式,避免因重啓致使的任務中斷的問題。
步驟以下:
系統根據如下標準判斷任務執行結果,可參考之。
-- | Bean/Glue(Java) | Glue(Shell) 等腳本任務 |
---|---|---|
成功 | IJobHandler.SUCCESS | 0 |
失敗 | IJobHandler.FAIL | -1(非0狀態碼) |
支持設置任務超時時間,任務運行超時的狀況下,將會主動中斷任務;
須要注意的是,任務超時中斷時與任務終止機制(可查看「4.9 終止運行中的任務」)相似,也是經過 "interrupt" 中斷任務,所以業務代碼須要將 "InterruptedException" 外拋,不然功能不可用。
跨平臺、跨語言主要體如今如下兩個方面:
默認提供郵件失敗告警,可擴展短信、釘釘等方式,擴展代碼位置爲 "JobFailMonitorHelper.failAlarm";
能夠經過如下命令快速構建調度中心,並啓動運行;
mvn clean package
docker build -t xuxueli/xxl-job-admin ./xxl-job-admin docker run --name xxl-job-admin -p 8080:8080 -d xuxueli/xxl-job-admin
調度密集或者耗時任務可能會致使任務阻塞,集羣狀況下調度組件小几率狀況下會重複觸發; 針對上述狀況,能夠經過結合 "單機路由策略(如:第一臺、一致性哈希)" + "阻塞策略(如:單機串行、丟棄後續調度)" 來規避,最終避免任務重複執行。
原生提供通用命令行任務Handler(Bean任務,"CommandJobHandler");業務方只須要提供命令行便可; 如任務參數 "pwd" 將會執行命令並輸出數據;
【於V1.1.x版本,XXL-JOB正式應用於我司,內部定製別名爲 「Ferrari」,新接入應用推薦使用最新版本】
一、支持任務分組;
二、支持「本地任務」、「遠程任務」;
三、底層通信支持兩種方式,Servlet方式 + JETTY方式;
四、支持「任務日誌」;
五、支持「串行執行」,並行執行;
說明:V1.2版本將系統架構按功能拆分爲:
- 調度模塊(調度中心):負責管理調度信息,按照調度配置發出調度請求;
- 執行模塊(執行器):負責接收調度請求並執行任務邏輯; - 通信模塊:負責調度模塊和任務模塊之間的信息通信;
優勢:
- 解耦:任務模塊提供任務接口,調度模塊維護調度信息,業務相互獨立;
- 高擴展性; - 穩定性;
一、遺棄「本地任務」模式,推薦使用「遠程任務」,易於系統解耦,任務對應的JobHandler統稱爲「執行器」;
二、遺棄「servlet」方式底層系統通信,推薦使用JETTY方式,調度+回調雙向通信,重構通信邏輯;
三、UI交互優化:左側菜單展開狀態優化,菜單項選中狀態優化,任務列表打開表格有壓縮優化;
四、【重要】「執行器」細分爲:BEAN、GLUE兩種開發模式,簡介見下文:
「執行器」 模式簡介: - BEAN模式執行器:每一個執行器都是Spring的一個Bean實例,XXL-JOB經過註解@JobHandler識別和調度執行器; -GLUE模式執行器:每一個執行器對應一段代碼,在線Web編輯和維護,動態編譯生效,執行器負責加載GLUE代碼和執行;
Tips: 歷史版本(V1.3.x)目前已經Release至穩定版本, 進入維護階段, 地址見分支 V1.3 。新特性將會在master分支持續更新。
<!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>${最新穩定版}</version> </dependency>
歡迎參與項目貢獻!好比提交PR修復一個bug,或者新建 Issue 討論新特性或者變動。
更多接入的公司,歡迎在 登記地址 登記,登記僅僅爲了產品推廣。
產品開源免費,而且將持續提供免費的社區技術支持。我的或企業內部可自由的接入和使用。
不管捐贈金額多少都足夠表達您這份心意,很是感謝 :) 前往捐贈