opt:提取配置重试冷却窗口

This commit is contained in:
李鹏军 2024-05-27 17:00:39 +08:00
parent 33c36bed10
commit 5712f567df
2 changed files with 23 additions and 14 deletions

View File

@ -17,37 +17,40 @@ public class CapFilter : SubscribeFilter
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public override Task OnSubscribeExecutingAsync(ExecutingContext context)
public override async 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;
{
return;
}
var argumentJsonStr = context.Arguments.ToJson();
if (!string.IsNullOrEmpty(argumentJsonStr))
{
var hash = GetHash(argumentJsonStr);
var hash = context.DeliverMessage.Headers["sjzy-arguments-hash"];
if (hash.IsNullOrEmpty()) // 计算参数hash
{
hash = GetHash(argumentJsonStr);
context.DeliverMessage.Headers["sjzy-arguments-hash"] = hash;
if (!string.IsNullOrEmpty(RedisHelper.Client.Get($"CapExecuteFilter:{hash}")))
}
if (await RedisHelper.Client.ExistsAsync($"CapExecuteFilter:{hash}"))
{
throw new BusinessException(ErrorCode, $"检测到重复消费,消费参数:{argumentJsonStr}");
}
return Task.CompletedTask;
}
}
public override Task OnSubscribeExecutedAsync(ExecutedContext context)
public override async Task OnSubscribeExecutedAsync(ExecutedContext context)
{
context.DeliverMessage.Headers.TryGetValue("sjzy-arguments-hash", out var hash);
if (!hash.IsNullOrEmpty())
{
RedisHelper.Client.Set($"CapExecuteFilter:{hash}", 60 * 10, TimeSpan.FromMinutes(10).Seconds);
await RedisHelper.Client.SetAsync($"CapExecuteFilter:{hash}", 1, TimeSpan.FromMinutes(10).Seconds);
}
return Task.CompletedTask;
}
/// <summary>
@ -65,7 +68,11 @@ public class CapFilter : SubscribeFilter
LogHelper.Warn(ex.ToString());
}
else
{
// 发飞书,异常继续上抛,进入重试机制
// tips:重试有冷却期(默认4分钟)
LogHelper.Error($"cap-msg-id:{messageId}\n{context.Exception}");
}
return Task.CompletedTask;
}

View File

@ -97,6 +97,8 @@ namespace SJZY.Track.Application
options.FailedRetryInterval = configuration.GetValue<int>("CAP:FailedRetryInterval");
options.FailedRetryCount = configuration.GetValue<int>("CAP:FailedRetryCount");
options.SucceedMessageExpiredAfter = configuration.GetValue<int>("CAP:SucceedMessageExpiredAfter");
options.FallbackWindowLookbackSeconds =
configuration.GetValue<int>("CAP:FallbackWindowLookbackSeconds");
options.EnableSubscriberParallelExecute = true;
options.UseDashboard(dashboardOptions =>