40 lines
1.4 KiB
Markdown
40 lines
1.4 KiB
Markdown
---
|
||
title: "Competing Consumer Pattern"
|
||
type: concept
|
||
tags:
|
||
- EDA
|
||
- Architecture
|
||
- Messaging
|
||
- Cloud
|
||
last_updated: 2026-04-14
|
||
---
|
||
|
||
## Aliases
|
||
- Competing Consumers
|
||
- 竞争消费者模式
|
||
- 多消费者竞争模式
|
||
|
||
## Definition
|
||
竞争消费者模式(Competing Consumer Pattern)指多个消费者共享同一个消息队列,但每条消息只被其中一个消费者处理。确保消息处理的负载均衡和故障容错。
|
||
|
||
## Implementation
|
||
- **AWS SQS**:设置多个消费者从同一标准队列拉取消息,SQS 自动将消息分配给可用的消费者
|
||
- 消费者之间的竞争通过 SQS 的隐式负载均衡机制实现
|
||
|
||
## Key Characteristics
|
||
- **Mutual Exclusion**:每条消息只被一个消费者处理
|
||
- **Load Balancing**:消息自动分配给空闲的消费者
|
||
- **Fault Tolerance**:某消费者失败,其获取的消息会重新入队供其他消费者处理
|
||
- **Ordering Not Guaranteed**:标准 SQS 不保证消息顺序
|
||
|
||
## Use Cases
|
||
- 并行处理大量独立任务(如图片处理、文件转换)
|
||
- 将工作负载分发到多个 Lambda 函数或 ECS 任务
|
||
- 实现工作线程池的消息分发
|
||
|
||
## Ordered Alternative
|
||
如需保证消息顺序,使用 **SQS FIFO 队列** + **单一消费者**,或在 Kinesis 中使用分片键保证同类型消息有序处理。
|
||
|
||
## Sources
|
||
- [[public-cloud-learning-sessions-opentext-event-driven-architecture-part-2-2024091]]
|