消息队列的路由注册中心
9876 是 RocketMQ 的 NameServer 默认端口:生产者和消费者启动后先连到它,获取目标主题分布在哪几个 broker 上,broker 也向它上报路由信息与存活状态;真正的消息收发走 broker 的 10911。它本身不存消息,是纯路由层,因此它的可用性直接决定客户端能否找到消息,排查发送失败常从这里入手比翻 broker 日志快得多。
基本信息
| 服务 | RocketMQ NameServer |
|---|---|
| 协议 | TCP(9876) |
| 用途 | 主题路由注册与查询、broker 存活探测 |
| 配套端口 | broker 消息端口 10911 |
| 暴露要求 | 仅消息网段 |
典型使用场景
- 发送失败排查:确认目标主题的路由是否已在 NameServer 上注册
- 集群巡检:查看 broker 名单与地址是否与预期一致
- 扩容变更:新 broker 加入后确认路由信息已同步
- 容量评估:结合各 broker 的分片分布判断负载是否均衡
- 安全核对:确认该端口只在消息网段内可达
常用命令
| 命令 | 作用 | 关注点 |
|---|---|---|
| clusterList | 列出集群与 broker | 节点是否齐全与存活 |
| topicRoute | 查询主题路由 | 目标主题是否注册成功 |
| brokerStatus | 查看 broker 状态 | 消息堆积与写入情况 |
| topicList | 列出全部主题 | 确认主题是否存在 |
路由查询
路由查询
# 指定 NameServer 地址查询集群结构
sh mqadmin clusterList -n namesrv01:9876
# 查询特定主题的路由分布
sh mqadmin topicRoute -t order_topic -n namesrv01:9876
# 查看 broker 状态与堆积情况
sh mqadmin brokerStatus -b 192.168.1.20:10911 -n namesrv01:9876
# 确认端口监听
ss -lntp | grep 9876客户端配置的是 NameServer 地址列表:只配一台时这台不可用就会导致客户端无法刷新路由,而已建立连接的客户端仍可能继续工作一段时间,故障因此容易表现为部分应用异常,排查时需要核对每台业务应用的配置。
NameServer 默认没有认证机制:任何能连通它的主机都可以查询全部主题与 broker 拓扑。生产环境应把它限制在消息网段内,并通过网络层策略而非应用层配置来隔离。
排查顺序
- 先用 clusterList 确认 broker 是否都在线
- 再用 topicRoute 确认目标主题路由是否完整
- 然后核对客户端配置的 NameServer 地址列表
- 最后才看 broker 侧的消息堆积与磁盘状态