XXL-JOB分片調度

本文源碼地址:源碼地址

分佈式定時任務,其實主要爲是爲了解決下面的幾個問題:

1、單節點不安全問題

2、多節點,重複執行的問題

3、任務調度的問題

所以在路由策略上不管選擇什麼基本上都是單節點執行,除非節點掛了,其他的節點纔會喚起。但是XXL-JOB提供了一種比較有意思的路由策略,分片路由

我的理解啊,這個應該是解決數據分片的問題出來的,現在的數據分庫分片已經是常用狀態了。首先我們來說下代碼實現吧

@Component
public class Demo2Handler {


    @XxlJob(value = "demo3Job")
    public ReturnT<String> demo3JobHandler(String param) throws Exception{
        // 分片參數
        ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
        // 業務邏輯
        for (int i = 0; i < shardingVO.getTotal(); i++) {
            if (i == shardingVO.getIndex()) {
                System.out.println("demo3");
                XxlJobLogger.log("第 {} 片, 命中分片開始處理", i);
            } else {
                XxlJobLogger.log("第 {} 片, 忽略", i);
            }
        }
        return ReturnT.SUCCESS;
    }
}

跟普通的代碼沒什麼區別。唯一的區別是每臺機器自動自行自己的任務,這個就是根據分片參數來定的。

//執行器數量

int number = shardingVO.getTotal();

//當前分片

int index = shardingVO.getIndex();

那麼這個可以用來幹嘛呢,比較有意思的一種應用。比如要處理一個比較大的數據表,如果單節點操作,就是全表掃描的咯。

那麼可能會比較慢,那麼如果我們把這個拆開給好幾個節點執行,那是不是就會快上很多呢,

SQL的簡單應用如下:

SELECT * FROM student
WHERE `status` = 0
AND mod(id,#{number}) = #{index}  //number 分片總數,index當前分片數
order by id desc

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章