从 EC2 到 SQS 的连接有时会丢失

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

平均每月一次,我在 AWS EC2 计算机上运行的 Java 应用程序会失去与 AWS SQS 的连接:

尝试与服务交互时收到 UnknownHostException。查看无法解析的确切端点的原因。如果这种情况发生在以前工作的端点上,则可能存在网络连接问题,或者您的 DNS 缓存可能存储端点的时间过长。

根本原因:

java.net.UnknownHostException: sqs.eu-west-3.amazonaws.com

我检查了我的java缓存DNS配置,这是docker镜像的默认配置

amazoncorretto:17-alpine
:

  • networkaddress.cache.ttl=30
  • networkaddress.cache.negative.ttl=10

以下是我使用 AWS SDKv2 配置 SqsClient 的方法:

SqsClient sqsClient = SqsClient.builder()
                    .region(Region.EU_WEST_3)
                    .credentialsProvider(InstanceProfileCredentialsProvider.create())
                    .build();

以及我如何消费消息:

ReceiveMessageRequest receiveMessageRequest = ReceiveMessageRequest.builder()
                    .queueUrl(queueUrl)
                    .maxNumberOfMessages(1)
                    .visibilityTimeout(30)
                    .build();

sqsClient.receiveMessage(sqsRequest)
                .messages()
                .forEach(message -> /*some processing*/);

当我使用

SqsClient
的默认配置时,我使用
software.amazon.awssdk.core.retry.RetryMode.STANDARD
重试两次,指数回退从 100 毫秒开始,这意味着我将重试不到一秒,因此低于我的
networkaddress.cache.negative.ttl
配置。

  1. 我应该只增加重试次数吗?
  2. 我有多个应用程序连接到
    eu-west-3
    SQS 队列,它们的配置方式或多或少相同。他们不应该同时抛出
    UnknownHostException
    吗?
java amazon-web-services amazon-sqs
1个回答
0
投票

我偶尔也遇到过类似的情况,频繁调用S3 API。

无论根本原因是什么,我都会增加重试次数。从 100 毫秒开始的指数退避意味着您将在一个小窗口中尝试两次。

© www.soinside.com 2019 - 2024. All rights reserved.