/// <summary> /// 将满足中断条件的响应放入缓存 /// </summary> /// <param name="argument"></param> /// <param name="result">响应结果</param> public void SetFunseResult(RetryPolicyArgument argument, ResponseWrapperResult result) { //未开启中断配置,或成功响应跳过 if (argument.Option == null || !argument.Option.FuseEnabled || argument.IsSuccessResponse(result.Response)) { return; } var key = $"{argument.Service}.{argument.Module}"; FuseEntry entry = default; if (_cache.TryGetValue <FuseEntry>(key, out entry)) { if (entry.FailedCount >= argument.Option.FuseEnabledWhenFailedCount) { _logger.LogWarning($"服务{key}连续失败次数:{entry.FailedCount}已达阈值:{argument.Option.FuseEnabledWhenFailedCount},触发中断,时间:{argument.Option.FuseDuration}ms"); entry.Result = result; entry.Result.Fused = true; } } else { entry = new FuseEntry(); } entry.FailedCount++; _cache.Set <FuseEntry>(key, entry, TimeSpan.FromMilliseconds(argument.Option.FuseDuration)); }