1. RocketMQ生产消费实战指南作为一款分布式消息中间件RocketMQ在电商秒杀、金融交易等场景中扮演着关键角色。上周刚帮一个日订单量50万的系统解决了消息堆积问题今天就把Java环境下RocketMQ的生产消费全流程拆解给大家包含我趟过的那些坑。2. 环境准备与基础配置2.1 依赖引入要点使用Maven项目需要添加最新依赖2023年推荐4.9.4版本dependency groupIdorg.apache.rocketmq/groupId artifactIdrocketmq-client/artifactId version4.9.4/version /dependency注意生产环境务必保持服务端与客户端版本一致否则可能出现序列化异常2.2 生产者组配置DefaultMQProducer producer new DefaultMQProducer(order_producer_group); producer.setNamesrvAddr(192.168.1.10:9876;192.168.1.11:9876); // 重要参数设置 producer.setSendMsgTimeout(5000); producer.setRetryTimesWhenSendFailed(3);参数说明表参数名建议值作用sendMsgTimeout3000-5000ms同步发送超时时间compressMsgBodyOverHowmuch4096 (4K)启用压缩的阈值retryTimesWhenSendFailed2-3次失败重试次数3. 消息生产全流程解析3.1 同步发送模式Message msg new Message(order_topic, payment, ORDER_20230801001.getBytes(), JSON.toJSONString(order).getBytes()); SendResult result producer.send(msg);关键点建议消息体不超过2MB默认限制4MBTag设计采用业务动作命名如payment/refundKeys字段建议设置业务主键便于追踪3.2 异步发送最佳实践producer.send(msg, new SendCallback() { Override public void onSuccess(SendResult sendResult) { // 记录发送成功日志 } Override public void onException(Throwable e) { // 告警本地持久化重试 } });踩坑记录异步发送必须设置回调否则消息丢失无法感知4. 消费者端深度优化4.1 集群模式配置DefaultMQPushConsumer consumer new DefaultMQPushConsumer(order_consumer_group); consumer.setNamesrvAddr(nameServer); consumer.subscribe(order_topic, payment || refund); // 设置并行消费线程数 consumer.setConsumeThreadMax(20); consumer.registerMessageListener((MessageListenerConcurrently)(msgs, context) - { // 业务处理逻辑 return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; });4.2 消费位点控制技巧首次启动CONSUME_FROM_LAST_OFFSET跳过历史消息异常恢复CONSUME_FROM_FIRST_OFFSET重新消费精确控制consumer.setConsumeFromWhere()5. 生产环境问题排查5.1 常见错误代码表错误码含义解决方案206消息体过大拆分消息或调整maxMessageSize301broker不存在检查NameServer地址303网络异常验证防火墙设置5.2 消息堆积处理方案临时方案动态增加消费者线程数根本解决优化消费逻辑耗时应急措施重置消费位点跳过积压6. 监控与性能调优6.1 关键监控指标生产TPS控制在Broker承受范围内消费延迟99线应1s线程池利用率保持在70%以下6.2 性能优化参数// 生产者端 producer.setSendLatencyFaultEnable(true); // 消费者端 consumer.setPullBatchSize(32); // 单次拉取数量 consumer.setPullInterval(100); // 拉取间隔(ms)经过多次压测验证这套配置在单Broker节点下可支撑8000 TPS的消息处理。建议根据实际业务场景先进行小流量测试逐步调整参数至最优状态。