AWS SQS 消息队列
用托管队列解耦生产/消费 — 至少一次投递、FIFO 排序、死信队列。
AWS进阶
为什么
SQS 解耦组件 — 生产者不等、消费者独立伸缩。100 万请求/月免费,之后 $0.40/百万。FIFO 保序、DLQ 捕获失败。无 broker 管理。
何时使用
异步工作(邮件、图像处理)、负载均衡和扇出时用。避免发布订阅(用 SNS)或流(用 Kinesis)。
如何做
1. 创建队列 — aws sqs create-queue --queue-name my-queue
2. 发送 — aws sqs send-message --message-body '{"job":"resize"}'
3. 接收 — aws sqs receive-message --max-number-of-messages 10
4. 处理后删除 — aws sqs delete-message --receipt-handle <rh>
5. 可见性超时 — 处理时消息隐藏,自动重现
6. FIFO — .fifo 后缀,ContentBasedDeduplication 做精确一次
7. DLQ — RedrivePolicy 在 N 次接收后移失败消息
8. Lambda 触发 — SQS → Lambda,批最多 10 消息
示例
# 创建带 DLQ 的 FIFO 队列
aws sqs create-queue --queue-name orders.fifo \
--attributes FifoQueue=true,ContentBasedDeduplication=true
# 发送消息
aws sqs send-message \
--queue-url https://sqs.us-east-1.amazonaws.com/123/orders.fifo \
--message-body '{"orderId":"456"}' \
--message-group-id "user-123"
# Lambda 消费者带部分批失败
export const handler = async (event) => {
const failed = [];
for (const record of event.Records) {
try { await process(JSON.parse(record.body)); }
catch (e) { failed.push(record.messageId); }
}
return { batchItemFailures: failed.map(id => ({ itemIdentifier: id })) };
};
常见问题
- ⚠毒丸消息 — DLQ 设 maxReceiveCount,查 DLQ 非主队列
- ⚠FIFO 吞吐限制 — 每组 300 消息/秒,批处理 3000/秒
- ⚠Lambda 部分批失败 — 返回 batchItemFailures,SQS 仅重试失败的
最佳实践
- ✓始终设 DLQ — 捕获失败、防无限重试
- ✓仅需要时用 FIFO — Standard 吞吐便宜 10 倍
- ✓批处理 — Lambda 收最多 10 消息,吞吐 10 倍
常见问题解答
什么是AWS SQS 消息队列?它解决什么问题?
用托管队列解耦生产/消费 — 至少一次投递、FIFO 排序、死信队列。 它可帮助开发者在不自建基础设施的前提下完成部署、存储与扩展,是云服务选型的核心参考。
如何在 5 分钟内上手AWS SQS 消息队列?
两步即可跑通:① 创建队列 — aws sqs create-queue --queue-name my-queue;② 发送 — aws sqs send-message --message-body '{"job":"resize"}'。建议先用免费套餐验证流程,再接入生产环境。
AWS SQS 消息队列 最容易踩的坑是什么?
最高频的问题是:毒丸消息 — DLQ 设 maxReceiveCount,查 DLQ 非主队列。建议在上线前用 checklist 逐项核对,并在 CI 中加入策略与配置扫描。
AWS SQS 消息队列 的最佳实践有哪些?
AWS SQS 消息队列 的最佳实践包括:始终设 DLQ — 捕获失败、防无限重试;仅需要时用 FIFO — Standard 吞吐便宜 10 倍;批处理 — Lambda 收最多 10 消息,吞吐 10 倍。其中首条「始终设 DLQ — 捕获失败、防无限重试」应作为团队默认规范写入 IaC 模板。
AWS SQS 消息队列 如何控制成本与避免账单意外?
三招防超支:① 为所有资源打 env/team 标签并启用账单告警;② 用预算阈值触发 Slack/邮件通知;③ 定期用 Cost Explorer 审查闲置资源并清理。AWS SQS 消息队列 多数提供免费套餐,先在免费额度内验证再放量。