From de7d1daf81715e4982280ae9f486758b69b699b2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Thu, 9 May 2024 10:51:38 +0800
Subject: [PATCH] =?UTF-8?q?change=EF=BC=9A=E9=87=8D=E8=AF=95=E4=B8=8D?=
=?UTF-8?q?=E5=81=9A=E5=B9=82=E7=AD=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../EventHandlers/CAPFilter.cs | 64 +++----------------
1 file changed, 9 insertions(+), 55 deletions(-)
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