Java項目中使用XXL-JOB調度框架

2020-12-12 Java猿猿
Java項目中使用XXL-JOB調度框架

我們的最近幾個新項目在使用XXL-JOB進行任務調度,今天就分享下這個框架。

XXL-JOB是一個分布式任務調度平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放原始碼並接入多家公司線上產品線,開箱即用。

特性(來源於官方)

簡單:支持通過Web頁面對任務進行CRUD操作,操作簡單,一分鐘上手;動態:支持動態修改任務狀態、啟動/停止任務,以及終止運行中任務,即時生效;調度中心HA(中心式):調度採用中心式設計,「調度中心」自研調度組件並支持集群部署,可保證調度中心HA;執行器HA(分布式):任務分布式執行,任務」執行器」支持集群部署,可保證任務執行HA;註冊中心: 執行器會周期性自動註冊任務, 調度中心將會自動發現註冊的任務並觸發執行。同時,也支持手動錄入執行器地址;彈性擴容縮容:一旦有新執行器機器上線或者下線,下次調度時將會重新分配任務;路由策略:執行器集群部署時提供豐富的路由策略,包括:第一個、最後一個、輪詢、隨機、一致性HASH、最不經常使用、最近最久未使用、故障轉移、忙碌轉移等;故障轉移:任務路由策略選擇」故障轉移」情況下,如果執行器集群中某一臺機器故障,將會自動Failover切換到一臺正常的執行器發送調度請求。阻塞處理策略:調度過於密集執行器來不及處理時的處理策略,策略包括:單機串行(默認)、丟棄後續調度、覆蓋之前調度;任務超時控制:支持自定義任務超時時間,任務運行超時將會主動中斷任務;任務失敗重試:支持自定義任務失敗重試次數,當任務失敗時將會按照預設的失敗重試次數主動進行重試;其中分片任務支持分片粒度的失敗重試;任務失敗告警;默認提供郵件方式失敗告警,同時預留擴展接口,可方便的擴展簡訊、釘釘等告警方式;分片廣播任務:執行器集群部署時,任務路由策略選擇」分片廣播」情況下,一次任務調度將會廣播觸發集群中所有執行器執行一次任務,可根據分片參數開發分片任務;動態分片:分片廣播任務以執行器為維度進行分片,支持動態擴容執行器集群從而動態增加分片數量,協同進行業務處理;在進行大數據量業務操作時可顯著提升任務處理能力和速度。事件觸發:除了」Cron方式」和」任務依賴方式」觸發任務執行之外,支持基於事件的觸發任務方式。調度中心提供觸發任務單次執行的API服務,可根據業務事件靈活觸發。任務進度監控:支持實時監控任務進度;Rolling實時日誌:支持在線查看調度結果,並且支持以Rolling方式實時查看執行器輸出的完整的執行日誌;GLUE:提供Web IDE,支持在線開發任務邏輯代碼,動態發布,實時編譯生效,省略部署上線的過程。支持30個版本的歷史版本回溯。腳本任務:支持以GLUE模式開發和運行腳本任務,包括Shell、Python、NodeJS、PHP、PowerShell等類型腳本;命令行任務:原生提供通用命令行任務Handler(Bean任務,」CommandJobHandler」);業務方只需要提供命令行即可;任務依賴:支持配置子任務依賴,當父任務執行結束且執行成功後將會主動觸發一次子任務的執行, 多個子任務用逗號分隔;一致性:「調度中心」通過DB鎖保證集群分布式調度的一致性, 一次任務調度只會觸發一次執行;自定義任務參數:支持在線配置調度任務入參,即時生效;調度線程池:調度系統多線程觸發調度運行,確保調度精確執行,不被堵塞;數據加密:調度中心和執行器之間的通訊進行數據加密,提升調度信息安全性;郵件報警:任務失敗時支持郵件報警,支持配置多郵件地址群發報警郵件;推送maven中央倉庫: 將會把最新穩定版推送到maven中央倉庫, 方便用戶接入和使用;運行報表:支持實時查看運行數據,如任務數量、調度次數、執行器數量等;以及調度報表,如調度日期分布圖,調度成功分布圖等;全異步:任務調度流程全異步化設計實現,如異步調度、異步運行、異步回調等,有效對密集調度進行流量削峰,理論上支持任意時長任務的運行;跨語言:調度中心與執行器提供語言無關的 RESTful API 服務,第三方任意語言可據此對接調度中心或者實現執行器。除此之外,還提供了 「多任務模式」和「httpJobHandler」等其他跨語言方案;國際化:調度中心支持國際化設置,提供中文、英文兩種可選語言,默認為中文;容器化:提供官方docker鏡像,並實時更新推送dockerhub,進一步實現產品開箱即用;線程池隔離:調度線程池進行隔離拆分,慢任務自動降級進入」Slow」線程池,避免耗盡調度線程,提高系統穩定性;用戶管理:支持在線管理系統用戶,存在管理員、普通用戶兩種角色;權限控制:執行器維度進行權限控制,管理員擁有全量權限,普通用戶需要分配執行器權限後才允許相關操作;使用這個框架需要一個調度中心(xxl-job-admin),這個可以單機或者集群部署。下面就簡單結束調度中心的部署。

