amazon-sqs - 为什么即使接收/删除的指标与已发送的指标匹配,SQS ApproximateNumberOfMessagesVisible 和 ApproximateAgeOfOldestMessage 也会上升?
问题描述
在下面的 CloudWatch 指标图中,紫线是 ApproximateNumberOfMessagesVisible,红线是 ApproximateAgeOfOldestMessage。即使 NumberOfMessagesReceived(橙色)/NumberOfMessagesDeleted(绿色)与 NumberOfMessagesSent(蓝色)匹配,它们也呈上升趋势。
这怎么可能?
在我的代码中,我在一个新线程中处理消息,因此该消息几乎立即从队列中删除。(这在生产中不是很好的做法,但这是一个负载测试脚本,所以我不期望或关心异常)
sqsClient.receiveMessage(queueUrl).getMessages().forEach(msg -> {
pool.execute(() -> handleSqsMessage(msg));
sqsClient.deleteMessage(queueUrl, msg.getReceiptHandle());
});
解决方案
如果approximateAgeOfOldestMessage 增加,则表明存在毒丸。毒丸是消费者无法处理的畸形消息。您的重新驾驶政策是什么?您必须将 max-receive-count 设置为较小的值(例如 3)。消费者收到消息 3 次后,如果无法处理/删除,则将其移至死信队列。然后你就可以分析这颗毒丸了。
如果可见消息的数量一直在增加,则表明您的消费者无法跟上,消息在队列中堆积。这不一定是一个坏信号,但不应该很大。对我来说似乎没问题。你可以增加消费者的数量来降低它。
https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html#sqs-dead-letter-queues-when-to-use https://aws.amazon.com /消息队列/功能/
推荐阅读
- react-native - 如何修复 react-native 中的 'boost/operators.hpp' file not found' 错误
- c# - 无法打开数据库文件(误用)SqlLiteAsyncConnection
- html - 如何使一行图像成为垂直和水平居中的div?
- java - 通过单击信息窗口打开活动
- react-native - 尝试在 Windows 命令行中运行“gradlew assembleRelease”时出错:jest-haste-map: Haste 模块命名冲突
- ios - 从 CMPedometer 检索数据时出现问题:“消息回复错误(连接无效)”
- vue.js - 当我点击按钮使用vuejs时如何隐藏和显示表单
- python - 自动化无聊的东西 Collatz 项目
- c++ - 我在 TSP 的 C++ 解决方案中遇到转换错误
- haskell - 折叠无限列表时堆栈溢出?