From e93f33267feb3cffaf963cb689129f493bc5fff3 Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Sun, 3 Dec 2023 20:00:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:2.5.0=201.=20=E4=BF=AE=E5=A4=8D=E5=88=86?= =?UTF-8?q?=E5=B8=83=E5=BC=8Fid=E7=94=9F=E6=88=90=E5=99=A8=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=202.=20=E4=BF=AE=E5=A4=8D=E9=A1=B5=E9=9D=A2=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E6=95=B0=E6=8D=AE=E9=87=8F=E6=B2=A1=E6=9C=89=E5=8C=BA?= =?UTF-8?q?=E5=88=86=E7=A9=BA=E9=97=B4=203.=20=E9=87=8D=E8=AF=95=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=9C=BA=E6=99=AF=E6=B2=A1=E6=9C=89=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=A9=BA=E9=97=B4=E5=8C=BA=E5=88=86=E9=97=AE=E9=A2=98=204.=20?= =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=89=8D=E7=AB=AF=E7=9A=84slogan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/RetryTaskLogMapper.java | 20 ----- .../mapper/SequenceAllocMapper.java | 6 +- .../persistence/mapper/ServerNodeMapper.java | 2 +- .../mariadb/mapper/RetryTaskLogMapper.xml | 77 ++----------------- .../mariadb/mapper/SequenceAllocMapper.xml | 4 +- .../mariadb/mapper/ServerNodeMapper.xml | 5 +- .../mysql/mapper/RetryTaskLogMapper.xml | 76 ++---------------- .../mysql/mapper/SequenceAllocMapper.xml | 4 +- .../mysql/mapper/ServerNodeMapper.xml | 5 +- .../postgres/mapper/RetryTaskLogMapper.xml | 77 ++----------------- .../postgres/mapper/SequenceAllocMapper.xml | 4 +- .../postgres/mapper/ServerNodeMapper.xml | 5 +- .../server/common/alarm/AbstractAlarm.java | 3 +- .../common/cache/CacheConsumerGroup.java | 2 +- .../common/generator/id/IdGenerator.java | 5 +- .../common/generator/id/SegmentBuffer.java | 7 +- .../generator/id/SegmentIdGenerator.java | 38 ++++----- .../generator/id/SnowflakeIdGenerator.java | 2 +- .../generator/task/AbstractGenerator.java | 2 +- .../actor/scan/AbstractScanGroup.java | 7 +- .../task/support/timer/AbstractTimerTask.java | 26 +++---- .../task/support/timer/RetryTimerTask.java | 1 + .../task/support/timer/RetryTimerWheel.java | 8 +- .../generator/id/SegmentIdGeneratorTest.java | 3 +- .../service/impl/DashBoardServiceImpl.java | 2 +- frontend/public/index.html | 2 +- frontend/src/locales/lang/zh-CN.js | 2 +- 27 files changed, 101 insertions(+), 294 deletions(-) diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/RetryTaskLogMapper.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/RetryTaskLogMapper.java index f9ccec01..8f3aaf12 100644 --- a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/RetryTaskLogMapper.java +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/RetryTaskLogMapper.java @@ -13,26 +13,6 @@ import java.util.List; public interface RetryTaskLogMapper extends BaseMapper { - - RetryTaskLog selectByPrimaryKey(Long id); - - long countTaskTotal(); - - long countTaskByRetryStatus(@Param("retryStatus") Integer retryStatus); - - List rankSceneQuantity(@Param("groupName") String groupName, - @Param("startTime") LocalDateTime startTime, - @Param("endTime")LocalDateTime endTime - ); - - @Deprecated - List lineDispatchQuantity(@Param("groupName") String groupName, - @Param("retryStatus") Integer retryStatus, - @Param("type") String type, - @Param("startTime")LocalDateTime startTime, - @Param("endTime")LocalDateTime endTime - ); - int batchInsert(List list); List retrySummaryRetryTaskLogList(@Param("from") LocalDateTime from, @Param("to") LocalDateTime to); diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/SequenceAllocMapper.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/SequenceAllocMapper.java index 1ac48b0d..64135db9 100644 --- a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/SequenceAllocMapper.java +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/SequenceAllocMapper.java @@ -20,11 +20,11 @@ public interface SequenceAllocMapper extends BaseMapper { /** * 更新业务类型下的最大id * - * @param step 步长 + * @param step 步长 * @param groupName * @return 更新结果 */ - Integer updateMaxIdByCustomStep(@Param("step") Integer step, @Param("groupName") String groupName); + Integer updateMaxIdByCustomStep(@Param("step") Integer step, @Param("groupName") String groupName, @Param("namespaceId") String namespaceId); /** * 更新最大id @@ -32,5 +32,5 @@ public interface SequenceAllocMapper extends BaseMapper { * @param groupName 组名称 * @return 更新结果 */ - Integer updateMaxId(@Param("groupName") String groupName); + Integer updateMaxId(@Param("groupName") String groupName, @Param("namespaceId") String namespaceId); } diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/ServerNodeMapper.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/ServerNodeMapper.java index 0f93dbd3..4b337496 100644 --- a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/ServerNodeMapper.java +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/ServerNodeMapper.java @@ -17,6 +17,6 @@ public interface ServerNodeMapper extends BaseMapper { int deleteByExpireAt(@Param("endTime") LocalDateTime endTime); - List countActivePod(@Param("namespaceId") String namespaceId); + List countActivePod(@Param("namespaceIds") List namespaceIds); } diff --git a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/RetryTaskLogMapper.xml b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/RetryTaskLogMapper.xml index 05f9481d..6f62cb5f 100644 --- a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/RetryTaskLogMapper.xml +++ b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/RetryTaskLogMapper.xml @@ -4,6 +4,7 @@ + @@ -18,81 +19,17 @@ id , unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, retry_status, - create_dt, task_type + create_dt, task_type, namespace_id - - - - - - - INSERT INTO retry_task_log (unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, task_type, create_dt) + INSERT INTO retry_task_log (unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, + args_str, ext_attrs, task_type, create_dt, namespace_id) VALUES - (#{item.uniqueId}, #{item.groupName}, #{item.sceneName}, #{item.idempotentId}, #{item.bizNo}, #{item.executorName}, #{item.argsStr}, #{item.extAttrs}, #{item.taskType}, #{item.createDt}) + (#{item.uniqueId}, #{item.groupName}, #{item.sceneName}, #{item.idempotentId}, + #{item.bizNo}, #{item.executorName}, #{item.argsStr}, #{item.extAttrs}, + #{item.taskType}, #{item.createDt}, #{namespaceId}) diff --git a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/SequenceAllocMapper.xml b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/SequenceAllocMapper.xml index 9097f077..2131f9cd 100644 --- a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/SequenceAllocMapper.xml +++ b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/SequenceAllocMapper.xml @@ -14,12 +14,12 @@ UPDATE sequence_alloc SET max_id = max_id + #{step}, update_dt = now() - WHERE group_name = #{groupName} + WHERE group_name = #{groupName} and namespace_id = #{namespaceId} UPDATE sequence_alloc SET max_id = max_id + step, update_dt = now() - WHERE group_name = #{groupName} + WHERE group_name = #{groupName} and namespace_id = #{namespaceId} diff --git a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/ServerNodeMapper.xml b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/ServerNodeMapper.xml index 066cb7dc..9eaa533a 100644 --- a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/ServerNodeMapper.xml +++ b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/ServerNodeMapper.xml @@ -35,7 +35,10 @@ diff --git a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/RetryTaskLogMapper.xml b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/RetryTaskLogMapper.xml index 3533eb45..bb505d84 100644 --- a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/RetryTaskLogMapper.xml +++ b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/RetryTaskLogMapper.xml @@ -4,6 +4,7 @@ + @@ -18,81 +19,18 @@ id , unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, retry_status, - create_dt, task_type + create_dt, task_type, namespace_id - - - - - - INSERT INTO retry_task_log (unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, task_type, create_dt) + INSERT INTO retry_task_log (unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, + args_str, ext_attrs, task_type, create_dt, namespace_id) VALUES - (#{item.uniqueId}, #{item.groupName}, #{item.sceneName}, #{item.idempotentId}, #{item.bizNo}, #{item.executorName}, #{item.argsStr}, #{item.extAttrs}, #{item.taskType}, #{item.createDt}) + (#{item.uniqueId}, #{item.groupName}, #{item.sceneName}, #{item.idempotentId}, + #{item.bizNo}, #{item.executorName}, #{item.argsStr}, #{item.extAttrs}, + #{item.taskType}, #{item.createDt}, #{namespaceId}) diff --git a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/SequenceAllocMapper.xml b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/SequenceAllocMapper.xml index 9097f077..2131f9cd 100644 --- a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/SequenceAllocMapper.xml +++ b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/SequenceAllocMapper.xml @@ -14,12 +14,12 @@ UPDATE sequence_alloc SET max_id = max_id + #{step}, update_dt = now() - WHERE group_name = #{groupName} + WHERE group_name = #{groupName} and namespace_id = #{namespaceId} UPDATE sequence_alloc SET max_id = max_id + step, update_dt = now() - WHERE group_name = #{groupName} + WHERE group_name = #{groupName} and namespace_id = #{namespaceId} diff --git a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/ServerNodeMapper.xml b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/ServerNodeMapper.xml index e43d8038..6224c11f 100644 --- a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/ServerNodeMapper.xml +++ b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/ServerNodeMapper.xml @@ -37,7 +37,10 @@ diff --git a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/RetryTaskLogMapper.xml b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/RetryTaskLogMapper.xml index e8cff06f..6f62cb5f 100644 --- a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/RetryTaskLogMapper.xml +++ b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/RetryTaskLogMapper.xml @@ -4,6 +4,7 @@ + @@ -18,81 +19,17 @@ id , unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, retry_status, - create_dt, task_type + create_dt, task_type, namespace_id - - - - - - - INSERT INTO retry_task_log (unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, task_type, create_dt) + INSERT INTO retry_task_log (unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, + args_str, ext_attrs, task_type, create_dt, namespace_id) VALUES - (#{item.uniqueId}, #{item.groupName}, #{item.sceneName}, #{item.idempotentId}, #{item.bizNo}, #{item.executorName}, #{item.argsStr}, #{item.extAttrs}, #{item.taskType}, #{item.createDt}) + (#{item.uniqueId}, #{item.groupName}, #{item.sceneName}, #{item.idempotentId}, + #{item.bizNo}, #{item.executorName}, #{item.argsStr}, #{item.extAttrs}, + #{item.taskType}, #{item.createDt}, #{namespaceId}) diff --git a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/SequenceAllocMapper.xml b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/SequenceAllocMapper.xml index 9097f077..2131f9cd 100644 --- a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/SequenceAllocMapper.xml +++ b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/SequenceAllocMapper.xml @@ -14,12 +14,12 @@ UPDATE sequence_alloc SET max_id = max_id + #{step}, update_dt = now() - WHERE group_name = #{groupName} + WHERE group_name = #{groupName} and namespace_id = #{namespaceId} UPDATE sequence_alloc SET max_id = max_id + step, update_dt = now() - WHERE group_name = #{groupName} + WHERE group_name = #{groupName} and namespace_id = #{namespaceId} diff --git a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/ServerNodeMapper.xml b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/ServerNodeMapper.xml index 91c6820b..9c3ca252 100644 --- a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/ServerNodeMapper.xml +++ b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/ServerNodeMapper.xml @@ -34,7 +34,10 @@ diff --git a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/alarm/AbstractAlarm.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/alarm/AbstractAlarm.java index 98851544..5d129f3b 100644 --- a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/alarm/AbstractAlarm.java +++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/alarm/AbstractAlarm.java @@ -10,6 +10,7 @@ import com.aizuda.easy.retry.server.common.dto.AlarmInfo; import com.aizuda.easy.retry.server.common.dto.NotifyConfigInfo; import com.aizuda.easy.retry.server.common.triple.Triple; import com.aizuda.easy.retry.template.datasource.access.AccessTemplate; +import com.google.common.collect.Lists; import com.google.common.util.concurrent.RateLimiter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -61,7 +62,7 @@ public abstract class AbstractAlarm { - List notifyConfigsList = notifyConfig.get(key); + List notifyConfigsList = notifyConfig.getOrDefault(key, Lists.newArrayList()); for (A alarmDTO : list) { sendAlarm(notifyConfigsList, alarmDTO); } diff --git a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/cache/CacheConsumerGroup.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/cache/CacheConsumerGroup.java index 80398d1a..3c95bb59 100644 --- a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/cache/CacheConsumerGroup.java +++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/cache/CacheConsumerGroup.java @@ -39,7 +39,7 @@ public class CacheConsumerGroup implements Lifecycle { * @return 缓存对象 */ public static synchronized void addOrUpdate(String groupName, String namespaceId) { - LogUtils.info(log, "add consumer cache. groupName:[{}]", groupName); +// LogUtils.info(log, "add consumer cache. groupName:[{}]", groupName); CACHE.put(groupName, namespaceId); } diff --git a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/IdGenerator.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/IdGenerator.java index 75734752..5ebf13e8 100644 --- a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/IdGenerator.java +++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/IdGenerator.java @@ -20,9 +20,10 @@ public interface IdGenerator { /** * 获取分布式id * - * @param group 组 + * @param groupName 组 + * @param namespaceId 命名空间 * @return id */ - String idGenerator(String group); + String idGenerator(String groupName, String namespaceId); } diff --git a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/SegmentBuffer.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/SegmentBuffer.java index 69b8b984..698fdf1c 100644 --- a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/SegmentBuffer.java +++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/SegmentBuffer.java @@ -1,5 +1,6 @@ package com.aizuda.easy.retry.server.common.generator.id; +import cn.hutool.core.lang.Pair; import lombok.Data; import java.util.Arrays; @@ -15,7 +16,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; */ @Data public class SegmentBuffer { - private String key; + private Pair key; private Segment[] segments; //双buffer private volatile int currentPos; //当前的使用的segment的index private volatile boolean nextReady; //下一个segment是否处于可切换状态 @@ -36,11 +37,11 @@ public class SegmentBuffer { lock = new ReentrantReadWriteLock(); } - public String getKey() { + public Pair getKey() { return key; } - public void setKey(String key) { + public void setKey(Pair key) { this.key = key; } diff --git a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/SegmentIdGenerator.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/SegmentIdGenerator.java index ae31304f..6a745748 100644 --- a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/SegmentIdGenerator.java +++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/SegmentIdGenerator.java @@ -1,5 +1,6 @@ package com.aizuda.easy.retry.server.common.generator.id; +import cn.hutool.core.lang.Pair; import com.aizuda.easy.retry.common.core.log.LogUtils; import com.aizuda.easy.retry.server.common.Lifecycle; import com.aizuda.easy.retry.server.common.enums.IdGeneratorMode; @@ -14,8 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -68,7 +67,7 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { new LinkedBlockingDeque<>(5000), new UpdateThreadFactory()); private volatile boolean initOK = false; - private Map cache = new ConcurrentHashMap<>(); + private Map, SegmentBuffer> cache = new ConcurrentHashMap<>(); @Autowired private SequenceAllocMapper sequenceAllocMapper; @@ -121,19 +120,21 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { return; } - List dbTags = sequenceAllocs.stream().map(SequenceAlloc::getGroupName).collect(Collectors.toList()); + List> dbTags = sequenceAllocs.stream() + .map(sequenceAlloc -> Pair.of(sequenceAlloc.getGroupName(), sequenceAlloc.getNamespaceId())) + .collect(Collectors.toList()); - List cacheTags = new ArrayList<>(cache.keySet()); - Set insertTagsSet = new HashSet<>(dbTags); - Set removeTagsSet = new HashSet<>(cacheTags); + List> cacheTags = new ArrayList<>(cache.keySet()); + Set> insertTagsSet = new HashSet<>(dbTags); + Set> removeTagsSet = new HashSet<>(cacheTags); //db中新加的tags灌进cache for (int i = 0; i < cacheTags.size(); i++) { - String tmp = cacheTags.get(i); + Pair tmp = cacheTags.get(i); if (insertTagsSet.contains(tmp)) { insertTagsSet.remove(tmp); } } - for (String tag : insertTagsSet) { + for (Pair tag : insertTagsSet) { SegmentBuffer buffer = new SegmentBuffer(); buffer.setKey(tag); Segment segment = buffer.getCurrent(); @@ -145,12 +146,12 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { } //cache中已失效的tags从cache删除 for (int i = 0; i < dbTags.size(); i++) { - String tmp = dbTags.get(i); + Pair tmp = dbTags.get(i); if (removeTagsSet.contains(tmp)) { removeTagsSet.remove(tmp); } } - for (String tag : removeTagsSet) { + for (Pair tag : removeTagsSet) { cache.remove(tag); LogUtils.info(log, "Remove tag {} from IdCache", tag); } @@ -161,11 +162,12 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { } } - public String get(final String key) { + public String get(final String groupName, String namespaceId) { if (!initOK) { return Long.toString(EXCEPTION_ID_IDCACHE_INIT_FALSE); } + Pair key = Pair.of(groupName, namespaceId); if (cache.containsKey(key)) { SegmentBuffer buffer = cache.get(key); if (!buffer.isInitOk()) { @@ -186,16 +188,16 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { return Long.toString(EXCEPTION_ID_KEY_NOT_EXISTS); } - public void updateSegmentFromDb(String key, Segment segment) { + public void updateSegmentFromDb(Pair key, Segment segment) { SegmentBuffer buffer = segment.getBuffer(); SequenceAlloc sequenceAlloc; if (!buffer.isInitOk()) { - sequenceAllocMapper.updateMaxId(key); + sequenceAllocMapper.updateMaxId(key.getKey(), key.getValue()); sequenceAlloc = sequenceAllocMapper.selectOne(new LambdaQueryWrapper().eq(SequenceAlloc::getGroupName, key)); buffer.setStep(sequenceAlloc.getStep()); buffer.setMinStep(sequenceAlloc.getStep());//leafAlloc中的step为DB中的step } else if (buffer.getUpdateTimestamp() == 0) { - sequenceAllocMapper.updateMaxId(key); + sequenceAllocMapper.updateMaxId(key.getKey(), key.getValue()); sequenceAlloc = sequenceAllocMapper.selectOne(new LambdaQueryWrapper().eq(SequenceAlloc::getGroupName, key)); buffer.setUpdateTimestamp(System.currentTimeMillis()); buffer.setStep(sequenceAlloc.getStep()); @@ -216,7 +218,7 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { } LogUtils.info(log, "leafKey[{}], step[{}], duration[{}mins], nextStep[{}]", key, buffer.getStep(), String.format("%.2f", ((double) duration / (1000 * 60))), nextStep); - sequenceAllocMapper.updateMaxIdByCustomStep(nextStep, key); + sequenceAllocMapper.updateMaxIdByCustomStep(nextStep, key.getKey(), key.getValue()); sequenceAlloc = sequenceAllocMapper .selectOne(new LambdaQueryWrapper().eq(SequenceAlloc::getGroupName, key)); buffer.setUpdateTimestamp(System.currentTimeMillis()); @@ -307,9 +309,9 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { } @Override - public String idGenerator(String group) { + public String idGenerator(String groupName, String namespaceId) { String time = DateUtils.format(DateUtils.toNowLocalDateTime(), DateUtils.PURE_DATETIME_MS_PATTERN); - return time.concat(get(group)); + return time.concat(get(groupName, namespaceId)); } } diff --git a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/SnowflakeIdGenerator.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/SnowflakeIdGenerator.java index a880f3a3..89e84b84 100644 --- a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/SnowflakeIdGenerator.java +++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/generator/id/SnowflakeIdGenerator.java @@ -24,7 +24,7 @@ public class SnowflakeIdGenerator implements IdGenerator { } @Override - public String idGenerator(String group) { + public String idGenerator(String group, String namespaceId) { return SNOWFLAKE.nextIdStr(); } } diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/generator/task/AbstractGenerator.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/generator/task/AbstractGenerator.java index a6686135..d6d2db4f 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/generator/task/AbstractGenerator.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/generator/task/AbstractGenerator.java @@ -221,7 +221,7 @@ public abstract class AbstractGenerator implements TaskGenerator { GroupConfig groupConfig = accessTemplate.getGroupConfigAccess().getGroupConfigByGroupName(groupName, namespaceId); for (final IdGenerator idGenerator : idGeneratorList) { if (idGenerator.supports(groupConfig.getIdGeneratorMode())) { - return idGenerator.idGenerator(groupName); + return idGenerator.idGenerator(groupName, namespaceId); } } diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java index fdd873ec..f245bb70 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java @@ -2,7 +2,6 @@ package com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.scan; import akka.actor.AbstractActor; import cn.hutool.core.lang.Pair; -import cn.hutool.core.lang.Tuple; import com.aizuda.easy.retry.common.core.constant.SystemConstants; import com.aizuda.easy.retry.common.core.enums.RetryStatusEnum; import com.aizuda.easy.retry.common.core.log.LogUtils; @@ -117,7 +116,7 @@ public abstract class AbstractScanGroup extends AbstractActor { private void processRetryPartitionTasks(List partitionTasks, final ScanTask scanTask) { // 批次查询场景 - Map sceneConfigMap = getSceneConfigMap(partitionTasks); + Map sceneConfigMap = getSceneConfigMap(partitionTasks, scanTask); List waitUpdateRetryTasks = new ArrayList<>(); for (PartitionTask task : partitionTasks) { @@ -148,12 +147,14 @@ public abstract class AbstractScanGroup extends AbstractActor { } - private Map getSceneConfigMap(final List partitionTasks) { + private Map getSceneConfigMap(final List partitionTasks, ScanTask scanTask) { Set sceneNameSet = partitionTasks.stream() .map(partitionTask -> ((RetryPartitionTask) partitionTask).getSceneName()).collect(Collectors.toSet()); List sceneConfigs = accessTemplate.getSceneConfigAccess() .list(new LambdaQueryWrapper() .select(SceneConfig::getBackOff, SceneConfig::getTriggerInterval, SceneConfig::getSceneName) + .eq(SceneConfig::getNamespaceId, scanTask.getNamespaceId()) + .eq(SceneConfig::getGroupName, scanTask.getGroupName()) .in(SceneConfig::getSceneName, sceneNameSet)); return sceneConfigs.stream() .collect(Collectors.toMap(SceneConfig::getSceneName, i -> i)); diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/AbstractTimerTask.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/AbstractTimerTask.java index e8fb24b5..e73dd8eb 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/AbstractTimerTask.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/AbstractTimerTask.java @@ -22,26 +22,20 @@ public abstract class AbstractTimerTask implements TimerTask { protected String uniqueId; protected String namespaceId; - private static final ThreadPoolExecutor executor = new ThreadPoolExecutor(16, 16, 10, TimeUnit.SECONDS, - new LinkedBlockingQueue<>()); - @Override public void run(Timeout timeout) throws Exception { - executor.execute(() -> { - log.info("开始执行重试任务. 当前时间:[{}] groupName:[{}] uniqueId:[{}] namespaceId:[{}]", LocalDateTime.now(), groupName, - uniqueId, namespaceId); - try { - doRun(timeout); - } catch (Exception e) { - log.error("重试任务执行失败 groupName:[{}] uniqueId:[{}] namespaceId:[{}]", groupName, uniqueId, namespaceId, e); - } finally { - // 先清除时间轮的缓存 - RetryTimerWheel.clearCache(Pair.of(groupName, namespaceId), uniqueId); - - } - }); + log.info("开始执行重试任务. 当前时间:[{}] groupName:[{}] uniqueId:[{}] namespaceId:[{}]", LocalDateTime.now(), groupName, + uniqueId, namespaceId); + try { + doRun(timeout); + } catch (Exception e) { + log.error("重试任务执行失败 groupName:[{}] uniqueId:[{}] namespaceId:[{}]", groupName, uniqueId, namespaceId, e); + } finally { + // 先清除时间轮的缓存 + RetryTimerWheel.clearCache(Pair.of(groupName, namespaceId), uniqueId); + } } protected abstract void doRun(Timeout timeout); diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/RetryTimerTask.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/RetryTimerTask.java index b165ac0e..d230d18f 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/RetryTimerTask.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/RetryTimerTask.java @@ -28,6 +28,7 @@ public class RetryTimerTask extends AbstractTimerTask { this.context = context; super.groupName = context.getGroupName(); super.uniqueId = context.getUniqueId(); + super.namespaceId = context.getNamespaceId(); } @Override diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/RetryTimerWheel.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/RetryTimerWheel.java index f66ba863..50555f52 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/RetryTimerWheel.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/RetryTimerWheel.java @@ -11,6 +11,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.concurrent.CustomizableThreadFactory; import org.springframework.stereotype.Component; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** @@ -24,13 +26,15 @@ public class RetryTimerWheel implements Lifecycle { private static final int TICK_DURATION = 500; private static final String THREAD_NAME_PREFIX = "retry-task-timer-wheel-"; private static HashedWheelTimer timer = null; - + private static final ThreadPoolExecutor executor = new ThreadPoolExecutor(16, 16, 10, TimeUnit.SECONDS, + new LinkedBlockingQueue<>()); private static final TimerIdempotent idempotent = new TimerIdempotent(); @Override public void start() { timer = new HashedWheelTimer( - new CustomizableThreadFactory(THREAD_NAME_PREFIX), TICK_DURATION, TimeUnit.MILLISECONDS); + new CustomizableThreadFactory(THREAD_NAME_PREFIX), TICK_DURATION, TimeUnit.MILLISECONDS, 512, + true, -1, executor); timer.start(); } diff --git a/easy-retry-server/easy-retry-server-starter/src/test/java/com/aizuda/easy/retry/server/support/generator/id/SegmentIdGeneratorTest.java b/easy-retry-server/easy-retry-server-starter/src/test/java/com/aizuda/easy/retry/server/support/generator/id/SegmentIdGeneratorTest.java index 108e6c6a..806a02fc 100644 --- a/easy-retry-server/easy-retry-server-starter/src/test/java/com/aizuda/easy/retry/server/support/generator/id/SegmentIdGeneratorTest.java +++ b/easy-retry-server/easy-retry-server-starter/src/test/java/com/aizuda/easy/retry/server/support/generator/id/SegmentIdGeneratorTest.java @@ -1,5 +1,6 @@ package com.aizuda.easy.retry.server.support.generator.id; +import com.aizuda.easy.retry.common.core.constant.SystemConstants; import com.aizuda.easy.retry.common.core.log.LogUtils; import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; import com.aizuda.easy.retry.server.common.generator.id.IdGenerator; @@ -42,7 +43,7 @@ public class SegmentIdGeneratorTest { public void run() { count.countDown(); - String id = idGenerator.idGenerator("example_group"); + String id = idGenerator.idGenerator("example_group", SystemConstants.DEFAULT_NAMESPACE); LogUtils.info(log, "id:[{}]", id); if (Long.parseLong(id) < 0) { throw new EasyRetryServerException("exception id"); diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/DashBoardServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/DashBoardServiceImpl.java index 7a33f29e..db8680e4 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/DashBoardServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/DashBoardServiceImpl.java @@ -80,7 +80,7 @@ public class DashBoardServiceImpl implements DashBoardService { // 重试任务柱状图 dashboardCardResponseVO.setRetryTaskBarList(RetrySummaryResponseVOConverter.INSTANCE.toRetryTaskBar(retrySummaryMapper.retryTaskBarList(namespaceId))); // 在线Pods - List activePodQuantityDO = serverNodeMapper.countActivePod(namespaceId); + List activePodQuantityDO = serverNodeMapper.countActivePod(Lists.newArrayList(namespaceId, ServerRegister.NAMESPACE_ID)); Map map = activePodQuantityDO.stream().collect(Collectors.toMap(ActivePodQuantityResponseDO::getNodeType, ActivePodQuantityResponseDO::getTotal)); Long clientTotal = map.getOrDefault(NodeTypeEnum.CLIENT.getType(), 0L); Long serverTotal = map.getOrDefault(NodeTypeEnum.SERVER.getType(), 0L); diff --git a/frontend/public/index.html b/frontend/public/index.html index 52f49fa0..62e505ab 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -23,7 +23,7 @@
-
一款为了提高分布式业务系统一致性的分布式任务重试和分布式任务调度平台
+
灵活,可靠和快速的分布式任务重试和分布式任务调度平台
diff --git a/frontend/src/locales/lang/zh-CN.js b/frontend/src/locales/lang/zh-CN.js index c46963f5..a283e9bd 100644 --- a/frontend/src/locales/lang/zh-CN.js +++ b/frontend/src/locales/lang/zh-CN.js @@ -21,7 +21,7 @@ export default { 'layouts.usermenu.dialog.title': '信息', 'layouts.usermenu.dialog.content': '您确定要注销吗?', - 'layouts.userLayout.title': '一款为了提高分布式业务系统一致性的分布式任务重试和分布式任务调度平台', + 'layouts.userLayout.title': '灵活,可靠和快速的分布式任务重试和分布式任务调度平台', ...components, ...global, ...menu,