xxl job詳細使用指南

2021-10-18 17:55:04 字數 3615 閱讀 2534

本篇文章承接上文《xxl-job快速入門指南》,上一次和大家簡單介紹了下 xxl-job 的由來以及使用方法,本篇文章將會詳細介紹一些高階使用方法及特性。

上文中我們在新建乙個任務的時候發現有很多的選項,現在我們來詳細聊一聊他們的作用。

路由策略是指乙個任務可以由多個執行器完成,那具體由哪乙個完成呢,這就要看我們指定的路由策略了,這個引數當執行器做集群部署的時候才有意義。

執行模式分為兩種,一種是bean,一種是glue

阻塞處理策略指的是任務的一次執行還沒有結束,下一次排程的時間又到了,比如乙個任務執行的時間是三分鐘,但是設定的頻率是每兩分鐘執行一次,這時候第一次還沒執行完,第二次怎麼辦?

一共有三個選項,如下圖:

當我們要寫乙個 job 的時候,任務是相互依賴的。比如下面我要幹這麼多事情,a幹完了**,b幹完了幹c,c幹完了幹d。

解決這種問題的時候思路有兩種。第一種是把這麼多邏輯寫成乙個大 job,序列化。第二種就是用子任務,在乙個任務末尾觸發另乙個任務。

如果我們需要在本任務執行結束並且執行成功的時候觸發另外乙個任務,那麼就可以把另外的任務作為本任務的子任務執行,因為每個 job 都有自己的唯一 id,所以只需在子任務一欄填上任務 id 即可。

超時的意思就是如果在指定時間內沒有返回結果,就不再等待結果。

假設我們有個任務需要處理20萬條資料,每條資料的業務邏輯處理要0.1秒,對於普通任務單執行緒來講,需要處理5.5個小時才能處理完。這時候你想要提高速度,你的第一反應就是開多執行緒跑嘛,我開3個,差不多就是乙個多小時就能搞定了,你的思路完全正確!

這時候將會是下面這種情況,在執行器0上有三個執行緒在拼命的工作,但是這樣大家覺得好不好?不好吧,我執行器0在這累的要死,你執行器1和執行器2在那休息,旱的旱死,澇的澇死,首先這是乙個分配不均勻的問題。其次當執行器0三個執行緒都在工作的時候會浪費它的資源,使之這台伺服器的效能也會下降,所以這是一種不好的方式。

這時候就要用到我們的分片任務了,真正好的方案如下,這是乙個既科學又合理的方案。三颱執行器各自起乙個執行緒來共同把這個任務完成!

這時候有個問題,三颱機器大家都執行同一段**,那豈不是亂套了,這個資料你也執行一遍,我也執行一遍,它也執行一遍。解決的思路很簡單,一台執行器處理總數的1/3,大家把需要幹的活平均分了嘛,我幹1/3,你幹1/3,它幹1/3,這樣也不會產生衝突。

分片任務在執行的時候,排程器會給每個執行器傳送乙個不同的分片序號,分片的最大序號跟執行器的總數量是一樣的,確保每個執行器都會執行到這個任務,比如上圖中第乙個執行器拿到分片序號0,第二台執行器拿到分片序號1,第三台執行器拿到分片序號2。那現在就好辦了,我們只需要把處理的資料進行模3取餘,餘數為0的資料就由執行器0幹,餘數為1的資料就由執行器1幹,餘數為2的資料就由執行器2幹。

我們獲取資料的sql可以這樣寫:

//count分片總數,index當前分片數

select id,name,password from student where

status=0

andmod

(id,

#)=# order by id desc limit 1000;

在**中實現這樣寫

新建任務的時候選擇分片廣播,填上對應的jobhandler即可

最後需要說明一下,分片的資料量不一定是完全均等的資料量,上面的取模只是乙個舉例,乙個思路。我們也可以把0、1、2替換成其他條件去從所有資料中獲取部分資料,比如分片序號0的機器我查2023年的資料,分片序號1的機器我查2023年的資料,分片序號2的機器我查2023年的資料。具體怎麼分全靠我們的業務來選擇。

如果增加或者減少了節點,總分片數和最大分片序號會實時發生變化。

命令任務比較有用,比如我們需要定時重啟資料庫(service restart),定時備份資料檔案(cp tar rm),定時清理日誌(rm)。

命令列的使用也很簡單,只需要把執行的命令作為引數傳遞進來即可

現在我們來新建乙個命令列任務

啟動一下任務,每過5秒,這個計算器就自動彈出來了

週期性任務就是在任務的開始和銷毀的時候執行自定義的方法,做一些自己想做的事

小夥伴們,關於xxl-job的兩篇教程到這邊就要結束了,最後我在進行一下總結。

負責管理排程資訊,按照排程配置發出排程請求,自身不承擔業務**。排程系統與任務解耦,提高了系統可用性和穩定性,同時排程系統效能不再受限於任務模組;

排程中心支援視覺化、簡單且動態的管理排程資訊,包括任務新建,更新,刪除,glue開發和任務報警等,所有上述操作都會實時生效,同時支援監控排程結果以及執行日誌,支援執行器failover。

排程中心會把排程請求放進乙個非同步排程佇列,理論上預設配置下的排程中心單機能夠支撐5000任務併發並且穩定執行,但是由於受網路延遲、db讀寫耗時不同、任務排程密集程度不同,會導致任務量上限會上下波動。如果需要支撐更多的任務量,可以通過調大排程執行緒數、降低排程中心與執行器ping延遲、提公升機器配置等。

xxl.job.triggerpool.fast.max=200

xxl.job.triggerpool.slow.max=100

負責接收排程請求並執行任務邏輯,任務模組專注於任務的執行等操作,開發和維護更加簡單和高效;

接收排程中心的執行請求、終止請求和日誌請求等。

從整體來看,xxl-job架構依賴少,功能強大,簡約而不簡單,方便部署,易於使用。原創不易,覺得不錯的話,請點乙個贊

sqlmap詳細使用指南(1)

1.sqlmap update 更新公升級 2.sqlmap u http current user 獲取當前使用者名稱 3.sqlmap u http current db 獲取當前數 據庫名稱 4.sqlmap u http tables d db name 列表名 5.sqlmap u htt...

C 記憶體對齊詳細使用指南

一 為什麼會有c 記憶體對齊 以下內容節選自 intel architecture 32 manual 為了提高程式的效能,資料結構 尤其是棧 應該盡可能地在自然邊界上對齊。原因在於,為了訪問未對齊的記憶體,處理器需要作兩次記憶體訪問 然而,對齊的記憶體訪問僅需要一次訪問。乙個字或雙字運算元跨越了4...

C 成員函式指標詳細使用指南

在c 程式中,很多函式是成員函式,即這些函式是某個類中的一部分。你不可以像乙個普通的函式指標那樣指向乙個成員函式,正確的做法應該是,你必須使用乙個成員函式指標。乙個成員函式的指標指向類中的乙個成員函式,並和以前有相同的引數,宣告如下 float someclass my memfunc ptr in...