Skip to content
返回云服务

AWS SQS 与 SNS 消息

SQS 队列解耦和 SNS 发布/订阅扇出 — 至少一次投递,无限扩展。

AWS进阶

为什么

SQS/SNS 解耦服务并吸收流量尖峰 — 100 万+ 消息/秒,按请求付费。SQS FIFO 保证顺序,SNS 扇出到多队列。免费:100 万请求/月。

何时使用

任务队列用 SQS、事件广播用 SNS、SNS→SQS 扇出并行处理。避免流(用 Kinesis)或需恰好一次(用 Lambda 幂等)。

如何做

1. 创建队列 — aws sqs create-queue --queue-name my-queue 2. 发送 — aws sqs send-message --queue-url URL --message-body '{"job":"x"}' 3. 接收 — aws sqs receive-message,处理,成功后删除 4. 可见性超时 — 处理时消息隐藏,未删除则重现 5. DLQ — 死信队列配置,maxReceiveCount 后失败消息移入 6. SNS 主题 — aws sns create-topic,订阅 SQS/Lambda/HTTP 端点 7. 扇出 — SNS → 多个 SQS 订阅,各得副本 8. FIFO — .fifo 后缀,基于内容去重,组 ID 排序

示例

# SNS → SQS 扇出(一事件,多处理器) aws sns create-topic --name order-events aws sqs create-queue --queue-name inventory-queue aws sqs create-queue --queue-name email-queue # 两队列订阅主题 aws sns subscribe --topic-arn arn:aws:sns:...:order-events \ --protocol sqs --notification-endpoint arn:aws:sqs:...:inventory-queue // Lambda 消费 SQS 批处理 export const handler = async (event: { Records: SQSRecord[] }) => { for (const record of event.Records) { const body = JSON.parse(record.body); await processOrder(body); } }; # DLQ 配置 — 5 次接收失败后移到 dlq aws sqs set-queue-attributes --queue-url URL --attributes \ RedrivePolicy='{"deadLetterTargetArn":"arn:aws:sqs:...:dlq","maxReceiveCount":"5"}'

常见问题

  • ⚠无 DLQ 毒消息 — 永久阻塞队列,始终配 DLQ
  • ⚠FIFO 吞吐限制 — 无批处理 300 消息/秒,有则 3000
  • ⚠SNS → SQS JSON 包装 — 消息包在 SNS 信封,解析 body.Message

最佳实践

  • ✓始终设 DLQ — 防毒消息阻塞队列
  • ✓Lambda 用 SQS 批处理(10 消息)— 调用减 10 倍,更低成本
  • ✓消费者幂等 — SQS 至少一次,按消息 ID 去重

常见问题解答

什么是AWS SQS 与 SNS 消息?它解决什么问题?

SQS 队列解耦和 SNS 发布/订阅扇出 — 至少一次投递,无限扩展。 它可帮助开发者在不自建基础设施的前提下完成部署、存储与扩展,是云服务选型的核心参考。

如何在 5 分钟内上手AWS SQS 与 SNS 消息?

两步即可跑通:① 创建队列 — aws sqs create-queue --queue-name my-queue;② 发送 — aws sqs send-message --queue-url URL --message-body '{"job":"x"}'。建议先用免费套餐验证流程,再接入生产环境。

AWS SQS 与 SNS 消息 最容易踩的坑是什么?

最高频的问题是:无 DLQ 毒消息 — 永久阻塞队列,始终配 DLQ。建议在上线前用 checklist 逐项核对,并在 CI 中加入策略与配置扫描。

AWS SQS 与 SNS 消息 的最佳实践有哪些?

AWS SQS 与 SNS 消息 的最佳实践包括:始终设 DLQ — 防毒消息阻塞队列;Lambda 用 SQS 批处理(10 消息)— 调用减 10 倍,更低成本;消费者幂等 — SQS 至少一次,按消息 ID 去重。其中首条「始终设 DLQ — 防毒消息阻塞队列」应作为团队默认规范写入 IaC 模板。

AWS SQS 与 SNS 消息 如何控制成本与避免账单意外?

三招防超支:① 为所有资源打 env/team 标签并启用账单告警;② 用预算阈值触发 Slack/邮件通知;③ 定期用 Cost Explorer 审查闲置资源并清理。AWS SQS 与 SNS 消息 多数提供免费套餐,先在免费额度内验证再放量。