在 AmazonSQSClient 上重试

问题描述 投票:0回答:1

我正在使用 AmazonSQSClient 与 SQS 服务交互并使用默认客户端配置,这意味着它已经在使用 DEFAULT_RETRY_POLICY。

假设我在我的 Java 代码中调用了“sendMessage”方法。

根据文档,该方法可以抛出 2 种类型的异常:InvalidMessageContentsException 和 UnsupportedOperationException。

现在假设由于某种原因,SQS 服务不可用,即使重试后 SQSClient 也无法执行 sendMessage 操作。我试图了解如何在我的 Java 代码中了解这一点。我可以捕获上述异常,但我认为这些异常不会包含我需要的信息。它们似乎与无效消息或不受支持的操作更相关。

我错过了什么吗?想法?

amazon-web-services amazon-sqs retry-logic
1个回答
0
投票

看起来像相关的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);
© www.soinside.com 2019 - 2024. All rights reserved.