首页 > 解决方案 > SQS SendMessage 的高延迟

问题描述

我们使用部署在同一区域的 AWS SQS 标准队列作为服务 (eu-west-1) 并从服务中批量发布消息(10 条消息)。我们使用SendMessageBatchSDK 中的每批 10 条消息。我注意到通过 Cloudwatch 观察到的 SDK Metrics 的高延迟,尤其是 p99(大约 60 毫秒,对于同一地区来说似乎很高)。延迟对下游消费者来说至关重要,因此我们正在尝试尽可能优化。这就是我创建 SQS 客户端的方式。

   ClientConfiguration configuration = new ClientConfiguration();
    configuration.setUseTcpKeepAlive(true);
    configuration.setMaxConnections(10);
    configuration.setRetryPolicy(
        new RetryPolicy(
            new SQSNonBatchRetryCondition(),
            new PredefinedBackoffStrategies.ExponentialBackoffStrategy(BASE_DELAY_MS, Integer.MAX_VALUE),
            MAX_ERROR_RETRY,
            true
        )
    );

    AmazonSQSClientBuilder sqsClientBuilder = AmazonSQSClientBuilder.standard()
        .withCredentials(new STSAssumeRoleSessionCredentialsProvider
            .Builder(writerRole, "SendMessageRole")
            .withStsClient(stsClient)
            .build()
        )
        .withClientConfiguration(configuration)
        .withRegion(region.toString());

    return sqsClientBuilder.build();

我为队列启用了长轮询。寻找改善发布延迟的想法,以及是否有任何其他 SQS 替代品(如 Kineses 或MSK)更适合这里,同时考虑到我们想要一个故障转移策略,并且如果无法处理消息就不会丢失它们。

标签: amazon-web-servicesamazon-sqsamazon-kinesislatency

解决方案


推荐阅读