使用 JavaScript 或 TypeScript 实现重试策略

在云中运行或与远程服务和资源通信的任何应用程序都必须能够处理暂时性故障。 这些应用程序经常因为网络连接瞬间断开、服务或资源繁忙时请求超时或其他因素而遇到故障。 开发人员应生成能够以透明方式处理暂时性故障的应用程序,以提高稳定性和复原能力。

本文介绍如何使用适用于 JavaScript 的 Azure 存储客户端库为连接到 Azure Blob 存储的应用程序配置重试策略。 重试策略定义应用程序如何处理失败的请求,并始终根据应用程序的业务要求和故障性质得到优化。

配置重试选项

Blob 存储的重试策略是以编程方式配置的,让用户可以控制如何将重试选项应用于各种服务请求和方案。 例如,基于用户交互发出请求的 Web 应用可以实现一个重试次数较少且延迟较短的策略,以提高响应能力并在出错时通知用户。 或者,在后台运行批处理请求的应用或组件可以增加重试次数,并使用指数退避策略以允许请求时间成功完成。

下表列出了在创建 StorageRetryOptions 实例时可用的参数,以及类型、简要说明和默认值(如果未进行更改)。 应主动优化这些属性的值,以满足应用的需求。

属性 类型​​ 说明 默认值
maxRetryDelayInMs number 可选。 指定在重试操作之前允许的最大延迟。 120 秒(即 120 * 1000 毫秒)
maxTries number 可选。 放弃前的最大重试尝试次数。 4
retryDelayInMs number 可选。 指定在重试操作之前要使用的延迟量。 4 秒(即 4 * 1000 毫秒)
retryPolicyType StorageRetryPolicyType 可选。 StorageRetryPolicyType,默认为指数重试策略。 StorageRetryPolicyType.Exponential
secondaryHost string 可选。 要针对其重试请求的辅助存储帐户终结点。 在设置此值之前,应了解有关读取过时和可能不一致的数据的问题。 有关详细信息,请参阅使用异地冗余设计高度可用的应用程序
tryTimeoutInMs number 可选。 在取消请求之前允许的最大时间,并假定失败。 此超时适用于操作请求,应该基于主机可用的带宽以及与存储服务的邻近度。 如果值为 0 或未定义,则客户端上没有默认超时,将使用服务器端的默认超时。 有关详细信息,请参阅 Blob 服务操作的超时

以下代码示例在 StorageRetryOptions 实例中配置重试选项,将其传递给新的 StoragePipelineOptions 实例,并在实例化 BlobServiceClient 时传递 pipeline

const options = {
  retryOptions: {
    maxTries: 4,
    retryDelayInMs: 3 * 1000,
    maxRetryDelayInMs: 120 * 1000,
    retryPolicyType: StorageRetryPolicyType.EXPONENTIAL
  },
};

const pipeline = newPipeline(credential, options);

const blobServiceClient = new BlobServiceClient(
  `https://${accountName}.blob.core.chinacloudapi.cn`,
  credential,
  pipeline
);

在此示例中,从 BlobServiceClient 对象发出的每个服务请求将使用 retryOptions 中定义的重试选项。 此策略适用于客户端请求。 你可以根据应用的需求为服务客户端配置各种重试策略。

  • 有关重试策略的体系结构指导和一般最佳做法,请参阅暂时性故障处理
  • 有关针对暂时性故障实现重试模式的指导,请参阅重试模式