opt:优化cap filter

This commit is contained in:
李鹏军 2024-05-27 16:52:08 +08:00
parent b5f7f86664
commit 33c36bed10

View File

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