以可持续的方式使用 Azure 处理瞬态故障

transient fault handling with azure in a sustainable way

Azure 文档缺乏,文章经常过时。

我读过 Azure 服务的“瞬态故障处理”(TFH)(ServiceBusFileStorage ...) 现在已完全托管。现在似乎没有什么可以在客户端实现的。过去,我们可以使用 Enterprise Library 来管理这些用途,但它已经退休了。为了访问 SQL 数据库,为 Entity Framework (https://msdn.microsoft.com/en-us/data/dn456835.aspx) 实施了一个策略。

这是我的问题:

我们需要确保我们的组件(使用 WebClient、原始 ADO.NET...)将 运行 以可维护的方式正确。

I've read that "Transient Fault Handling" (TFH) for Azure services (ServiceBus, FileStorage...) is now fully managed. It seems now there is nothing to implement on the client side.

这是不正确的。该服务本身不会处理暂时性错误。处理暂时性错误是客户端的责任。如果您查看 Storage Client Library(>= 2.0 版),您会在那里找到重试策略,您可以使用这些策略指示您的客户端代码处理瞬态错误。

现在回答您的问题:

Is it necessary to use Azure SDK on ServiceBus and FileStorage to benefit from policies that are now implemented on Azure ?

当然没有必要使用 SDK 来处理暂时性错误,但它们可以让您的工作更轻松。 SDK 提供了多种处理瞬态错误的方法(此外,您还可以扩展 SDK 中的可用功能以提出您自己的瞬态处理策略)。为了详细说明,让我们考虑存储客户端库,它是 Azure 存储 REST API 的包装器。现在这个库已经定义了哪些错误应该被认为是暂时的(HTTP 状态代码 500+),哪些错误不应该被认为是暂时的(HTTP 状态代码 400 - 499)。此外,它还带有不同类型的重试逻辑——指数(默认)、线性或 None。作为开发人员,您可以决定在出现暂时性错误时应使用何种重试逻辑,并将其融入您的代码中。如果您没有使用这些 SDK,则一切都需要您自己完成,从哪些错误应该被视为暂时性错误以及如何实施重试开始。 SDK 让您的工作更轻松。

How is it possible to manage TFH when accessing data with something that is not EF ?

如果您在使用 ADO.Net 时遇到异常,您可以查看服务返回的 ErrorCode 并确定该错误是否是暂时的。有关 SQL 错误代码的列表,请参阅此 link:https://azure.microsoft.com/en-in/documentation/articles/sql-database-develop-error-messages/. I would also highly recommend reading this article as well as to how you would go about implementing your own TFH: https://azure.microsoft.com/en-in/documentation/articles/sql-database-connectivity-issues/