【问题标题】:With the retry options in durable functions, what happens after the last attempt?使用持久函数中的重试选项,最后一次尝试后会发生什么?
【发布时间】:2019-07-02 00:38:05
【问题描述】:
我正在使用一个从队列中触发的持久函数。我正在将队列中的消息发送到一个非常不稳定的服务,因此我设置了 RetryPolicy。尽管如此,我希望能够看到失败的消息即使最大重试次数已用尽。
我是否需要手动将它们扔到死信队列(如果是这样,我不清楚我如何知道消息何时重试了任意次数),或者该函数是否会自然地将它们扔给一些那种死信/毒药队列?
【问题讨论】:
标签:
azure
azureservicebus
dead-letter
azure-durable-functions
【解决方案1】:
当 Durable Functions 中的活动失败时,异常会被编组回编排,并抛出 FunctionFailedException。无论您是否使用自动重试都没关系 - 最后,整个活动都会失败,由您来处理这种情况。根据文档:
try
{
await context.CallActivityAsync("CreditAccount",
new
{
Account = transferDetails.DestinationAccount,
Amount = transferDetails.Amount
});
}
catch (Exception)
{
// Refund the source account.
// Another try/catch could be used here based on the needs of the application.
await context.CallActivityAsync("CreditAccount",
new
{
Account = transferDetails.SourceAccount,
Amount = transferDetails.Amount
});
}
唯一的重试更改是处理瞬时错误(因此您不必每次遇到网络问题时都启用安全路由)。