【问题标题】:Do I need both TransientFaultHandling and SaveChangesWithRetries for save data into Azure Storage?是否需要 TransientFaultHandling 和 SaveChangesWithRetries 才能将数据保存到 Azure 存储?
【发布时间】:2012-03-24 15:59:06
【问题描述】:

http://msdn.microsoft.com/en-us/library/hh680905(v=pandp.50).aspx 瞬态故障处理提供了处理连接错误等的能力。

SaveChangesWithRetries()表示故障时也可以重试。

我想知道,我是否需要在SaveChangesWithRetries 上使用TransientFaultHandling 换行;

或者:因为他们正在阻止同样的事情,所以SaveChangesWithRetries()就足够了

【问题讨论】:

    标签: c# azure azure-table-storage


    【解决方案1】:

    这很有趣。我不会想到 Windows Azure 存储客户端会使用“瞬态故障处理”(TFS) 指南。对于 blob 和队列(也有一些表操作),已经有一个默认的重试策略。因此,如果您要结合使用 TFS 策略,我肯定会删除默认情况下存储客户端上的重试策略(使用 Retry.NoRetry)(这是每个 30 秒内的指数退避,4 次重试策略) .

    话虽如此,但我在实践中发现 Windows Azure 存储的重试策略已被证明比无用更糟糕(即你最好根本不使用它们)。如果不指定非常自定义的重试策略,它们实际上根本无法正常工作。请注意,我在这里谈论的是存储而不是 SQL Azure。由于您使用的是基于 REST 的协议,因此在重试策略有点意义的情况下,没有可以“重置”的有状态连接。您最终看到的大多数错误(> 90% 来自经验)都是您永远不会想要重试的错误。例如,大多数失败是 403 禁止、DNS 解析失败、404 错误等。几乎无一例外,您永远都不想重试这些(例如,如果您的凭据错误,为什么还要再试 4 次?)。在大多数情况下最终发生的情况是,您正在重试一个永远不会成功的错误,并且您浪费了大约 2 分钟(每次 30 秒重试 4 次)最终放弃。我的建议是简单地禁用该策略并处理异常。

    【讨论】:

    • 我遇到了很多错误,例如No connection could be made because the target machine actively refused it 70.37.127.112:443。我使用重试策略new FixedInterval(3, TimeSpan.FromSeconds(1));。希望这项工作,会看到
    • 我很少看到这个错误。我想知道你为什么看到这么多。如有必要,您可以保留某些读取操作的默认策略并删除它以进行写入等。
    • 我也想知道为什么我会遇到这么多错误,为什么我总是在同一台机器上,请检查我的新问题stackoverflow.com/questions/9859286/…
    猜你喜欢
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 2020-12-01
    • 2020-11-21
    • 2021-01-22
    • 2012-04-23
    相关资源
    最近更新 更多