xxl-job詳解

目錄

  • 1、xxl-job介紹
    • 1.1 xxl-job的原理
      • 1.1.1 執行器的注冊和發現
      • 1.1.2 調度中心調用執行器
    • 1.2 quartz和xxl-job對比
  • 2、快速入門
    • 2.1 下載并啟動
    • 2.2 在調度中心新增定時任務
    • 2.3 任務運行模式(BEAN、GLUE)
    • 2.4 xxl-job的總結
  • 3、后端專屬技術群

1、xxl-job介紹

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

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

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

? 調度中心:統一管理任務調度平臺上的調度任務,負責觸發調度執行,并且提供任務管理平臺。

? 執行器:接收調度中心的調度并且執行,可以直接執行也可以集成到項目中。

每一個xxl-job微服務 = 獨立的人(執行器)
每一個Handler = 餐桌上的食物
"可視化界面可以決定哪個人(執行器)吃或者不吃某個食物(定時任務)"

? 調度中心和執行器兩個模塊分開部署,相互分離,兩者之間通過RPC進行通信,其中調度中心主要是提供一個平臺,管理調度信息,發送調度請求,自己不承擔業務代碼,而執行器接受調度中心的調度執行業務邏輯。
在這里插入圖片描述

1.1 xxl-job的原理

1.1.1 執行器的注冊和發現

執行器的注冊和發現主要是關系兩張表:

xxl_job_registry:執行器的實例表,保存實例信息和心跳信息,xxl_job_group:每個服務注冊的實例列表。

執行器啟動線程每隔30秒向注冊表xxl_job_registry請求一次,更新執行器的心跳信息,調度中心啟動線程每隔30秒檢測一次xxl_job_registry,將超過90秒還沒有收到心跳的實例信息從xxl_job_registry刪除,并更新xxl_job_group服務的實例列表信息。

1.1.2 調度中心調用執行器

1、調度中心的操作:

調度中心通過循環不停的:

在這里插入圖片描述

2、執行器的操作:

  • 執行器接收到調度中心的調度信息,將調度信息放到對應的任務的等待隊列中
  • 執行器的任務處理線程從任務隊列中取出調度信息,執行業務邏輯,將結果放入一個公共的等待隊列中(每個任務都有一個單獨的處理線程和等待隊列,任務信息放入該隊列中)
  • 執行器有一個專門的回調線程定時批量從結果隊列中取出任務結果,并且回調告知調度中心

1.2 quartz和xxl-job對比

  • quartz采用api的方式調用任務,不方便,但是xxl-job使用的是管理界面。
  • quartz比xxl-job代碼侵入更強
  • quartz調度邏輯和QuartzJobBean耦合在一個項目中,當任務增多,邏輯復雜的時候,性能會受到影響
  • quartz底層以搶占式獲取db鎖并且由搶占成功的節點運行,導致節點負載懸殊非常大;xxl-job通過執行器實現協同分配式運行任務,各個節點比較均衡。
    在這里插入圖片描述

2、快速入門

2.1 下載并啟動

首先從GitHub上面將項目clone下來,如果網絡問題導致速度慢也可以從Gitee上面拉取

GitHub地址:https://github.com/xuxueli/xxl-jobGitee地址:https://gitee.com/xuxueli0323/xxl-job

1、源碼下載解壓,用idea打開,結果如圖:
在這里插入圖片描述

doc:文檔資料,包括"調度數據庫"建表腳本
xxl-job-core:公共 Jar 依賴
xxl-job-admin:調度中心,項目源碼,spring boot 項目,可以直接啟動
xxl-job-executor-samples:執行器,sample 示例項目,其中的 spring boot 工程,可以直接啟動。可以在該項目上進行開發,也可以將現有項目改造生成執行器項目。

2、初始化數據庫,運行doc/db/tables_xxl_job.sql中的sql生成數據庫和表,如圖:
在這里插入圖片描述

  數據庫中表介紹:- 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-admin模塊,在application.properties中進行后臺的配置,修改數據庫信息
在這里插入圖片描述
部署調度中心

在這里插入圖片描述

調度中心訪問地址:http://localhost:8080/xxl-job-admin ,默認登錄賬號 “admin/123456”, 登錄后運行界面如下圖所示。

在這里插入圖片描述
4、執行器配置及部署
在這里插入圖片描述
創建一個新的定時任務,定位到jobhandler下,新增定時任務
在這里插入圖片描述

