diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/retry/MessageRetryQueueServiceImpl.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/retry/MessageRetryQueueServiceImpl.java index 9e371cf..05bc800 100644 --- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/retry/MessageRetryQueueServiceImpl.java +++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/retry/MessageRetryQueueServiceImpl.java @@ -75,13 +75,15 @@ public class MessageRetryQueueServiceImpl extends ServiceImpl= existing.getMaxRetry(); @@ -127,6 +130,16 @@ public class MessageRetryQueueServiceImpl extends ServiceImpl= 118 && seconds <= 122, "expected ~120s, got " + seconds); } + + @Test + void nextRetryCount_rateLimitFreezes_normalIncrements() { + // 普通失败:累加,消耗次数预算 + assertEquals(2, MessageRetryQueueServiceImpl.nextRetryCount(1, false)); + // 限流失败:冻结,不消耗次数预算(靠 12h 兜底终止) + assertEquals(1, MessageRetryQueueServiceImpl.nextRetryCount(1, true)); + } + + @Test + void nextRetryCount_rateLimitRetriesDoNotConsumeNormalBudget() { + // I3 回归:首次普通失败后,连续多次限流重试不应吃掉普通失败的次数预算 + int rc = 1; // 首次普通失败入队 + rc = MessageRetryQueueServiceImpl.nextRetryCount(rc, true); // 限流重试 + rc = MessageRetryQueueServiceImpl.nextRetryCount(rc, true); // 限流重试 + rc = MessageRetryQueueServiceImpl.nextRetryCount(rc, true); // 限流重试 + assertEquals(1, rc, "限流重试不应增加普通失败计数"); + rc = MessageRetryQueueServiceImpl.nextRetryCount(rc, false); // 第 2 次普通失败 + assertEquals(2, rc, "普通失败才累加,且计数从未被限流污染"); + } }