調度中心部署

1、部署前需要初始化調度中心需要的幾個表,這個腳本在源碼的文件tables_xxl_job.sql中(如果mysql做主從,調度中心集群節點務必強制走主庫)。

2、設置模板xxl-job-admin中的application.properties的服務埠,資料庫信息和郵件配置信息。

3、可以打包模板xxl-job-admin為單個jar包,可以部署到對應的伺服器中。

以本地為例,啟動後輸入帳號密碼admin/123456後的頁面如下:

調度中心

這個頁面最常用的就是任務管理和調度日誌頁面,如果開發了新的任務,需要在任務管理頁面添加。

開發執行器

1、首先,需要配置一個XxlJobSpringExecutor,可以在配置文件或者配置類中。如果想自動註冊必須設置xxl.job.admin.addresses和xxl.job.executor.appname。

詳細如下:

配置信息

2、Bean模式的有兩種實現,類形式和方法形式

類形式,繼承IJobHandler接口,實現execute方法,返回ReturnT實例。最後在類上添加XxlJob註解方法形式,要求方法的格式為:「public ReturnT<String> execute(String param)」,在方法上添加XxlJob註解

xxljob

在調度中心註冊執行器和添加任務

1,打開admin頁面,在執行器管理菜單中,添加一個執行器,可以是自動註冊或者是手動註冊,

添加執行器

2、註冊好後,等待一會可以看到註冊的信息,在OnLine 機器地址列,點擊查看,可以看到註冊的地址和埠。

查看註冊地址信息

3、添加任務,在任務管理菜單點擊添加,添加一個任務,我們選擇Bean模式,JobHandler就是我們用XxlJob註解方法或者類的名稱。

添加任務

4、任務添加後,可以啟動或者執行這個任務,執行之後的日誌如下:

執行日誌

