diff --git a/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs b/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs index 4c0014c6..1ce7c51b 100644 --- a/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs +++ b/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs @@ -1,5 +1,4 @@ -using System.Globalization; -using DotNetCore.CAP.Filter; +using DotNetCore.CAP.Filter; using SJZY.Expand.ABP.Core; using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ABP.Core.PublicMethords; @@ -20,6 +19,9 @@ public class CapFilter : SubscribeFilter { context.DeliverMessage.Headers["sjzy-receive-time"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"); + // 异常重试不做幂等 + if (context.DeliverMessage.Headers.ContainsKey("cap-exception")) return Task.CompletedTask; + // 轨迹增改要做幂等 if (!context.DeliverMessage.Headers["cap-msg-name"].IsIn(GlobalConst.TrackUpsertSubscribe)) return Task.CompletedTask; @@ -31,18 +33,19 @@ public class CapFilter : SubscribeFilter } var argumentJsonStr = context.Arguments.ToJson(); - context.DeliverMessage.Headers["sjzy-arguments"] = argumentJsonStr; + var hash = argumentJsonStr.GetHash(); + + context.DeliverMessage.Headers["sjzy-arguments-hash"] = hash; if (!string.IsNullOrEmpty(argumentJsonStr)) { - var hash = argumentJsonStr.GetHash(); using (RedisHelper.Client.Lock("Filter:" + hash, 10)) { - var isSkip = !string.IsNullOrEmpty(RedisHelper.Client.Get($"CapExcuteFilter:{hash}")); + var isSkip = !string.IsNullOrEmpty(RedisHelper.Client.Get($"CapExecuteFilter:{hash}")); if (isSkip) throw new BusinessException(ErrorCode, $"检测到重复消费,消费参数:{argumentJsonStr}"); - RedisHelper.Client.Set($"CapExcuteFilter:{hash}", 60 * 10, + RedisHelper.Client.Set($"CapExecuteFilter:{hash}", 60 * 10, TimeSpan.FromMinutes(5).Seconds); } } @@ -50,24 +53,6 @@ public class CapFilter : SubscribeFilter return Task.CompletedTask; } - /// - /// 执行后 - /// - /// - /// - public override Task OnSubscribeExecutedAsync(ExecutedContext context) - { - // context.DeliverMessage.Headers.TryGetValue("sjzy-receive-time", out var receiveTime); - // context.DeliverMessage.Headers.TryGetValue("cap-msg-name", out var receiveName); - // context.DeliverMessage.Headers.TryGetValue("sjzy-arguments", out var arguments); - // context.DeliverMessage.Headers.TryGetValue("cap-msg-id", out var messageId); - // - // BuildLog(receiveTime!, receiveName!, arguments!, false, messageId!); - - return Task.CompletedTask; - } - - /// /// 消费异常事件 /// @@ -85,37 +70,6 @@ public class CapFilter : SubscribeFilter else LogHelper.Error($"cap-msg-id:{messageId}\n{context.Exception}"); - - // context.DeliverMessage.Headers.TryGetValue("sjzy-receive-time", out var receiveTime); - // context.DeliverMessage.Headers.TryGetValue("cap-msg-name", out var receiveName); - // context.DeliverMessage.Headers.TryGetValue("sjzy-arguments", out var arguments); - // - // BuildLog(receiveTime!, receiveName!, arguments, true, messageId!); - return Task.CompletedTask; } - - - private void BuildLog(string receiveTime, string receiveName, string? arguments, bool isFromExecptionFliter, - string messageId) - { - var parsedDate = DateTime.ParseExact(receiveTime, "yyyy-MM-dd HH:mm:ss fff", CultureInfo.InvariantCulture); - var useTime = DateTime.Now - parsedDate; - - if (useTime.Minutes > 10) - { - var log = $@" -|-消息编号:{messageId} -|-消费者名:{receiveName} -|-跳过执行:{(isFromExecptionFliter ? "是" : "否")} -|-执行时间:{receiveTime} -|-消费耗时:{useTime.Seconds}秒 -|-请求参数:{arguments}"; - LogHelper.Error(log); - } - else - { - //LogHelper.Info(log); - } - } } \ No newline at end of file