opt:优化cap filter
This commit is contained in:
parent
b5f7f86664
commit
33c36bed10
@ -19,25 +19,22 @@ public class CapFilter : SubscribeFilter
|
||||
/// <returns></returns>
|
||||
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)
|
||||
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;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user