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请求确认消息消费成功。

img

POP的消费位点由Broker保存和控制,并且POP模式可以使多个消费者端消费同一个消息队列中的消息。

消费者端不再需要在本地做负载均衡分配消息队列,只需要调用服务端提供的POP接口获取消息进行消费即可。

即便某个消费者Hang住,其他消费者依旧可以继续消费队列中的数据,不会造成消息堆积。

img