问题标签 [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 回答
5716 浏览

c# - 使用连接到重试策略的特定超时

我正在通过以下方式创建重试策略:

var policy = Policy.Handle<Exception>().WaitAndRetryAsync...

如何为上面的重试策略设置超时?Policy.TimeoutAsync返回 a TimeoutPolicy,因此我无法做类似的事情

var policy = Policy.TimeoutAsync(30).Handle<Exception>().WaitAndRetryAsync....

超时是否成为我所有重试策略的通用设置?

0 投票
1 回答
4437 浏览

c# - Polly ExecuteAndCaptureAsync 在断路器打开时不抛出异常

我有以下代码:

当断路器处于打开状态时,结果简单地为空,不会抛出异常。如果电路打开,它不应该抛出异常吗?

0 投票
1 回答
11290 浏览

c# - Polly 超时政策说明

我正在尝试使超时策略正常工作。我在集成 api 时有以下要求。

  1. 创建一个 http 请求来调用 endpoint1 并传递 transactionID 并捕获结果
  2. 如果 http 请求在 20 秒内没有响应,则发送具有相同 transactionID 的取消请求并捕获结果

对于这个任务,我想使用 Polly,它在我看来是一个很棒的组件,可以帮助处理瞬态故障。但是,由于我对这项技术非常陌生,我只想确定我是否正确实施。

首先,我已经像这样用 Polly 创建了一个超时策略

然后之后我准备执行该政策

我从文档中得到的是,如果timeoutPolicy.ExecuteAndCaptureAsync委托内部发生超时,Polly 会自动调用onTimeout委托。正确的?

但是我的问题是:

  • 如果在执行委托内部发生异常会发生什么?我应该将那个 polly 结构包装在 try catch 中吗?
  • 当我分析策略结果时,我如何了解是否发生超时?
0 投票
1 回答
12656 浏览

c# - 使用 Polly 时在 VS 调试器中报告异常用户未处理

我在调用 Pittney Bowes Geocoder 服务时使用 Polly 捕获异常。我正在使用引发 MessageProcessingException 的 g1client 库。如果抛出此异常,我已将调用包装在 Polly 网络策略中以重试调用最多 3 次,但 Visual Studio 坚持认为异常是“用户未处理”我需要修改什么才能处理此异常? 我正在使用 Visual Studio 2017 社区版和 C# 4.6.1。

错误信息是:

我还想追查为什么我会收到这个错误,所以任何帮助调试也很好。我只有在第一次使用大量请求调用服务时才得到它。在这种情况下,我发送了 1000 个地址进行处理。下一次运行请求将在一秒钟内处理,但第一次它不起作用。

0 投票
1 回答
3368 浏览

c# - 无论实际响应如何,Polly 重试策略结果始终成功

我正在尝试利用Polly处理任意结果条件的能力https://github.com/App-vNext/Polly/#step-1b-optionally-specify-return-results-you-want-to-处理

在我的测试用例中,我使用RestSharp发出 HTTP 请求。这是我的示例代码:

对https://httpbin.org/anything的调用会回显一堆东西——确切的内容是不相关的。正如您在谓词中看到的那样,我正在结果正文中寻找字符串“bla”。

问题是policy.Outcome总是成功的 ( policy.Outcome == OutcomeType.Successful) 但“bla”不在结果正文中。

0 投票
1 回答
2532 浏览

c# - 在将策略定义与执行分开时理解 Polly 策略的语义

对于Polly,我希望在两个不同的语句中定义我的策略和执行该策略,如下所示:

我想这样做,以便更好地重用我的重试策略,例如用于依赖注入。

我试图了解在以这种方式拆分策略和执行时是否有任何考虑因素,例如,如果有任何“状态”(因为没有更好的术语)可能不会在policy对象中携带从策略定义到执行.

沿着这些思路,我注意到当我ExecuteAndCapture()以上述方式使用 Polly 时,某些属性(与捕获最终异常/结果相关的属性,与 相关联ExecuteAndCapture())没有显示在policy对象上。根据文档(此处此处),在完成以下政策后:

...你应该回来:

这确实发生了,然后ExecuteAndCapture()在与策略定义相同的语句中。但是,当将策略定义与执行分开时,这些属性不可用。我天真地假设它们会出现在现有policy对象上,但它们不会:

在此处输入图像描述

看来我需要创建一个新的变量赋值才能访问这些属性:

带有结果的新政策变量

这里有什么顾虑吗?

0 投票
1 回答
2759 浏览

c# - Polly 策略应该是单例吗?

我有一个IGetHamburgers调用外部 API 的查询。我已将IGetHamburgersDI 容器中的实现注册为单例。我使用 Polly 作为断路器,如果两个请求失败,电路将打开。

我的目标是所有对 Hamburger api 的调用都应该通过同一个断路器,如果 GetHamburgers 失败,那么所有其他调用也应该失败。

我应该如何使用我的保单?我应该将我的政策注册为这样的字段:

或者

我猜第一个选项是正确的方法,因为那时 Policy 对象将始终相同,并且可以跟踪异常计数和类似的东西。我的问题是,第二个选项也可以吗?我在 Pollys Github 上找到了很多示例/示例,但我找不到任何将 Polly 与 DI 以及类似的东西一起使用的“真实世界”示例?

0 投票
1 回答
1072 浏览

circuit-breaker - Polly 和包装策略

我是 Polly 的新手,正在尝试创建一个具有回退和超时策略的断路器。我的设置如下所示,其中所有策略都是“全局”的,因此它们在调用之间保持状态:

后来我使用 _policy 来调用外部 webapi:

我想要实现的是如果断路器策略与超时策略相结合,则激活回退响应......使用当前设置,它在第一轮工作,即在该回退启动后 20 秒内发生 5 个错误......我等待 30 sek 和现在只有 1 次超过 1500 毫秒的后备再次启动(?),但这还为时过早,因为断路器策略应该在 20 秒跨度内进行 5 次尝试,然后回退开始......如果有人能指出我,我会很高兴在正确的方向如何解决这个问题。

谢谢!

0 投票
1 回答
862 浏览

c# - 通过 Lambda Func 发出 Http 请求

我正在尝试通过一个管理断路器投票策略的辅助函数发出 httpclient 请求。

我试着这样称呼它var response = clientFactory.MakeRequest(() => client.GetAsync("/"));

在客户端工厂内部,我定义了断路器策略,我正在尝试使用该策略执行上面的 lambda,如下所示

作为一个整体,我对 Lambda 相当陌生,将它作为函数传递会变得更加混乱。如何配置函数和第一行代码来执行客户端并返回HttpResponseMessage?我不认为Task<HttpResponseMessage>Func<HttpResponseMessage>不正确

0 投票
1 回答
136 浏览

asp.net-mvc - 在 Polly 中共享 CircuitState

据我了解,Polly 中的策略是线程安全的,并且应该只有一个共享实例。

所以我想在需要知道电路是否打开的控制器中注入一个单例 CB Policy 是安全的。

我对吗?