本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon SDK for Java 2.x 的异常处理
要使用开发工具包构建高质量的应用程序,必须了解Amazon SDK for Java 2.x 在什么情况下会引发异常以及它以什么方式引发异常。接下来几节介绍开发工具包引发异常的几种不同情况,以及如何正确地处理这些异常。
为什么使用未选中的异常?
出于以下原因,Amazon SDK for Java 使用运行时(或未选中的)异常而不是选中的异常:
-
使开发人员能够精细控制要处理哪些错误,而不是必须处理无关紧要的异常情况(这会导致代码极其冗长)
-
避免大型应用程序因使用选中的异常而固有的可扩展性问题
一般来说,小型应用程序使用选中的异常是可以的,但随着应用程序的大小和复杂程度增加,这样做就会出现问题。
AwsServiceException (和子类)
AwsServiceExceptionAwsServiceException
是更通SdkServiceExceptionAwsServiceException
s 表示来自 a 的错误响应Amazon Web Services 服务。例如,如果您尝试终止不存在的 Amazon EC2 实例,Amazon EC2 会返回错误响应,而且引发的 AwsServiceException
中会包含该错误响应的所有详细信息。
当您遇到 AwsServiceException
时,您就会知道,您的请求已成功发送到 Amazon Web Services 服务,但无法成功处理。这可能是因为请求的参数中存在错误,或者是因为服务端的问题。
AwsServiceException
为您提供很多信息,例如:
-
返回的 HTTP 状态代码
-
返回的 Amazon 错误代码
-
AwsErrorDetails
课堂上来自服务的详细错误消息 -
已失败请求的 Amazon 请求 ID
在某些情况下,会引发 AwsServiceException
的一个特定于服务的子类,使开发人员能够通过捕获模块精细控制如何处理错误情况。的 Java SDK API 参考中AwsServiceExceptionAwsServiceException
子类。使用子类链接可深入查看服务引发的细粒度异常。
例如,以下指向 SDK API 参考的链接中提供了一些常用 Amazon Web Services 服务的异常层次结构。每个页面上的子类列表显示了您的代码可以捕获的特定异常。
要了解有关异常的更多信息,请检查AwsErrorDetailserrorCode
上的。您可以使用该 errorCode
值在服务指南 API 中查找信息。例如,如果捕获到 S3Exception
且 AwsErrorDetails#errorCode()
的值为 InvalidRequest
,则使用《Amazon S3 API Reference》中的 List of error codes 来查看更多详细信息。
SdkClientException
SdkClientExceptionSdkClientException
比 SdkServiceException
严重,前者指示出现严重问题,导致客户端无法对 Amazon 服务进行服务调用。例如,如果您在尝试对一个客户端执行操作时网络连接不可用,Amazon SDK for Java会引发 SdkClientException
。
异常和重试行为
适用于 Java 的 SDK 会针对多个客户端异常RetryMode
的一部分进行处理。有关 RetryMode
的 Java API 参考描述了可用于配置模式的各种方式。
要自定义触发自动重试的异常和 HTTP 状态代码,请使用添加 RetryOnExceptionsCondition
和 RetryOnStatusCodeCondition
实例的 RetryPolicy
来配置服务客户端。