RocketMQ 之 NameServer

前言NameServer 引入

正如我们所知道在RocketMQ 中NameServer 其主要的作用是负责管理Broker节点信息。那我们为什么需要NameServer呢?在实际的生产过程中对于Broker节点来说我们肯定是以集群的方式进行部署的。那对于Producer 来说他们怎么知道要把消息发送到那个Broker 节点上面去呢?当新增一个Broker 节点的时候 Producer 它又是怎么感知的呢?这就引入了NameServer。
在这里插入图片描述

1、NameServer 如何感知Broker节点?

Broker 节点在启动的时候会把自己的路由信息注册到NameServer 上面去(如果Brooker 节点搭建的主备模式其从节点的路由信息也会被注册),那NameServer 有如何感知Broker 节点是否存活?其实在NameServer 和 Broker节点之间是存在心跳检测机制的。Broker每隔30秒会给所以的NameServer 发送心跳包,告诉每个NameServer自己还存活。当NameServer接收到Broker的心跳包时会更新Broker最近一次心跳检测时间。然后NameServer每隔10秒回去允许一个任务,去检测Broker的最近一次心跳时间,如果一个Broker超过120秒没有发送心跳那么则会认为这个Broker节点已经挂掉了,从而剔除Broker节点的路由信息。

2、生产者或消费者又如何或如Broker路由信息?

其实这种实现方式有两种:第一种方式是NameServer 主动向生产者或消费者推送消息告诉他Broker节点信息有那些。但这明显不靠谱。因为NameServer 不知道他要推送Broker信息给那些节点。第二种 方式是生产者或消费者每隔一段时间向NameServer 发送请求获取Broker节点信息,将Broker信息存储在本地。

3、生产者或消费者如何感知Broker节点信息是否存活?

这其实靠生产者或消费者定时从NameServer 中拉去最新的Broker信息。如果此时Broker节点已经挂了,系统还未拉去最新的Broker信息的话这时请求可能会失败,这时只能靠把消息转发到另一个Broker节点上了。

NameServer 高可用

NameServer 他负责去管理集群中Broker的信息,让MQ系统知道有那些Broker节点,所以NameServer 高可用是必须要保证的。如果我们通过集群的方式搭建NameServer 集群,这时Broker的信息是分布存储在每个NameServer上还是,每个NameServer上都有完整的Broker信息呢?答案肯定是第二种。因为如果我们把Broker信息分布存储在NameServer上,当某个NameServer 宕机的时候这会导致部分Broker的节点信息丢失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值