【PullMessageService 消息拉取】
RocketMQ 通过 PullMessageService 拉取消息。
通过代码段 PullMessageService#run可以看出:
关于PullRequest
PullMessageService 添加 PullRequest 有两种方式:
延时添加
立即添加
---------------------------------------------------------------------
【关于ProcessQueue】
ProcessQueue 是 MessageQueue 在消费端的重现、快照。PullMessageService 从消息服务器默认每次拉取 32 条消息,按消息的队列偏移量顺序存放在 ProcessQueue 中,PullMessageService 再将消息提交到消费者消费线程池。消息消费成功后,从 ProcessQueue 中移除。
消费流程:
1.拉取消息(PullMessageService,异步线程,消费者->broker(生产者),回调处理,)
从 LinkedBlockingQueue<PullRequest> 队列获取请求数据,那问题是:请求数据怎么进入这个队列的?
2.提交到消费者消费线程池
3.消费消息 监听器-进入业务消费层
消息拉取长轮询机制:
怎么体现:怎么结合pull push优缺点
broker端:处理消费端发送拉取请求,实现长轮询,从存储文件commitlog中获取消息