调度不重不漏逻辑优化:调度时间轮单刻度数据去重,避免极端情况下任务重复执行;时间轮转动时校验临近刻度,避免极端情况下遗漏刻度;

pull/72/head
xuxueli 4 months ago
parent aadfa5eca1
commit 3521172a47

@ -2578,7 +2578,7 @@ public void execute() {
- 6、【优化】任务调度中心调度锁逻辑优化事务SQL下沉至Mapper层统一管理并增加测试用例提升代码可读性以及可维护性
- 7、【优化】调度组件日志完善提升边界情况下问题定位效率
- 8、【修复】调度预读任务数量调整改为调度线程池大小x10降低事务颗粒度提升性能及稳定性
- 9、【优化】调度时间轮单刻度数据去重避免极端情况下任务重复执行
- 9、【优化】调度不重不漏逻辑优化:调度时间轮单刻度数据去重,避免极端情况下任务重复执行;时间轮转动时校验临近刻度,避免极端情况下遗漏刻度;
- 7、【ING】UI框架重构升级提升交互体验
- 8、【ING】调整资源加载逻辑移除不必要的拦截器逻辑提升页面加载效率

@ -199,12 +199,12 @@ public class JobScheduleHelper {
List<Integer> ringItemData = new ArrayList<>();
// collect rind data, by second
int nowSecond = Calendar.getInstance().get(Calendar.SECOND); // 避免处理耗时太长,跨过刻度,向前校验一个刻度;
for (int i = 0; i < 2; i++) {
int nowSecond = Calendar.getInstance().get(Calendar.SECOND);
for (int i = 0; i <= 2; i++) { // 避免调度遗漏:处理耗时太长、跨过刻度,除当前刻度外 + 向前校验2个刻度
List<Integer> ringItemList = ringData.remove( (nowSecond+60-i)%60 );
if (CollectionTool.isNotEmpty(ringItemList)) {
// distinct for each second
List<Integer> ringItemListDistinct = ringItemList.stream().distinct().toList();
List<Integer> ringItemListDistinct = ringItemList.stream().distinct().toList(); // 避免调度重复:重复推送时间轮刻度,去重只保留一个;;
if (ringItemListDistinct.size() < ringItemList.size()) {
logger.warn(">>>>>>>>>>> xxl-job, time-ring found job repeat beat : " + nowSecond + " = " + ringItemData);
}

Loading…
Cancel
Save