RocketMQ 的 NameServer 是一个轻量级的服务,负责维护关于 Broker 的路由信息和提供路由查询服务。以下是 NameServer 在 Broker 管理、路由发现、路由注册和路由剔除方面的工作机制:
-
Broker 管理:
- Broker 在启动时会向所有的 NameServer 发送注册请求,包含自己的地址、存储的队列信息等。
- Broker 会每隔30秒向所有的 NameServer 发送心跳包,以证明自己是活跃的。心跳包中包含了当前Broker的状态信息及队列信息。
-
路由发现:
- 生产者(Producer)或消费者(Consumer)在启动时会从配置的 NameServer 地址列表中选择一个 NameServer,并从中获取完整的路由信息。
- 客户端会定期(默认是30秒)从 NameServer 更新路由信息,以获取最新的 Broker 数据。
-
路由注册:
- 当 Broker 启动或重启时,它会向所有的 NameServer 发送注册请求,告知自己的存在以及当前的队列、Topic等信息。
- NameServer 收到注册请求后,会更新内部的路由表,并将这些信息提供给后来查询的生产者和消费者。
-
路由剔除:
- 如果 NameServer 长时间(默认是120秒)没有收到某个 Broker 的心跳,它会认为该 Broker 不可用,并从路由表中剔除该 Broker 的信息。
- 当客户端请求的 Broker 已经不在 NameServer 的路由表中时,客户端会收到路由找不到的错误,需要重新从 NameServer 获取新的路由信息。
NameServer 之间不进行信息同步,它们各自维护一份独立的路由信息。因为 Broker 会向所有的 NameServer 发送心跳和注册信息,所以每个 NameServer 都有完整的路由信息。这种设计简化了 NameServer 的实现,减少了同步的复杂性,并提高了整个系统的可用性。
总的来说,NameServer 在 RocketMQ 中扮演了一个关键角色,它通过接收 Broker 的注册和心跳信息来维护最新的路由表,并根据客户端的请求提供路由查询服务。这样确保了消息能够正确地发送到 Broker 或者从 Broker 被消费。
标签:--,Broker,信息,rocketmq,注册,NameServer,路由,路由表 From: https://www.cnblogs.com/xylfjk/p/17981923