javascript
SpringBoot2 集成 xxl-job任务调度中心_路由策略
文章目錄
- 一、簡述
- 二、故障轉移演示
- 2.1. 啟動2個執行器
- 2.2. 添加執行器ip
- 2.3. 故障轉移策略
- 2.4. 啟動任務
- 2.5. 模擬8081執行器宕機
- 2.6. 結論
- 三、輪訓策略演示
- 3.1. 啟動2個執行器
- 3.2. 添加執行器ip
- 3.3. 輪訓策略
- 3.4. 啟動任務
- 3.5. 日志分析
- 3.6. 故障轉移
- 3.7. 重新啟動8082執行器
- 四、輪訓策略演示
- 4.1. 啟動3個執行器
- 4.2. 添加執行器ip
- 4.3. 分片廣播策略
- 4.4. 啟動任務
- 4.5. 案例代碼
- 4.6. 執行一次測試
- 4.7. 執行器效果
- 4.8. 結論
一、簡述
路由策略:執行器集群部署時提供豐富的路由策略,包括:第一個、最后一個、輪詢、隨機、一致性HASH、最不經常使用、最近最久未使用、故障轉移、忙碌轉移等;
| FIRST(第一個) | 固定選擇第一個機器 | |
| LAST(最后一個) | 固定選擇最后一個機器 | |
| ROUND(輪詢) | 負載均衡+故障轉移 | 經常使用 |
| RANDOM(隨機) | 隨機選擇在線的機器 | |
| FAILOVER(故障轉移) | 按照順序依次進行心跳檢測,第一個心跳檢測成功的機器選定為目標執行器并發起調度 | 經常使用 |
| SHARDING_BROADCAST(分片廣播) | 廣播觸發對應集群中所有機器執行一次任務, 同時系統自動傳遞分片參數;可根據分片參數開發分片任務 | 經常使用 |
二、故障轉移演示
2.1. 啟動2個執行器
2.2. 添加執行器ip
2.3. 故障轉移策略
2.4. 啟動任務
發現任務只在8081執行器上,每5秒執行一次。8082執行器上沒有執行。
2.5. 模擬8081執行器宕機
停止8081執行器,最后一次執行的時間是2021-02-15 14:59:01
8082執行器,第一次執行的時間是2021-02-15 14:59:06
正好接上了,對吧!
2.6. 結論
故障轉移策略只會運行在一臺8081執行器上,當8081執行器宕機,就會轉移到8082執行器上繼續執行任務。
三、輪訓策略演示
3.1. 啟動2個執行器
因為修改策略和執行器無關,如果上面啟動了,此步驟可以跳過
3.2. 添加執行器ip
因為修改策略和執行器無關,如果上面啟動了,此步驟可以跳過
3.3. 輪訓策略
3.4. 啟動任務
3.5. 日志分析
8081執行器,執行的時間是
2021-02-15 15:09:13
2021-02-15 15:09:23
2021-02-15 15:09:33
2021-02-15 15:09:43
2021-02-15 15:09:53
8082執行器,執行的時間是
2021-02-15 15:09:18
2021-02-15 15:09:28
2021-02-15 15:09:38
2021-02-15 15:09:48
2021-02-15 15:09:58
從以上數據分析得出,任務是負載均衡執行的。
3.6. 故障轉移
8082執行器停止,模擬宕機,最后一次執行的時間是2021-02-15 15:14:19
當8082宕機后,最后執行的時間是
2021-02-15 15:13:59
2021-02-15 15:14:09
2021-02-15 15:14:19
當8082宕機后,8081執行器,繼續執行的時間是
2021-02-15 15:14:24
2021-02-15 15:14:34
2021-02-15 15:14:44
2021-02-15 15:14:54
2021-02-15 15:15:04
8081執行器繼續執行任務,但是是每隔10秒
3.7. 重新啟動8082執行器
8082執行器任務開始的時間
2021-02-15 15:18:50
2021-02-15 15:18:59
2021-02-15 15:19:09
2021-02-15 15:19:19
2021-02-15 15:19:29
8081執行器任務執行的時間
2021-02-15 15:18:54
2021-02-15 15:19:04
2021-02-15 15:19:14
2021-02-15 15:19:24
2021-02-15 15:19:34
2021-02-15 15:19:45
任務繼續輪序負載每個5秒執行
四、輪訓策略演示
4.1. 啟動3個執行器
4.2. 添加執行器ip
因為修改策略和執行器無關,如果上面啟動了,此步驟可以跳過
4.3. 分片廣播策略
4.4. 啟動任務
4.5. 案例代碼
package com.gblfy.distributedjob.task;import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component;import java.util.Arrays; import java.util.List;@Component public class TaskExecute {private final static Logger logger = LoggerFactory.getLogger(TaskExecute.class);/*** 任務調度入口* 分片廣播任務* <p>* 參數1: 執行日期 executeDate 2021-02-15* 參數2: 執行標識 executeFlag I-增量 F-全量* 參數3: 表名稱 tableName sys_user* 參數4: 管理機構 manageCom 86* 參數5: 執行場景 executeScene UPDATE* </p>*/@XxlJob("myJobHandler")public void shardingJobHandler() throws Exception {// 分片參數int shardIndex = XxlJobHelper.getShardIndex();int shardTotal = XxlJobHelper.getShardTotal();XxlJobHelper.log("分片參數:當前分片序號 = {}, 總分片數 = {}", shardIndex, shardTotal);logger.info("分片參數:當前分片序號 = {}, 總分片數 = {}", shardIndex, shardTotal);List<Integer> list = Arrays.asList(1, 2, 3, 4);// 業務邏輯for (Integer i : list) {if (i % shardTotal == shardIndex) {logger.info("myXxlJobHandler execute...user={}", i);XxlJobHelper.log("第 {} 片, 命中分片開始處理", i);}}} }4.6. 執行一次測試
4.7. 執行器效果
4.8. 結論
分片廣播為了把數據進行分片處理,簡言之,大量訂單數據根據不同的訂單號取模,分片機器分別處理屬于自己片區的訂單數據,減輕服務器壓力。
總結
以上是生活随笔為你收集整理的SpringBoot2 集成 xxl-job任务调度中心_路由策略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL的错误:No query sp
- 下一篇: linux 15秒 搭建VSFTPD文件