问题标签 [retrypolicy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
35 浏览

java - 如果使用重试策略的前 3 次尝试重试失败,如何使用新的访问令牌重试

我正在尝试通过 FailSafe 调用来做到这一点,但我不确定是否有更好的方法或者这种方法是否不正确

并使用以下代码调用其余部分,但我不确定如何传递刷新的访问令牌。

我应该如何添加以处理新令牌。

0 投票
1 回答
89 浏览

microsoft-graph-api - 为什么我从 Microsoft Graph 消息订阅中收到空的 Retry-After 标头?

查看日志,它们非常具有描述性!我加粗了标题。

Retry-After 返回值 0,预计毫秒数。我目前正在使用指数回退,在这种情况下这远非理想。文档和最佳实践指示回退到 exp。没有返回 Retry-After 标头时的退避,但确实如此。在 5 次重试后(我的重试策略),我抛出异常,这表明 Microsoft Graph 实际上希望我等待 3 分钟。谁能确认这是一个错误,还是我做错了什么?

日志:

[信息] [重试] 日期:2021 年 10 月 28 日星期四 11:55:37 GMTCache-Control: no-cacheTransfer-Encoding: chunkedRetry-After: 0Strict-Transport-Security: max-age=31536000request-id: 19c11610-2b14- 4c82-abdd-ce9582eb1fe7client-request-id: 19c11610-2b14-4c82-abdd-ce9582eb1fe7x-ms-ags-diagnostic: {"ServerInfo":{"DataCenter":"West Europe","Slice":"E"," Ring":"5","ScaleUnit":"004","RoleInstance":"AM2PEPF000050C2"}} 2021-10-28T11:55:38.492 [Information] [RETRY] StatusCode: 429, ReasonPhrase: 'Too Many Requests' ,版本:1.1,内容:System.Net.Http.HttpConnectionResponseContent,标头:{日期:2021 年 10 月 28 日星期四 11:55:37 GMTCache-Control:no-cacheTransfer-Encoding:chunked Retry-After:0严格传输安全:max-age=31536000request-id:19c11610-2b14-4c82-abdd-ce9582eb1fe7client-request-id:19c11610-2b14-4c82-abdd-ce9582eb1fe7x-ms-ags-diagnostic:{“ServerInfo”:{ "DataCenter":"West Europe","Slice":"E","Ring":"5","ScaleUnit":"004","RoleInstance":"AM2PEPF000050C2"}}Content-Type: application/json}

[信息] [RETRY] Retry-After 在重试策略中提供。

[信息] 0

[信息] [RETRY] 使用 Retry-After 标头进行延迟:00:00:00

[警告] [RETRY] 延迟0ms,然后重试5。

[错误] [2219ab8a36038d2e] [3DDEDC39FE1ABC9D6C328F98503B08FB3FBEB35A223A91D424] 响应状态码不表示成功:429(请求过多)。

[警告] 429:请求过多。延迟后重试。

2021-10-28T11:55:38.524 [错误] 操作:更新;例外:[状态代码:429;原因:资源“OData_GetSubscription__UserMailbox_0003bffd-18fb-b0eb-0000-000000000000_00000000-0000-0000-0000-000000000000”已达到“250”的限制。请在“2021 年 10 月 28 日上午 11:58:13”之后重试]

0 投票
1 回答
66 浏览

c# - 使用 Poly 重试策略时如何处理 100 秒超时

我在 .net 核心应用程序中使用重试策略,超过 100 秒后超时。我可能会以某种不正确的方式使用 Poly,或者它是设计使然,只有超时时间增加可能会有所帮助?

这是我使用 Poly 的方式: 启动:

图书馆:

从自定义 http 客户端调用:

模拟端点可用性的控制器:

我收到此错误:“由于配置的 HttpClient.Timeout 已过 100 秒,请求被取消。”

0 投票
1 回答
60 浏览

c# - Polly“重试”在第一次失败重试尝试时抛出 TaskCanceledException

DelegateHandler我已经在写入 .NET Standard 2.0 的 dll 中实现了 Polly 在它自己的“重试”HttpClient中。我有 Polly v7.2.3 包。MyHttpClient与 an 分开运行,HttpClientFactory因为在 dll 的短暂生命周期内只有一个实例会存在。

我的问题是:当我的互联网工作时,代码执行得很好。但是,当我断开互联网连接时,它会TaskCanceledException在第一次重试时抛出一个并且不再重试。这是我的代码的相关部分...

在我输入的 HttpClient 的 ctor 中:

在我的重试委托处理程序中:

所以我在这里对 SO 进行了研究,发现了这个非常有希望Dispose的解释和解决方案,建议我调用结果。 HttpClient Polly WaitAndRetry 策略

这是我使用该解决方案的更新代码。调用WaitAndRetryAsync抱怨它无法解析该OnRetry方法,因为它正在寻找“Action<Exception, TimeSpan>”

DelegateResult<HttpResponseMessage>不幸的是,我使用的 Polly 版本不支持参数。所有onRetry支持都期望第一个参数是“异常”。Dispose如果我无法接触到一次性物品,我会在使用该溶液时死在水中。

更新:我希望能够Dispose()从其他 StackOverflow 反馈中调用以影响修复。但我不能,因为该onRetry方法不支持同一组参数(即“响应”对象)。Polly API 似乎发生了变化。如果是这样,那么获得响应访问权限的新方法是Dispose什么?或者有没有其他方法可以解决我遇到的错误?

所以我被困在试图让这个解决方案工作或寻找另一种方法来解决这个异常。我欢迎任何有关如何指定要处理的对象的反馈。也欢迎替代方法。