NameServer是RocketMQ的起点。

    1. NameServer集群化部署
      要部署RocketMQ,就得先部署NameServer。
      NameServer是支持部署多台机器的,也就是集群化部署。
      他是集群里非常关键的一个角色,他要管理broker,别人都要通过他才知道要跟哪个broker通信。
      如果NameServer只部署一台机器,一旦宕机,整个集群都会出现故障。
      通常来说,NameServer一定要部署多台机器实现一个集群,保证高可用性。

    2. broker是把自己的信息注册到哪个NameServer上面去?
      每个broker启动都得向所有的NameServer进行注册,保证每个NameServer都有一份集群中所有broker的信息。

    3. 系统如何从NameServer获取broker信息?
      RocketMQ中的生产者和消费者,自己主动去NameServer拉取broker路由信息。
      通过这些路由信息,每个系统就知道发送消息或者获取消息去哪个broker上去进行了。

    4. 如果broker挂了,NameServer是如何感知的?
      现在一个broker启动之后向NameServer注册了,每个NameServer都知道集群中有这个broker了,然后各个系统从NameServer中拉取路由信息也知道有这个broker的存在了。
      那此时broker挂了怎么办呢?
      broker跟NameServer之间存在一种心跳机制,broker会每隔30秒给所有的NameServer发送心跳,告诉他们自己还活着。
      每次NameServer收到一个broker的心跳,就会更新一下他最近一次心跳的时间。
      然后NameServer会每隔10秒运行一个任务,去检查一下各个broker的最近一次心跳的时间,如果某个broker超过120秒没发送心跳了,那么就任务这个broker挂了。

    5. broker挂了,系统如何感知?
      作为生产者和消费者系统,怎么感知到broker挂了,此时某个系统发送消息到那个已经挂了的broker是绝对不可能成功的。
      有两种解决方案,首先可以考虑不发送消息到那台broker,改成发送到其他broker上去,其次假设必须要发送消息到那台挂了的broker,可以考虑跟他的Slave进行通信。
      对于生产者而言,他自己是有一套容错机制的。