问题标签 [polly]

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 投票
1 回答
1245 浏览

polly - 使用 Flurl 设置默认 Polly 策略

我目前正在同时使用 Polly 和 Flurl,但我有一个共同的重试策略,我必须将其添加到每个请求中。我注意到 Polly 允许您使用 AddPolicyHandler(...) 设置默认值,但这需要一个 IHttpClientBuilder 并且我看不出有任何方法可以从 Flurl 中获取它。

我认为重载 DefaultHttpClientFactory 可能是要走的路,但这只能让我访问 HttpClient,而不是 IHttpClientBuilder。

我知道我可以制作自己的 HttpClients 并将它们传递给 Flurl,但如果可以的话,我宁愿避免这种情况,因为我希望 Flurl 管理它们的生命周期。

目前有没有办法做我想做的事?

0 投票
1 回答
1438 浏览

c# - Transient Polly 重试不适用于 HttpResponseMessage

嗨,我想暗示波利重试瞬态错误处理我很有趣,但重试对我不起作用,请让我知道我错在哪里。

0 投票
1 回答
1612 浏览

c# - 如何使用 dotnet core 和 Polly 添加动态重试策略

我有一个 dotnet core (2.1) 控制台应用程序,我正在使用 Polly 用重试策略包装我的一段代码。这适用于如下所示的简单用例:

然后我使用以下代码对其进行测试:

执行代码时,如预期的那样捕获了套接字异常。

我正在寻找一种灵活的方法来用多个策略而不是一个策略来包装我的代码。我更改了代码以将多个包装的 Polly 重试策略动态添加在一起,以允许捕获多个错误类型并轻松更改我正在寻找的异常。我将代码更改为:

当我使用此代码进行测试时,上面的代码按预期工作并重试了 5 次。

但是当我尝试以下操作时,它不会按预期重试 2 次(它根本不会重试):

我究竟做错了什么?以上所有内容的重点是根据我的需要动态地执行多个策略。除了 WrapPolicy,还有更好的方法吗?

提前感谢您的指点!

0 投票
1 回答
196 浏览

c# - 安装 Polly 进行重试后,HttpResponseMessage 似乎被覆盖

我们有一个 ASP.NET Web API 2 应用程序,它利用 HttpResponseMessage 作为返回值控制器,因为我们需要发回直接文本。我们的代码看起来像这样:

事情很好。在代码库的另一个区域,有一组方法需要重试,我们安装了 Polly nuget 包,在重试中添加,在 Visual Studio 中本地运行时一切看起来都很好。一旦我们部署 Azure,事情就变糟了。

在 Visual Studio 调试器中编译和运行本地化时,我们期望并获得带有简单文本字符串的 200 响应。部署到 Azure Web 应用程序时会出现此问题。一旦我们这样做了,我们对 API 的调用都会返回以下内容:

如果我们卸载 Polly,一切都会恢复正常。

我们可以找到的唯一其他评论/问题如下:在 Azure Web App 中的 nuget 更新后 Web API 返回 HttpResponseMessage 对象

2个问题:

  1. 上面的反应是什么?我的内容不存在,我以前从未见过。
  2. Polly 中是否有一些我在配置等方面遗漏的东西可能会导致这种情况?
0 投票
0 回答
3068 浏览

polly - Polly 缓存 - 内存

我正在寻找一个很好的例子,它描述了使用内存缓存选项在 .net core 2.1 中实现 Polly 缓存。我在启动时配置了缓存设置。

0 投票
1 回答
1437 浏览

c# - Polly 缓存策略未向缓存添加值

我对使用 Polly 项目中的缓存策略感到茫然。我已经根据示例进行了所有设置,并且基本上似乎可以正常工作。

我编写了一个单元测试,其中成功检索了值,将其放入缓存并在以后的调用中从缓存中读取。但是,当我在 asp.net 核心上下文中运行代码时,它没有按预期工作。执行包装的操作并检索值。但是,永远不会执行 put to cache 方法。我尝试使用自己的 IAsyncCacheProvider 来调试问题。并且它的 PutAsync 方法永远不会在 asp.net 上下文中调用。但是,在单元测试中运行时会调用它。

这是我的服务配置

这里是导致问题的课程的摘录。

任何想法,什么可能导致这种行为?当我放置断点时,它永远不会尝试将返回值添加到缓存中。也不例外。

0 投票
0 回答
2324 浏览

c# - 如何使用 ILoggerFactory 从 Polly 记录重试

或者:如何从静态方法记录。

https://github.com/App-vNext/Polly你有这样的例子,其中一个记录器神奇地可用:

在我的代码中,我使用来自 dotnet core 2.1 的新 IHttpClientFactory 模式,并在我的 Startup.cs ConfigureServices 方法中添加它:

GetRetryPolicy 是静态的并且看起来像这样:

OnRetry 方法也必须是静态的:

如果可能的话,如何在这里访问 ILoggerFactory?

0 投票
0 回答
113 浏览

polly - Polly Cache - InMemory Action 过滤器实现

任何人都可以建议在操作过滤器级别实施 polly 缓存。我能够在动作方法中实现,但没有找到以动作过滤器方式实现的非常好的示例。

0 投票
1 回答
1510 浏览

c# - C# ExponentialBackOff 到时间跨度 Polly

我正在用 Polly 框架替换我当前的重试策略。我曾经这样定义我的重试策略:

其中DefaultClientRetryCount是重试次数,然后指数退避根据变量计算重试之间的睡眠时间:DefaultMinBackoff是重试之间的最小时间跨度;DefaultMaxBackoff是最大时间跨度;并且DefaultClientBackoff是用于计算重试之间的随机增量的默认值。

在 Polly 上,我这样定义我的 retryPolicy:

其中retryCount是重试次数,sleepDuration是重试之间的时间。

如何复制上一个策略生成的重试之间的时间跨度以作为参数发送到WaitAndRetryAsyncPolly 上的方法?

0 投票
2 回答
1193 浏览

circuit-breaker - Polly 断路器/重试以在网络中断后自动重新启动查询

我正在.NET 框架 4.5.2 中通过 Polly 实现断路器和重试模式。

我想看看我的理解是否正确。

问题一:如果网络中断,并且断路器已经达到了exceptionsAllowedBeforeBreaking数,进入open状态并等待durationOfBreak期间,电路会为新的请求打开,但是已经发送的会抛出异常?

问题 2:如果期望的行为是重试那些有异常的请求,而不是断路器抛出异常,那么除了断路器策略之外,还需要实施重试策略。我对此的理解是,问题 1 中的行为会发生,然后会尝试重试。

A. 如果网络中断或服务关闭,并且期望的行为是在网络恢复或服务再次启动时重试请求,则需要执行 RetryForever。有没有更好的方法来做到这一点?实际上会有很多阻塞,对吗?

在代码方面,我的策略目前定义为:

我的调用代码是这样完成的:

我观察到,如果我在断路器上运行所有重试所需的时间之后断开网络连接,则 CancellationToken 将设置为取消,并且所有请求此时都失败。如果在此之前网络已恢复,则重试请求。