更新时间:2026-03-25 GMT+08:00
分享

配置RocketMQ客户端

本章节介绍RocketMQ客户端的配置建议。

Java客户端版本

Java客户端版本建议使用5.1.4及以上版本。

避免ClientId相同

客户端的ClientId默认为进程号、本机IP、instanceName进行组合。如果同一个进程内,一个消费组下启动两个消费者,则会导致两者ClientId相同,从而出现有的队列重复消费、有的队列无法消费的情况。

配置建议

由于ClientId生成时会拼接消费者的clientIP属性,同一 IP下不同消费者的clientIP相同会导致ClientId相同,所以建议添加如下代码手动设置instanceName。
consumer.setInstanceName(String.valueOf(System.nanoTime()))

开启生产者异常检测机制

Java客户端5.1.4及以上版本才支持该功能。

建议客户端开启异常检测机制,当客户端连接Broker超时后,能快速剔除超时的Broker,使生产的消息到其他Broker。

producer.setSendLatencyFaultEnable(true)

生产者重试的错误码增加SYSTEM_BUSY

建议生产者配置重试的错误码,当Broker出现写盘繁忙、主备倒换等异常,导致返回SYSTEM_BUSY时,可重试发送消息到其他正常的Broker,减小业务影响。
producer.addRetryResponseCode(ResponseCode.SYSTEM_BUSY);

仅4.9.2版本及以上的客户端才支持使用addRetryResponseCode函数。需要注意的是,5.2.1及以上版本的客户端已默认增加SYSTEM_BUSY,无需再额外添加。

获取SDK日志

RocketMQ客户端与服务端的通信协议是比较复杂的,例如消费队列的分配,主题的寻址,都是客户端SDK的实现决定的,这些过程的重要信息都保存在SDK日志里。因此,当出现生产或消费问题时,SDK日志是排查问题的最重要手段之一,请务必要保存这些日志。通常情况,SDK日志不与业务日志打印在同一个文件中,我们给出常用SDK的日志默认路径,如表1所示。

表1 SDK日志默认路径

SDK 语言

SDK 协议

路径

Java

TCP

~/logs/rocketmqlogs/rocketmq_client.log

Java

gRPC

~/logs/rocketmq/rocketmq_client.log

Go

TCP

/tmp/rocketmq-client.log

Go

gRPC

~/logs/rocketmqlogs/rocketmq_client_go.log

相关文档