前言
这篇笔记记录consumer启动的逻辑
consumer主要是负责去broker中拉取消息,然后将拉取到的消息,交给消费者去处理
consumer本质上也是一个netty客户端,所以,在启动的时候,和producer有很多相似的点,但是有1个区别点:
1、producer的负载均衡是在真正去发送消息的时候,通过轮询的方式,选择其中的一个messageQueue;但是consumer是在启动的时候,通过负载均衡策略去分配consumerQueue
相同点:
1、producer和consumer对于broker来说,都说客户端,所以在启动时,都会启动nettyClient,nettyClient负责向broker发送消息、发送拉取消息的请求
源码
consumer的启动,入口层代码也是比较简单的,如图1所示
- 需要初始化一个consumer对象,这里的consumer对象和consumerGroup是存在一个映射关系的
- 然后订阅对应的topic即可,这里在订阅topic的时候,同时会把subExpression的信息存入到内存中,方便在后面接收到消息之后进行过滤
- 接着注册回调方法,这里的回调方法是真正处理消息的代码
- 然后调用start()方法启动即可
图1:
在其start()方法中,我们只关心消费者启动的代码,消息轨迹相关的