问题标签 [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.
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 异常。
c# - 使用 polly 并行化任务
假设我有一个 myObjs 类型的对象列表List<Foo>
。
我有一个波利政策:
我想在并行中运行方法,但在它们失败时继续重试。
这会被并行调用并重试每个obj吗?因此,如果 myObjs[5].do() 失败,是否只会重试其他对象,而其他对象只会执行一次?
另外,我是否应该使用接受 Func 的 ExecuteAsync() 方法而不是示例中所示的 Execute(Action) 方法?Do() 只是一个同步方法,在单独的线程中启动。实际代码如下所示,其中 each() 只是一个 foreach wrapper()
编辑:
我试过代码:
但我得到了结果:
0 1 错误 2 3 4 5
我以为它会再重试2次,但没有。知道为什么吗?
c# - 如何将 Polly 与 Flurl.Http 一起使用?
目前我有这个要求:
我现在想开始使用 Polly ( https://github.com/App-vNext/Polly ) 来处理重试并提供更好的用户体验。例如,由于网络连接不良,第一次尝试时不会“挂断”用户。这是我尝试使用的示例:
但它必须HttpResponse
是返回类型。从我的 Flurl 示例中可以看出,它正在返回T
,即使它是一个HttpResponse
. T
只是用于反序列化的类型StringContent
。
这第一个示例根本不起作用,因为我在 PCL 中使用它并且我无法获得对System.Web
那里的引用。所以我尝试了这个:
但是这个也不起作用,因为 Polly 期望HttpStatusCode
作为返回类型。所以我的问题是:我怎样才能告诉 polly 处理那些HttpStatusCode
s 并且仍然允许我返回 type T
?
polly - Polly - System.InvalidperationException
我正在为 Sql Azure 使用 polly。我对进程进行了内存转储,当使用 SOS.dll 和 !dumpheap -stat -type Exception 时,我可以看到很多 System.InvalidOperationException 以及来自 polly 内部的“永远不应抛出此异常”的消息。我正在使用波利 4.1.1。有关如何进行的任何指示?
polly - 使用用户反馈编写 Polly 策略
在我的代码中,有几个策略需要相同。例如:
然后我会有一些可以完成工作的代码:
这很好用,我可以在我的代码中到处乱扔后面的语句,在一个中心位置改变行为,这一切似乎都有效。
但是在某些地方,我需要向用户/框架提供一些正在发生问题的反馈。我可以写一个新的策略:
但是现在我已经失去了重用公共代码的能力。我真正希望能够写的是如下内容:
或者类似的东西。我可能在图书馆里忽略了一些东西,在这种情况下,我道歉!
c# - 在 HttpStatusCode.Unauthorized 之后使用 Polly 重试
我正在调用外部 API,并希望处理调用返回Unauthorized
HttpResponseMessage
. 发生这种情况时,我想刷新访问令牌并再次拨打电话。
我正在尝试使用Polly
以下代码:
ExecuteAsync
我在语句上设置了断点,并且在DoSomethingAsync
- 当我跨过时ExecuteAsync
DoSomethingAsync
不调用并且控制权返回给调用的函数MakeGetRequestAsync
我不明白为什么DoSomethingAsync
不叫 - 任何人都可以帮助我实现我想要实现的目标吗?
我查看了有关 Stack Overflow 的 Polly 文档和 Polly 问题,但我不知道发生了什么......
.net - 执行多项政策
如何执行多个策略(或将它们组合成一个策略)?
例如我有:
如何将它们同时应用于一种方法?
c# - 如何从 Npgsql 异常中判断调用是否值得重试(瞬态故障策略)
我正在编写一个将连接到远程 postgres 服务器的服务。我正在寻找一种好方法来确定哪些异常应被视为瞬态(值得重试),以及如何定义连接到远程数据库的适当策略。
该服务使用 Npgsql 进行数据访问。文档说 Npgsql 将为 sql 错误抛出一个 PostgresException ,为“服务器相关问题”抛出一个 NpgsqlException 。
到目前为止,我能想到的最好的方法是假设所有不是 PostgresExceptions 的异常都应该被视为可能是暂时的,值得重试,但是 PostgresException 意味着查询有问题并且重试无济于事. 我在这个假设中正确吗?
我正在使用 Polly 创建重试和断路器策略。因此,我的政策如下所示:
有没有更好的方法来确定哪些错误可能是暂时的?
更新:
按照 Shay 的建议,我在 Npgsql 中打开了一个新问题,并将我的 Policy 更新为如下所示:
c# - Refit ApiException 的最佳重试策略?
我同时使用Refit和Polly来调用 restful API,我想知道 Refits ApiException 的重试(如果有的话)策略应该是什么?
然后我像这样使用它
问题
ApiExceptions的正常重试策略是什么?你会只是电路刹车还是在什么一般情况下你会做一些事情来恢复?
答案可能是“这取决于您的服务返回什么”,但我只需要问一下。
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?