RocketMQ角色(一)

481 阅读2分钟

**nameServer: **

  1. 注册中心,集群中每个nameServer之间并不互联 
  2. broker会向nameServer上注册自己的服务信息 
  3. producer和consumer会去拉去broker服务
  4. 每个broker都会和所有的nameServer建立连接,使用时可实现负载均衡
  5. 选择nameServer作为注册中心的好处:
  • 轻量级 
  • 高可用-->因为当服务建立成功之后每个product和consumer都会持有一个broker服务,不需要再去注册中心拉取,当新的消息会直接打到broker上,根据broker处理最终会将消息刷新到consumerQueue中,而consumer会从broker的consumerQueue中拉取消息rocketmq实现了ap并非cp,允许一定程度上的不一致性. 

 6,nameServer如何保证数据的最终一致:

  • 路由注册: 每个nameServer会维护一个broker的表,相当于每个nameServer维护所有的服务,每隔30s发送心跳包,一次维护broker信息,出现多个broker同时出现状态改变操作broker表时,nameServer实现了读写锁:允许同时读,只允许串行写 
  • 路由剔除:正常情况下broker断开长连接剔除,同时nameServer会有一个定时任务,每隔10s扫描broker表,如果发现超过120s没有更新时间戳也会剔除 
  • 路由发现:针对的是producter和                                                                           consumer Set<String> topicList = new HashSet<String>();                                                    维护一个topicList表,每隔30s会去拉取一次,并且如果30s内出现向某一个broker发送消 息-->客户端重试机制和轮询策略

 broker: 

 1,提供消息接收,存储,拉功能的server 

 2,一般会配置主从配置方式 1,根据相同的BrokerName 不同的brokerId来指定,BrokerId为0的表示Master BrokerId为1表示slave 

 3,每30s会向nameServer发送心跳包

 producer:消息的发送者

1,producer每30s向nameServer查询新的路由信息(队列和ip的映射关系),即获取当前订阅Topic存在哪些 Broker上,然后对多台broker轮询

2,producer在从nameServer获取到所有的broker信息之后,nameServer也会负载均衡一个broker进行工作 

 3,一但producer和broker建立长连接之后,30s一次心跳,确认broker信息