package com.xxl.job.executor.service.jobhandler;import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;import static com.xxl.job.core.biz.model.ReturnT.SUCCESS;/*** @author zh* @description 編寫自己的定時任務handler* @date 2023/12/8 14:55*/@Component
public class MyJobHandler {/*** 簡單任務示例【bean模式】* @param param* @return*/@XxlJob(value = "myJobHandler", init = "", destroy = "")public ReturnT<String> demoJobHandler(String param) throws InterruptedException {//模擬業務執行System.out.println("hello xxl-job..,");//返回執行結果return SUCCESS;}
}

2.2 在調度中心新增定時任務

1、選中右側任務管理 - 新增
在這里插入圖片描述
2、啟動XxlJobExecutorApplication執行器
在這里插入圖片描述
3、在調度中心,啟動定時任務
在這里插入圖片描述
4、查看結果
在這里插入圖片描述

2.3 任務運行模式(BEAN、GLUE)

運行模式分為兩種,一種是BEAN,一種是GLUE

BEAN模式:這個是在項目中寫 Java 類,然后在 JobHandler 里填上 @XxlJob 里面的名字,是在執行器端編寫的
GLUE模式:支持Java、Shell、Python、PHP、Nodejs、PowerShell,這個時候代碼是直接維護在調度中心這邊的

2.4 xxl-job的總結

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

3、后端專屬技術群

后端專屬技術群
我建了一個后端專屬技術群,歡迎從事編程開發、技術招聘HR進群,也歡迎大家分享自己公司的內推信息,相互幫助,一起進步!
文明發言,以交流技術、職位內推、行業探討為主

圖片

關注公眾號,拉你進群

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207437.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207437.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207437.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python源碼30:海龜畫圖turtle畫紫色的小熊

turtle模塊是一個Python的標準庫之一&#xff0c;它提供了一個基于Turtle graphics的繪圖庫。Turtle graphics是一種流行的繪圖方式&#xff0c;它通過控制一個小海龜在屏幕上移動來繪制圖形。 turtle模塊可以讓您輕松地創建和控制海龜圖形&#xff0c;從而幫助您學習Python編…

Qt12.8

使用手動連接&#xff0c;將登錄框中的取消按鈕使用qt4版本的連接到自定義的槽函數中&#xff0c;在自定義的槽函數中調用關閉函數 將登錄按鈕使用qt5版本的連接到自定義的槽函數中&#xff0c;在槽函數中判斷ui界面上輸入的賬號是否為"admin"&#xff0c;密碼是否為…

lv11 嵌入式開發 中斷控制器14

目錄 1 中斷控制器 ?編輯 2 Exynos4412下的中斷控制器 2.1 概述 2.2 特征 ?編輯 2.3 中斷狀態 2.4 中斷類型 2.5 中斷控制器GIC中斷表 3 中斷控制器寄存器詳解 3.1 ICDDCR&#xff08;Interrupt Controller Distributor Control Register&#xff09; 3.2 ICDISER…

當你還在糾結用什么技術時,這位獨立開發者用PHP和JavaScript實現財務自由了

大家好&#xff0c;我是風箏&#xff0c;微信搜「古時的風箏」&#xff0c;更多干貨 一個個人產品賣了5400萬&#xff0c;這大概就是最成功的獨立開發者了吧 這位獨立開發者是 levelsio&#xff0c;他的真名是 Pieter Levels&#xff0c;是一位荷蘭的獨立開發者。看看人家的工…

WPF DataGrid 動態增加列

方式一&#xff1a;通過DataGrid 數據源即DataTable&#xff0c;在DataTable里面動態增加了列之后&#xff0c;重新構造每一行數據&#xff0c;設置DataGrid.ItemsSource null; 然后再重新設置ItemsSource到DataTable public partial class MainWindow : Window{public MainWi…

【Java基礎系列】Cron表達式入門

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

優秀案例 | 元宇宙雙語財經科技主播“舒望”主持首屆粵港澳大灣區元宇宙國際傳播論壇

12月6日&#xff0c;由南方財經全媒體集團指導、大灣區元宇宙國際傳播實驗室(GBA MIC Lab&#xff09;主辦、南財國際傳播中心和21世紀經濟報道共同承辦&#xff0c;以“多元共創開放共享”為主題的首屆粵港澳大灣區元宇宙國際傳播論壇在廣州隆重開幕。 “立足灣區&#xff0c;…

Kubernetes - 為什么 K8S 在容器里不能調用自己?

問題描述 最近遇到一個神奇的現象&#xff0c;在 K8S 的 POD 容器中&#xff0c;比如 pod name&#xff1a;mini-appnamespace&#xff1a;devport&#xff1a;5050 那么&#xff0c;是無法在 mini-app 容器里執行以下命令&#xff0c;如果執行&#xff0c;會一直卡在這條命…

一文詳解Java單元測試Junit

文章目錄 概述、Junit框架快速入門單元測試概述main方法測試的問題junit單元測試框架優點&#xff1a;使用步驟&#xff1a; 使用案例包結構 Junit框架的常見注解測試 概述、Junit框架快速入門 單元測試概述 就是針對最小的功能單元&#xff08;方法&#xff09;&#xff0c;…

ROS rosbag

在ROS中的rosbag是一個命令行工具&#xff0c;主要用于記錄、回放和分析rostopic中的數據。它可以將指定rostopic中的數據記錄到.bag后綴的數據包中&#xff0c;以便于進行離線分析和處理。 在ROS系統中&#xff0c;rosbag可以通過命令行工具或ROS節點來使用。 通過rosbag命令…

數字圖像處理(實踐篇)十九 漫水填充

目錄 一 漫水填充算法--FloodFill 二 涉及的函數 三 實踐 一 漫水填充算法--FloodFill FloodFill漫水填充算法就是選中與種子點相連接的區域&#xff0c;利用指定顏色進行區域顏色填充。可以通過設置連通方式或像素的范圍控制填充的效果。通常是用來標記或者分離圖像的一部…

進程地址空間

引入地址空間 靜態變量和棧空間變量 靜態變量默認是被初始化的 存放在初始化和為初始化空間中 static已經變成了全局變量 命令行參數和環境變量的增長方向 這里觀察的是命令行參數和環境變量的地址 觀察命令行和環境變量表的地址 進程地址空間 如果他們是同一塊兒空間&am…

Ubuntu22.04 交叉編譯fdk-aac for Rv1106

一、下載fdk-aac git clone https://github.com/mstorsjo/fdk-aac.git 二、編譯 mkdir build cd buildcmake -DCMAKE_CXX_COMPILER/opt/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g -DCMAKE_C_COMPILER/opt/arm-rockchip830-linux-…

軟件測試——集成測試

集成測試是在單元測試之后&#xff0c;將各個獨立單元&#xff08;通常是已經通過單元測試的模塊或組件&#xff09;組合在一起&#xff0c;測試它們在一起協同工作的過程。以下是進行集成測試的一般步驟和最佳實踐&#xff1a; 1. 明確定義集成測試的目標 確定集成測試的目標…

麒麟v10 數據盤初始化 gpt分區

麒麟v10 數據盤初始化 gpt分區 1、查看磁盤 lsblk2 、分區 parted2.1、 設置磁盤分區形式2.2、 設置磁盤的計量單位為磁柱2.3、 分區2.4、 查看分區 3、分區格式化4、 掛載磁盤4.1、新建掛載目錄4.2、掛載磁盤4.3、查看掛載結果 5、設置開機自動掛載磁盤分區5.1、 查詢磁盤分區…

ClamAV開源病毒庫使用例子

ClamAV是一個開源的反病毒引擎&#xff0c;用于檢測惡意軟件和病毒。ClamAV提供了一個名為cl_scanfile的函數&#xff0c;用于掃描單個文件是否包含病毒。以下是一個使用cl_scanfile函數的示例代碼&#xff1a; 首先&#xff0c;確保已經安裝了ClamAV庫。在Debian/Ubuntu系統中…

用AI來糾正錯別字和修飾文字

▲ 搜索“大龍談智能內容”關注GongZongHao▲ 在使用谷歌翻譯或百度翻譯將英語翻譯成中文時&#xff0c;有些句子讀起來不太流暢。我嘗試使用AI來幫助我修改翻譯后的中文&#xff0c;希望能讓句子更符合中文習慣。 使用百度文心一言嘗試一下。 文心一言的鏈接是這個&#x…

VUE3給table的head添加popover篩選、時間去除時分秒、字符串替換某字符

1. VUE3給table的head添加popover篩選 <el-tableref"processTableRef"class"process-table"row-key"secuId":data"pagingData"style"width: 100%"highlight-current-row:height"stockListHeight":default-exp…

RHEL/CentOS的firewalld防火墻服務配置

從 RHEL/CentOS 7開始&#xff0c;使用新的防火墻服務——firewalld。這里介紹該防火墻服務的基本用法 一、防火墻服務管理&#xff1a;從 RHEL/CentOS 7開始采用Systemd作為新的系統管理器&#xff0c;而systemctl則是Systemd中用于管理服務的命令 # 啟動防火墻服務 systemct…

谷歌Gemini剛發就惹質疑:測試標準有失偏頗,效果視頻疑似剪輯

夢晨 克雷西 發自 凹非寺 量子位 | 公眾號 QbitAI 谷歌憋了許久的大招&#xff0c;雙子座Gemini大模型終于發布&#xff01;其中一圖一視頻最引人注目&#xff1a; 一圖&#xff0c;MMLU多任務語言理解數據集測試&#xff0c;Gemini Ultra不光超越GPT-4&#xff0c;甚至超越了…