Merge remote-tracking branch 'origin/S03-轨迹中台优化项' into test
This commit is contained in:
commit
d14fa1bf65
@ -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;
|
||||||
using SJZY.Expand.ABP.Core.Logger;
|
using SJZY.Expand.ABP.Core.Logger;
|
||||||
using SJZY.Expand.ABP.Core.PublicMethords;
|
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");
|
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))
|
if (!context.DeliverMessage.Headers["cap-msg-name"].IsIn(GlobalConst.TrackUpsertSubscribe))
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -31,18 +33,19 @@ public class CapFilter : SubscribeFilter
|
|||||||
}
|
}
|
||||||
|
|
||||||
var argumentJsonStr = context.Arguments.ToJson();
|
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))
|
if (!string.IsNullOrEmpty(argumentJsonStr))
|
||||||
{
|
{
|
||||||
var hash = argumentJsonStr.GetHash();
|
|
||||||
using (RedisHelper.Client.Lock("Filter:" + hash, 10))
|
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)
|
if (isSkip)
|
||||||
throw new BusinessException(ErrorCode, $"检测到重复消费,消费参数:{argumentJsonStr}");
|
throw new BusinessException(ErrorCode, $"检测到重复消费,消费参数:{argumentJsonStr}");
|
||||||
|
|
||||||
RedisHelper.Client.Set($"CapExcuteFilter:{hash}", 60 * 10,
|
RedisHelper.Client.Set($"CapExecuteFilter:{hash}", 60 * 10,
|
||||||
TimeSpan.FromMinutes(5).Seconds);
|
TimeSpan.FromMinutes(5).Seconds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -50,24 +53,6 @@ public class CapFilter : SubscribeFilter
|
|||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 执行后
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="context"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 消费异常事件
|
/// 消费异常事件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -85,37 +70,6 @@ public class CapFilter : SubscribeFilter
|
|||||||
else
|
else
|
||||||
LogHelper.Error($"cap-msg-id:{messageId}\n{context.Exception}");
|
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;
|
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user