RocketMQ原理详解

rocketMQ的consumer模块

consumer启动

Consumer消费拉取的消息的方式有两种

  1. Push方式:rocketmq已经提供了很全面的实现,consumer通过长轮询拉取消息后回调MessageListener接口实现完成消费,应用系统只要MessageListener完成业务逻辑即可

  2. Pull方式:完全由业务系统去控制,定时拉取消息,指定队列消费等等,当然这里需要业务系统去根据自己的业务需求去实现

  3. push方式的启动过程

在启动的过程中有下面几个重要的步骤:

  • 复制订阅关系:将订阅的关系保存在缓存中,并作负载均衡
  • 负载均衡服务初始化:负载均衡主要是将接收的队列里的消息平衡分布
  • 构建offsetStore消费进度存储对象
  • 启动消费消息服务:这个服务就是从broker处获取消息
  • 在本地MQClientInstance实例中注册自己,并启动实例,在实例中做的事情有:1.启动netty通信模块;2.开启定时任务;3.启动拉取消息服务(pullMessageService);4.启动负载均衡服务;
    • 其中在定时任务中做了如下几件事情
      • 向nameserver获取地址,默认30秒
      • 2分钟向namesrv获取一次路由信息
      • 30秒清理一次离线的broker信息,并向broker发送心跳
      • 5秒钟持久化一次Consumer消费进度(广播存储到本地,集群存储到Broker)
      • 一分钟动态调整一次线程池
  • 立即向所有的broker发送一次心跳
  • 立即做一次负载均衡

经过上面的步骤,consumer被启动起来