Skip to content
返回云服务

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 消息队列 多数提供免费套餐,先在免费额度内验证再放量。