push 和 pull

对比维度 Push 模式(长轮询封装) Pull 模式(手动拉取)
主导方 框架主导(看似 Broker 推,实际消费者长轮询) 消费者主导(完全手动控制)
开发成本 低(只需写消费逻辑) 高(全流程手动编码)
实时性 高(接近即时) 可控(取决于拉取频率)
灵活性 低(框架控节奏) 高(按需拉取)
偏移量管理 自动 / 半自动 完全手动
负载均衡 自动触发(框架内置算法) 需手动实现
核心类 DefaultMQPushConsumer DefaultMQPullConsumer
典型场景 实时消费、通用业务 批量消费、定制化拉取、限流消费

策略

消费关键代码点

AllocateMessageQueueAveragelyByCircle

push模式

设置min max 线程数量保持一致

设计点 实现方式 目的
多线程消费 setConsumeThreadMin/Max 提高吞吐量
幂等性保障 Redisson分布式锁tryLock() 防止重复消费
限流控制 Guava RateLimiter 保护下游系统
优雅停机 stop标志 + awaitTermination 防止消息丢失
链路追踪 MDC设置messageId/topic/tag 日志关联
异常分类 不同异常返回不同状态 精细化重试
进度跟踪 Redis进度记录 实时监控
自动Offset RocketMQ SDK自动提交 简化开发

资料

https://juejin.cn/post/7271991667245629477