XXL Job 是一個開源的分布式任務調度平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展的分布式任務調度框架。
這兩天咱們開發的 AI Cloud 項目中,也使用到了 XXL Job 來執行分布式任務的調度,可以看出它的部署和使用雖然步驟很多,但用起來還是很簡單的。
因為其本身為 Spring Boot 項目,所有對于 Java 程序員來說很友好,而且它還提供中文控制臺,所以這也是他能在國內分布式任務調度系統這塊一直流行的原因,如下圖所示:
那么接下來咱們就來聊聊,XXL Job 的路由策略,以及路由策略中分片任務的執行原理。
XXL Job 的路由策略主要作用是在任務執行器集群環境中,決定如何選擇合適的執行器來執行任務。
XXL Job 路由策略包含以下幾個:
其中:
也就是說在這些路由策略中,最復雜的就是分片廣播了。
所謂的分片廣播也就是分片(執行)任務,它是將一個大任務劃分為多個子任務并行執行,以提高效率。
假設,我們現在要使用分片任務執行一個大數據的查詢與處理,此時的實現代碼如下:
import com.xxl.job.core.context.XxlJobHelper;import com.xxl.job.core.log.XxlJobLogger;import org.springframework.stereotype.Component;import java.util.List;@Componentpublic class ShardingBroadcastJob { @XxlJob("shardingBroadcastTask") public void execute(String param) { // 獲取分片參數:分片總數和分片序列號 int shardIndex = XxlJobHelper.getShardIndex(); int shardTotal = XxlJobHelper.getShardTotal(); XxlJobLogger.log("當前節點的 index={}, 總結點數={}, 參數={}", shardIndex, shardTotal, param); // 模擬獲取數據列表 List<String> dataList = getDataList(); // 執行分片邏輯 shardingExecute(dataList, shardIndex, shardTotal); } public List<String> getDataList() { // 這里可以根據實際情況從數據庫或其他數據源獲取數據列表 // 為了示例簡單,直接返回一個固定的列表 return List.of("data1", "data2", "data3", "data4", "data5", "data6", "data7", "data8", "data9", "data10"); } public void shardingExecute(List<String> dataList, int shardIndex, int shardTotal) { XxlJobLogger.log("開始執行分片任務,當前分片={}, 總分片數={}", shardIndex, shardTotal); // 計算當前分片應處理的數據范圍 int start = (shardIndex * dataList.size()) / shardTotal; int end = ((shardIndex + 1) * dataList.size()) / shardTotal; // 處理當前分片的數據 for (int i = start; i < end; i++) { String data = dataList.get(i); XxlJobLogger.log("處理數據: {}", data); // 在此處添加具體的數據處理邏輯 } XxlJobLogger.log("分片任務執行完成"); }}
在上述代碼中,在execute方法中,通過 XxlJobHelper.getShardIndex() 獲取當前分片序號,通過 XxlJobHelper.getShardTotal() 獲取總分片數。然后模擬獲取了一個數據列表 dataList,接下來使用 shardingExecute 方法執行分片邏輯。
在 shardingExecute 方法中,根據分片序號和總分片數計算出當前分片應處理的數據范圍,然后遍歷該范圍內的數據并進行處理(此處僅打印數據,實際應用中可添加具體的數據處理邏輯)。
在實際使用時,需要將任務部署到 XXL Job 執行器集群中,并在調度中心配置相應的任務,選擇分片廣播的路由策略。這樣,當調度中心觸發任務時,所有執行器都會執行該任務,并根據分片參數處理相應的數據分片,這樣就能提升程序整體的執行效率了。
了解了 XXL Job 的代碼實現就能明白其運行原理,它的實現原理如下:
本文鏈接:http://www.tebozhan.com/showinfo-26-101719-0.html說說XXLJob分片任務實現原理?
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
下一篇: 軟件版本號為什么那么奇怪?