RocketMQ消费模式!
RocketMQ消费模式!
月伴飞鱼在RocketMQ5.0
之前,消费有两种方式可以从Broker
获取消息,分别为Pull
模式和Push
模式。
Pull模式:
消费需要不断的从阻塞队列中获取数据,如果没有数据就等待,这个阻塞队列中的数据由消息拉取线程从
Broker
拉取消息之后加入的。
- 所以
Pull
模式下消费需要不断主动从Broker
拉取消息。Push模式:
需要注册消息监听器,当有消息到达时会通过回调函数进行消息消费。
- 从表面上看就像是
Broker
主动推送给消费者一样,所以叫做推模式。底层依旧是消费者从
Broker
拉取数据然后触发回调函数进行消息消费,只不过不需要像Pull
模式一样不断判断是否有消息到来。
在RocketMQ5.0
增加了Pop
模式消费,将负载均衡、消费位点管理等功能放到了Broker
端,减少客户端的负担,使其变得轻量级。
并且5.0之后支持消息粒度的负载均衡。
消息粒度负载均衡
消息粒度负载均衡策略中,同一消费组内的多个消费者将按照消息粒度平均分摊主题中的所有消息。
- 即同一个队列中的消息,可被平均分配给组内多个消费者共同消费。
Pop消息消费
首先客户端(消费者)向服务端(
Broker
)发送Pop
请求,Broker
端收到请求后以Pop
模式获取消息,之后返回给客户端。
- 客户端消费消息成功之后,
Broker
发送ACK
请求确认消息消费成功。
POP
的消费位点由Broker
保存和控制,并且POP
模式可以使多个消费者端消费同一个消息队列中的消息。消费者端不再需要在本地做负载均衡分配消息队列,只需要调用服务端提供的
POP
接口获取消息进行消费即可。即便某个消费者
Hang
住,其他消费者依旧可以继续消费队列中的数据,不会造成消息堆积。