消息传递与事件驱动设计
发布: (2026年1月17日 GMT+8 23:20)
4 min read
原文: Dev.to
Source: Dev.to
事件驱动架构 (EDA)
事件驱动架构是一种由小型、解耦的服务构建的现代模式,这些服务发布、消费或路由事件。
- 事件:表示状态的变化或更新(例如,商品放入购物车、文件上传、订单准备发货)。
- 事件可以携带完整状态(商品名称、价格、数量)或仅携带标识符(例如 “订单 #8942 已发货”),后者可用于查找相关信息。
与传统的请求驱动模型不同,EDA 促进了生产者和消费者服务之间的松耦合,使得扩展、更新和独立部署组件更加容易。
Amazon SQS(Simple Queue Service)
- 完全托管的消息队列
- 用于解耦应用组件
队列类型
| 类型 | 投递保证 | 排序 |
|---|---|---|
| Standard | 至少一次投递 | 尽力而为的排序 |
| FIFO | 恰好一次处理 | 严格排序 |
Amazon SNS(Simple Notification Service)
- 发布/订阅消息服务
- 一条消息可以投递给多个订阅者
常见订阅者
- SQS
- Lambda
- Email / HTTP 端点
SNS 与 SQS 的比较
- SNS 将消息推送给订阅者。
- SQS 轮询获取消息。
Fan‑out 模式:SNS → 多个 SQS 队列。
Amazon EventBridge
Amazon EventBridge 是一个无服务器事件总线,帮助实现事件驱动架构。它通过将来自源(AWS 服务、自定义应用、第三方软件)的事件路由到目标(如 AWS Lambda、Amazon SNS、Amazon SQS 等),连接不同的服务和应用。
EventBridge 使系统能够解耦,组件独立运行并实时响应事件,从而提升可扩展性、灵活性和弹性。
何时使用哪项服务
| 服务 | 典型使用场景 |
|---|---|
| SQS | 异步处理、缓冲 |
| SNS | Fan‑out 通知 |
| EventBridge | 跨服务的事件路由 |
实验 7:使用 Amazon SQS 进行消息传递
目标
- 使用 SQS 解耦应用组件。
- 使用 Lambda 异步处理消息。
- 为故障处理配置死信队列(DLQ)。
架构概览
Producer (Lambda / CLI) → Amazon SQS → Consumer (Lambda)
↳ Dead Letter Queue
步骤
-
创建标准队列
- 前往 SQS → Create queue。
- 类型:Standard
- 可见性超时:60 seconds
- 点击 Create queue。
-
创建死信队列(DLQ)
- 再创建一个名为
order-processing-dlq的 SQS 队列。 - 在主队列的设置中,配置 DLQ:
- Max receives:3
- 再创建一个名为
-
创建 Lambda 消费者
- 前往 Lambda → Create function。
- 运行时:Python 3.12
- 添加指向步骤 1 中创建的队列的 SQS 触发器。
- 使用以下示例代码:
def lambda_handler(event, context): for record in event['Records']: print(record['body']) -
向队列发送消息
aws sqs send-message \ --queue-url <QUEUE_URL> \ --message-body "Test message"
验证
- 验证 Lambda 函数已处理该消息。
- 确认在达到最大接收次数后失败的消息已被移动到 DLQ。