问题标签 [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 投票
2 回答
1325 浏览

c# - 陷阱 SQL 故障转移异常

我正在利用 NuGet 包Polly来实现捕获故障转移 SQL 异常的重试逻辑。我在 Azure 中设置了 SQL Server Always On High Availability。

我不想捕获所有 SQL 异常(这将是不正确的),而是希望捕获发生故障转移时发生的特定 SQL 异常。

从 SSMS 中,我显示仪表板,然后我能够人为地触发故障转移来测试我的代码。最初,我让所有异常都冒泡(所以没有陷阱)。然后我会排队进行故障转移并查看我的日志以查看引发了什么 SQL 异常。随后,我能够捕获由于故障转移而发生的所有 SQL 异常。

我的问题是,这是一份完整的清单吗?在 SQL Server 故障转移上实现重试逻辑的其他人是否会捕获任何其他 SQL 异常?

我已经用逻辑尝试了将近 100 次故障转移,但没有出现任何问题。这当然并不意味着我已经捕获了全部的故障转移 SQL 异常。

重试逻辑有 Policy.Handle(se => IsFailoverSqlException(se))。当故障转移排队时,根据我在代码中的位置,我看到了我在下面捕获的三个 SQL 异常。

0 投票
1 回答
1415 浏览

c# - 使用 polly 并行化任务

假设我有一个 myObjs 类型的对象列表List<Foo>

我有一个波利政策:

我想在并行中运行方法,但在它们失败时继续重试。

这会被并行调用并重试每个obj吗?因此,如果 myObjs[5].do() 失败,是否只会重试其他对象,而其他对象只会执行一次?

另外,我是否应该使用接受 Func 的 ExecuteAsync() 方法而不是示例中所示的 Execute(Action) 方法?Do() 只是一个同步方法,在单独的线程中启动。实际代码如下所示,其中 each() 只是一个 foreach wrapper()

编辑:

我试过代码:

但我得到了结果:

0 1 错误 2 3 4 5

我以为它会再重试2次,但没有。知道为什么吗?

0 投票
3 回答
5917 浏览

c# - 如何将 Polly 与 Flurl.Http 一起使用?

目前我有这个要求:

我现在想开始使用 Polly ( https://github.com/App-vNext/Polly ) 来处理重试并提供更好的用户体验。例如,由于网络连接不良,第一次尝试时不会“挂断”用户。这是我尝试使用的示例:

但它必须HttpResponse是返回类型。从我的 Flurl 示例中可以看出,它正在返回T,即使它是一个HttpResponse. T只是用于反序列化的类型StringContent

这第一个示例根本不起作用,因为我在 PCL 中使用它并且我无法获得对System.Web那里的引用。所以我尝试了这个:

但是这个也不起作用,因为 Polly 期望HttpStatusCode作为返回类型。所以我的问题是:我怎样才能告诉 polly 处理那些HttpStatusCodes 并且仍然允许我返回 type T

0 投票
0 回答
96 浏览

polly - Polly - System.InvalidperationException

我正在为 Sql Azure 使用 polly。我对进程进行了内存转储,当使用 SOS.dll 和 !dumpheap -stat -type Exception 时,我可以看到很多 System.InvalidOperationException 以及来自 polly 内部的“永远不应抛出此异常”的消息。我正在使用波利 4.1.1。有关如何进行的任何指示?

0 投票
1 回答
213 浏览

polly - 使用用户反馈编写 Polly 策略

在我的代码中,有几个策略需要相同。例如:

然后我会有一些可以完成工作的代码:

这很好用,我可以在我的代码中到处乱扔后面的语句,在一个中心位置改变行为,这一切似乎都有效。

但是在某些地方,我需要向用户/框架提供一些正在发生问题的反馈。我可以写一个新的策略:

但是现在我已经失去了重用公共代码的能力。我真正希望能够写的是如下内容:

或者类似的东西。我可能在图书馆里忽略了一些东西,在这种情况下,我道歉!

0 投票
3 回答
12223 浏览

c# - 在 HttpStatusCode.Unauthorized 之后使用 Polly 重试

我正在调用外部 API,并希望处理调用返回Unauthorized HttpResponseMessage. 发生这种情况时,我想刷新访问令牌并再次拨打电话。

我正在尝试使用Polly以下代码:

ExecuteAsync我在语句上设置了断点,并且在DoSomethingAsync- 当我跨过时ExecuteAsync DoSomethingAsync不调用并且控制权返回给调用的函数MakeGetRequestAsync

我不明白为什么DoSomethingAsync不叫 - 任何人都可以帮助我实现我想要实现的目标吗?

我查看了有关 Stack Overflow 的 Polly 文档和 Polly 问题,但我不知道发生了什么......

0 投票
1 回答
2928 浏览

.net - 执行多项政策

如何执行多个策略(或将它们组合成一个策略)?

例如我有:

如何将它们同时应用于一种方法?

0 投票
1 回答
2907 浏览

c# - 如何从 Npgsql 异常中判断调用是否值得重试(瞬态故障策略)

我正在编写一个将连接到远程 postgres 服务器的服务。我正在寻找一种好方法来确定哪些异常应被视为瞬态(值得重试),以及如何定义连接到远程数据库的适当策略。

该服务使用 Npgsql 进行数据访问。文档说 Npgsql 将为 sql 错误抛出一个 PostgresException ,为“服务器相关问题”抛出一个 NpgsqlException 。

到目前为止,我能想到的最好的方法是假设所有不是 PostgresExceptions 的异常都应该被视为可能是暂时的,值得重试,但是 PostgresException 意味着查询有问题并且重试无济于事. 我在这个假设中正确吗?

我正在使用 Polly 创建重试和断路器策略。因此,我的政策如下所示:

有没有更好的方法来确定哪些错误可能是暂时的?

更新:

按照 Shay 的建议,我在 Npgsql 中打开了一个新问题,并将我的 Policy 更新为如下所示:

0 投票
1 回答
5840 浏览

c# - Refit ApiException 的最佳重试策略?

我同时使用RefitPolly来调用 restful API,我想知道 Refits ApiException 的重试(如果有的话)策略应该是什么?

然后我像这样使用它

问题

ApiExceptions的正常重试策略是什么?你会只是电路刹车还是在什么一般情况下你会做一些事情来恢复?

答案可能是“这取决于您的服务返回什么”,但我只需要问一下。

0 投票
3 回答
17366 浏览

c# - Polly policy to log exception and rethrow

I consider to use Polly to create policy to log exception and rethrow. I didn't find an existing method that allow it out of the box , but some options that I see are

Fallback

Question: is it ok to throw exception from Fallback?

Timeout

Or Retry

Question: is 0 retries supported?

Or KISS and write simple try/catch with throw by myself.

Which of these methods is better? What are your recommendation?