| 对比维度 | Push 模式(长轮询封装) | Pull 模式(手动拉取) |
|---|---|---|
| 主导方 | 框架主导(看似 Broker 推,实际消费者长轮询) | 消费者主导(完全手动控制) |
| 开发成本 | 低(只需写消费逻辑) | 高(全流程手动编码) |
| 实时性 | 高(接近即时) | 可控(取决于拉取频率) |
| 灵活性 | 低(框架控节奏) | 高(按需拉取) |
| 偏移量管理 | 自动 / 半自动 | 完全手动 |
| 负载均衡 | 自动触发(框架内置算法) | 需手动实现 |
| 核心类 | DefaultMQPushConsumer | DefaultMQPullConsumer |
| 典型场景 | 实时消费、通用业务 | 批量消费、定制化拉取、限流消费 |
AllocateMessageQueueByMachineRoom策略的升级版本AllocateMessageQueueAveragelyByCircle
push模式
设置min max 线程数量保持一致
| 设计点 | 实现方式 | 目的 |
|---|---|---|
| 多线程消费 | setConsumeThreadMin/Max |
提高吞吐量 |
| 幂等性保障 | Redisson分布式锁tryLock() |
防止重复消费 |
| 限流控制 | Guava RateLimiter |
保护下游系统 |
| 优雅停机 | stop标志 + awaitTermination |
防止消息丢失 |
| 链路追踪 | MDC设置messageId/topic/tag |
日志关联 |
| 异常分类 | 不同异常返回不同状态 | 精细化重试 |
| 进度跟踪 | Redis进度记录 | 实时监控 |
| 自动Offset | RocketMQ SDK自动提交 | 简化开发 |