amazon-web-services - SQS SendMessage 的高延迟
问题描述
我们使用部署在同一区域的 AWS SQS 标准队列作为服务 (eu-west-1) 并从服务中批量发布消息(10 条消息)。我们使用SendMessageBatch
SDK 中的每批 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)更适合这里,同时考虑到我们想要一个故障转移策略,并且如果无法处理消息就不会丢失它们。
解决方案
推荐阅读
- c# - 尝试创建 n 个任务并并行运行它们。我究竟做错了什么?
- c++ - 将自定义类(继承 QObject)传递给 QML 的最佳方法是什么?
- linux - 如何在 strace 日志中读取 error62?
- cassandra - 将数据帧写入面向 BusyPoolException 的 cassandra
- php - 如何在短代码中将页面标题作为参数发送
- spring - 同时保存孩子和父母
- php - 哪些 PHP 函数受 allow_url_fopen 影响?
- c# - 无法添加到列表中的数字
- mysql - Access MySQL json column parameter as NULL if it is unknown
- html - 将不同的 css 样式应用于两个具有相同类名的相同 h4 标签