使用 Java 实现重试策略

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

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

配置重试选项

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

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

属性 类型​​ 说明 默认值
retryPolicyType RetryPolicyType 可选。 用于计算重试延迟的方法。 EXPONENTIAL
maxTries Integer 可选。 放弃前的最大重试尝试次数。 4
tryTimeoutInSeconds Integer 可选。 在取消请求之前允许的最大时间,并假定失败。 请注意,超时适用于操作请求,而不是整个操作的端到端时间。 此值应基于主机可用的带宽以及靠近存储服务的带宽。 良好的起点可能是每个 MB 预期有效负载大小的 60 秒。 Integer.MAX_VALUE(秒)
retryDelayInMs Long 可选。 指定在重试操作之前要使用的延迟量。 EXPONENTIAL 为 4ms,FIXED 为 30ms
maxRetryDelayInMs Long 可选。 指定在重试操作之前允许的最大延迟。 120 毫秒
secondaryHost 字符串 可选。 要针对其重试请求的辅助存储帐户终结点。 在设置此值之前,应了解有关读取过时和可能不一致的数据的问题。 有关详细信息,请参阅使用异地冗余设计高度可用的应用程序

在以下代码示例中,我们在 RequestRetryOptions 实例中配置重试选项,并将其传递给 BlobServiceClientBuilder 以创建客户端对象:

RequestRetryOptions retryOptions = new RequestRetryOptions(RetryPolicyType.FIXED, 2, 3, 1000L, 1500L, null);
BlobServiceClient client = new BlobServiceClientBuilder()
        .endpoint("https://<storage-account-name>.blob.core.chinacloudapi.cn/")
        .credential(credential)
        .retryOptions(retryOptions)
        .buildClient();

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

后续步骤

  • 本文是 Java 版 Blob 存储开发人员指南的一部分。 请参阅构建应用中的开发人员指南文章的完整列表。
  • 有关重试策略的体系结构指导和一般最佳做法,请参阅暂时性故障处理
  • 有关针对暂时性故障实现重试模式的指导,请参阅重试模式