相關焦點

  • 分布式調度系統XXL-JOB安裝和簡單使用
    我看了一下 GitHub 上開源的分布式調度系統,目前是 xxl-job 項目是分布式調度開源系統中最多 starts 的(當然也有可能因為這個 xxl-job 出來挺久了)window ,mac 或docker 安裝如果為 window,mac 等安裝,可以先根據github 上的 SQL
  • 3千字帶你搞懂XXL-JOB任務調度平臺
    三、為什麼選擇XXL-JOB實際上更多公司選擇xxl-job,目前xxl-job的github上有15.7k個star,登記公司有348個。毫無疑問elasticjob和xxl-job都是非常優秀的技術框架,接下來我們進一步對比討論,探索一下為什麼更多公司會選擇xxl-job。
  • XXL-JOB v1.6.0 發布,分布式任務調度平臺
    》一、簡介1.1 概述XXL-JOB是一個輕量級分布式任務調度框架,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。1.2 特性1、簡單:支持通過Web頁面對任務進行CRUD操作,操作簡單,一分鐘上手;2、動態:支持動態修改任務狀態、暫停/恢復任務,以及終止運行中任務,即時生效;3、調度HA:「調度中心」基於集群Quartz實現,可保證調度中心HA;4、任務HA:任務"執行器
  • 專訪當當網張亮:深度解讀分布式作業調度框架elastic-job
    日前,筆者採訪了當當網架構師、噹噹技術委員會成員張亮,在本次採訪中他主要分享了對架構師的理解,以及重點解讀了分布式作業調度框架Elastic-job是什麼、架構設計思路、具體模塊的底層及如何實現等。
  • PowerJob全新一代分布式調度與計算框架
    PowerJob(原OhMyScheduler)是全新一代分布式調度與計算框架,能讓您輕鬆完成作業的調度與繁雜任務的分布式計算。簡介主要特性使用簡單:提供前端Web界面,允許開發者可視化地完成調度任務的管理(增、刪、改、查)、任務運行狀態監控和運行日誌查看等功能。
  • 幾種任務調度的 Java 實現方法與比較
    job1 execute job1 execute job2 */ 使用 Timer 實現任務調度的核心類是 Timer 和 TimerTask。 可以看出,用上述方法實現該任務調度比較麻煩,這就需要一個更加完善的任務調度框架來解決這些複雜的調度問題。幸運的是,開源工具包 Quartz 與 JCronTab 提供了這方面強大的支持。
  • XXL-JOB v2.2.0 發布 | 跨語言特性增強
    2、任務複製功能:點擊複製是彈出新建任務彈框,並初始化被複製任務信息; 3、任務手動執行一次的時候,支持指定本次執行的機器地址,為空則從執行器獲取; 4、任務結果丟失處理:調度記錄停留在 "運行中" 狀態超過10min,且對應執行器心跳註冊失敗不在線,則將本地調度主動標記失敗; 5、調度中心升級springboot2.x;因此
  • 【非廣告】分布式調度框架 elastic-job 實踐詳解(超詳細)
    類似這樣場景還有很多很多,很顯然 Quartz 很難滿足我們這種大批量、任務執行周期長的任務調度!因此短板,當當網基於 Quartz 開發了一套適合在分布式環境下能高效率的使用伺服器資源的 Elastic-Job 定時任務框架!
  • JNPF快速開發平臺-簡單快速高效開發java項目
    使用JNPF開發平臺可以簡單、快速、高效的構建各種類型java項目。 JAVA版介紹 JNPF.java版採用前後端分離,可將代碼直接導入idea運行,也可將前後端代碼利用ngnix分開部署。
  • 最受歡迎的 Java Web 開發框架盤點
    在本文,我們來看如今哪些Java Web框架目前最為歡迎。 本文的首選表列表源自Hotframework.com中的Java框架排名,並綜合了其它一些來源,包括博客文章和Github下載數量。 Spring 有眾多用例,隨著SpringBoot的推出,對於正向容器遷移的公司來說,使用Spring是一個很好的解決方案,它會簡化正在運行的應用程式所需的支持組件。 Spring入門與SpringInitializr一樣簡單,選擇你希望的構建框架以及希望包含在初始應用程式中的所有Spring項目。
  • XXL-JOB v2.1.0 發布,分布式任務調度平臺
    特性 1、簡單:支持通過Web頁面對任務進行CRUD操作,操作簡單,一分鐘上手; 2、動態:支持動態修改任務狀態、啟動/停止任務,以及終止運行中任務,即時生效; 同時,也支持手動錄入執行器地址; 6、彈性擴容縮容:一旦有新執行器機器上線或者下線,下次調度時將會重新分配任務; 7、路由策略:執行器集群部署時提供豐富的路由策略,包括:第一個、最後一個、輪詢、隨機、一致性HASH、最不經常使用、最近最久未使用、故障轉移、忙碌轉移等; 8、故障轉移:任務路由策略選擇"故障轉移"情況下,如果執行器集群中某一臺機器故障
  • 這些常用ETL批量任務調度平臺框架組件,你都知道幾個?
    Cron-like Scheduler1.1 Python任務調度框架 APScheduler一個基於Python,提供類似Cron功能,並深受Java Quartz 影響的輕量級進程內任務調度框架。APScheduler provides most of the major features that Quartz does, but it also provides features not present in Quartz (such as multiple job stores).
  • 沒想到啊,Java操作Excel竟然這麼簡單!
    前言在工作中,使用excel表格處理數據是很常見的操作,本文就來講解下如何使用開源輪子實現下載、導入、導出的功能。在之前,很多Java程式設計師都喜歡使用POI的類庫來操作excel,但是非常的不方便,不僅代碼寫的很臃腫,還要處理各種office版本兼容問題,最怕的就是使用不當很容易造成內存溢出,因此今天給大家推薦阿里的一款開源項目 easyexcel。
  • Java 程式設計師如何使用 Shiro 框架
    Shiro必須先從它的架構談起,作為一款安全框架Shiro的設計相當精妙。Shiro本身已經實現了所有的細節,用戶可以完全把它當做一個黑盒來使用。SecurityUtils對象,本質上就是一個工廠類似Spring中的ApplicationContext。Subject是初學者比較難於理解的對象,很多人以為它可以等同於User,其實不然。Subject中文翻譯:項目,而正確的理解也恰恰如此。它是你目前所設計的需要通過Shiro保護的項目的一個抽象概念。
  • JAVA面試題:你在項目中使用多線程的場景?
    背景在JAVA面試時,很多面試官都會問多線程在項目中的實際應用場景,這個時候我們通常不知道如何回答。因為我們大多數程式設計師通常都是和業務代碼打交道,需要用到多線程的地方我們容器和框架一般都替我們處理好了,所以我們很少有機會接觸到多線程編程。
  • 一文輕鬆搞定批處理框架 Spring Batch
    這類工作即為「批處理」  為什麼使用Spring Batch  Spring Batch 作為 Spring 的子項目,是一款基於 Spring 的企業批處理框架。通過它可以構建出健壯的企業批處理應用。
  • Javaweb開發學習路線及Java三大框架分享
    Java在客戶端的應用有java applet,不過使用得很少,Java在伺服器端的應用非常的豐富,比如Servlet,JSP和第三方框架等等。Java技術對Web領域的發展注入了強大的動力。框架是程式設計師們必學的知識點,而且是十分重要的應用,Spring、Struts、Hibernate也是經典中的經典,最常用的框架類型。作為Java新手應該如何去學習呢?
  • Java【IO系列】基礎篇—1. IO框架
    在這裡面,最根本的問題還是理解,使用的目的也是為了更加深入的理解。最近,抽空整理以前所學的java基礎。整理也就是重新學習的過程,在這個學習過程中,我一直嘗試著站在一個更高的角度來看問題,將這些類和接口的原理和思想理解的更加透徹一些!1. java io簡介java io系統的設計初衷,就是為了實現「文件、控制臺、網絡設備」這些io設置的通信。
  • 實戰:十分鐘實現基於JWT前後端分離的權限框架
    ,很難學到這類相關的流程和技術,本文梳理一個簡單的場景,實現一個基於jwt前後端分離的權限框架。「本項目已實現如下功能」:BaseController封裝,方便取出用戶信息Redis安裝和啟動使用Docker一行命令構建啟動Redis,命令如下 docker run -itd --name
  • GitHub上最受歡迎的5大Java項目
    但是開發人員最興奮的是哪些項目?今天,我們來看看GitHub上一些最流行的Java倉庫。1. MockitoMockito 並不是無酒精混合飲料的意思。Mockito 是一個用Java編寫的單元測試框架,Mockito 2.0為高級框架集成提供了更好的API。