RocketMQ的Broker和NameServer之间的通信协议是什么?

RocketMQ的Broker和NameServer之间使用TCP协议进行通信,交换的消息格式为RocketMQ自定的 Remoting Command消息。

Remoting Command消息由CommandCode(2字节),LanguageCode(2字节)和body(不定长字节流)组成。语言代码默认为0,表示body内容为RocketMQ的序列化消息。

Broker和NameServer交换的主要Remoting Command消息有:

  • REGISTER_BROKER: Broker注册消息,Broker启动时发送给NameServer进行注册。包含Broker地址、Broker名称、集群名称等信息。
  • UNREGISTER_BROKER: Broker注销消息,Broker关闭时发送给NameServer注销注册信息。
  • GET_ALL_BROKER_CLUSTER_IDS: Broker查询集群ID,用于Broker启动初始化。
  • LOOKUP_BROKER: 查询Broker信息,生产者和消费者通过NameServer查询Broker地址。
  • REGISTER_MASTER: Broker注册Master角色,一个集群中只有一个Master Broker。
  • GET_ALL_TOPIC_LIST_FROM_NAMESERVER: Broker查询所有Topic列表,用于初始化消息路由表。
  • WIPE_WRITE_PERM_OF_BROKER: NameServer撤销Broker的写权限,用于下线Broker。
  • GET_KVLIST_BY_CLUSTER: Broker查询NameServer 的KV配置信息。
  • PUT_KVLIST: Broker更新NameServer的KV配置信息。
  • DELETE_KVLIST: Broker删除NameServer的KV配置信息。
  • QUERY_DATA_VERSION: 查询NameServer的配置版本,用于Broker数据同步。
  • REGISTER_FILTER_SERVER: 注册过滤Server,用于消息过滤。

NameServer通过这些Remoting Command消息与Broker交互,实现Broker的注册与管理、路由表配置与同步、Topic配置管理等功能。理解两者之间的通信协议与交换消息,有助于我们分析NameServer与Broker的工作机制。