5 张图告诉你 RocketMQ 为什么不使用 Zookeeper 做注册中心

RocketMQ 选择了自己写 NameServer 做注册中心而没有选择 Zookeeper,这是为什么呢?

首先看一下 RocketMQ 的架构,如下图:

RocketMQ 的 Broker 注册到 NameServer 集群,而生产者和消费者则需要从 NameServer 拉取消息。

1 NameServer

1.1 Broker 注册

Broker 启动时,会向 NameServer 发送注册消息,相关的 UML 类图如下:

我们看一下 BrokerOuterAPI 的 registerBrokerAll 方法,代码如下:

//BrokerOuterAPI.java
public List<RegisterBrokerResult> registerBrokerAll(
 //省略参数
 final boolean compressed) {

 final List<RegisterBrokerResult> registerBrokerResultList = new CopyOnWriteArrayList<>();
 List<String> nameServerAddressList = this.remotingClient.getNameServerAddressList();
 if (nameServerAddressList != null && nameServerAddressList.size() > 0) {
        //省略 requestHeader 封装
  final CountDownLatch countDownLatch = new CountDownLatch(nameServerAddressList.size());
  for (final String namesrvAddr : nameServerAddressList) {
   brokerOuterExecutor.execute(new Runnable() {
    @Override
    public void run() {
     try {
      RegisterBrokerResult result = registerBroker(namesrvAddr, oneway, timeoutMills, requestHeader, body);
      if (result != null) {
       registerBrokerResultList.add(result);
      }
     } catch (Exception e) {
     } finally {
      countDownLatch.countDown();
     }
    }
   });
  }

  try {
   countDownLatch.await(timeoutMills, TimeUnit.MILLISECONDS);
  } catch (InterruptedException e) {
  }
 }
 return registerBrokerResultList;
}

可以看到,当 Broker 启动时,会向所有的 NameServer 发送注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值