RocketMQ探秘——客户端消费

  • Post author:
  • Post category:其他


一、客户端组件总览

每个客户端有一个管理者(MQClientManager),是单例,负责生产MQInstance对象,MQClientManager通过id将多个MQInstance对象放在一个列表中。MQClientManager的id命名规范是ip@instanceName@unitName。一般情况下是一个客户端只有一个MQInstance对象。MQInstance通过组名来管理多个生产者与消费者,即一个分组只能又一个生产者与消费者。MQInstance通过pullmessage服务完成消息的拉取,通过rebalanceservice实现消息负载均衡,由此也可以看出RocketMQ是做服务端做了负载均衡策略。MQClientAPIImpl是与远程交互的rpc接口。关系图如下所示。

组件关系

二、消息拉取

拉取消息就要知道到哪里拉取,什么时候拉取。这两个功能分别由rebalanceService和pullMessageService完成。rebalanceService会20秒执行一次负载均衡。负载均衡主要的干了以下几个事:

1、获取topic在broker中得分队列地址messageQueue,一个topic可以对多个broker,所以messagequeue也有多个

2、从nameserver上获取所有的客户端信息

3、根据负载均衡策略找出某个客户端可消费的messagequeue

4、根据messagequeue生成pullRequest对象,放到pullMessageService的队列中

到此rebalance已经完成拉取请求的生产,pullMessageService通过消费pullrequest来拉取消息



版权声明:本文为mxlmxlmxl33原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。