diff --git a/src/SJZY.Track.Application/CAP/CAPFilter.cs b/src/SJZY.Track.Application/CAP/CAPFilter.cs index a4e1f841..110395fc 100644 --- a/src/SJZY.Track.Application/CAP/CAPFilter.cs +++ b/src/SJZY.Track.Application/CAP/CAPFilter.cs @@ -19,24 +19,21 @@ public class CapFilter : SubscribeFilter /// public override Task OnSubscribeExecutingAsync(ExecutingContext context) { + if (!context.DeliverMessage.Headers["sjzy-arguments-hash"].IsNullOrEmpty()) return Task.CompletedTask; + // 轨迹新增、更新要做幂等 if (!context.DeliverMessage.Headers["cap-msg-name"] .IsIn(GlobalConst.TrackUpsertSubscribe, GlobalConst.TrackManualPushSubscribe)) return Task.CompletedTask; var argumentJsonStr = context.Arguments.ToJson(); - var hash = argumentJsonStr.GetHash(); - - context.DeliverMessage.Headers["sjzy-arguments-hash"] = hash; if (!string.IsNullOrEmpty(argumentJsonStr)) { - using (RedisHelper.Client.Lock("Filter:" + hash, 10)) - { - var isSkip = !string.IsNullOrEmpty(RedisHelper.Client.Get($"CapExecuteFilter:{hash}")); - if (isSkip) - throw new BusinessException(ErrorCode, $"检测到重复消费,消费参数:{argumentJsonStr}"); - } + var hash = GetHash(argumentJsonStr); + context.DeliverMessage.Headers["sjzy-arguments-hash"] = hash; + if (!string.IsNullOrEmpty(RedisHelper.Client.Get($"CapExecuteFilter:{hash}"))) + throw new BusinessException(ErrorCode, $"检测到重复消费,消费参数:{argumentJsonStr}"); } return Task.CompletedTask;