我正在使用 AmazonSQSClient 与 SQS 服务交互并使用默认客户端配置,这意味着它已经在使用 DEFAULT_RETRY_POLICY。
假设我在我的 Java 代码中调用了“sendMessage”方法。
根据文档,该方法可以抛出 2 种类型的异常:InvalidMessageContentsException 和 UnsupportedOperationException。
现在假设由于某种原因,SQS 服务不可用,即使重试后 SQSClient 也无法执行 sendMessage 操作。我试图了解如何在我的 Java 代码中了解这一点。我可以捕获上述异常,但我认为这些异常不会包含我需要的信息。它们似乎与无效消息或不受支持的操作更相关。
我错过了什么吗?想法?
这看起来像相关的Java SDK代码。
private void handleRetryableException(ExecOneRequestParams execOneParams, Exception e) {
captureExceptionMetrics(e);
awsRequestMetrics.addProperty(Field.AWSRequestID, null);
SdkClientException sdkClientException;
if (!(e instanceof SdkClientException)) {
sdkClientException = new SdkClientException(
"Unable to execute HTTP request: " + e.getMessage(), e);
} else {
sdkClientException = (SdkClientException) e;
}
boolean willRetry = shouldRetry(execOneParams, sdkClientException);
if (log.isTraceEnabled()) {
log.trace(sdkClientException.getMessage() + (willRetry ? " Request will be retried." : ""), e);
} else if (log.isDebugEnabled()) {
log.trace(sdkClientException.getMessage() + (willRetry ? " Request will be retried." : ""));
}
if (!willRetry) {
throw lastReset(sdkClientException);
}
// Cache the retryable exception
execOneParams.retriedException = sdkClientException;
}
这个部分让我相信你会收到一个
SdkClientException
里面有因果异常。
if (!(e instanceof SdkClientException)) {
sdkClientException = new SdkClientException(
"Unable to execute HTTP request: " + e.getMessage(), e);