RocketMQ之消费者获取消息的两种模式

 

Push&Pull

 

push:客户端与服务器建立连接后,当服务器有消息时,服务器将消息推送到客户端

pull:客户端不断轮询请求服务端,来获取新的消息

 

 

RocketMQ中的Push&Pull

 

RocketMQ中都是采取消费端主动拉取的方式,即consumer轮询从broker中拉取消息。原因是服务器如果主动给客户端推送消息的话,当客户端足够多,服务器端的压力会无限制的增大,因此RocketMQ在实现时摒弃了这种办法。

RocketMQ中Push和Pull的含义:

  •  Push

consumer把轮询过程封装了,并注册到MessageListener监听器中,对于offset进行自动保存。取到消息后,唤醒MessageListener的consumeMessage()来消费,这种触发方法才会被调用的方式对用户而言感觉就像是被推送过来。

  • Pull

这种方法非常少用,它在取消息的过程中需要用户自己手动操作。首先在要消费的Topic中拿到MessageQueue的集合,遍历MessageQueue集合,然后针对每一个MessageQueue批量取消息,每取完一次,记录该队列下一次要取的开始offset,直到取完一整个MessageQueue,再换另一个MessageQueue。

 

 

长轮询

 

既然RocketMQ本质上是Pull方式拉取消息,那它是如何保证消息实时性的呢? 长轮询

长轮询是指请求的过程中,若是服务器端数据并没有更新,那么则将这个连接挂起,直到服务器端推送新的数据再返回,然后进入循环周期。

客户端像传统轮询一样从服务端请求数据,服务端会阻塞请求,而不会立刻返回,直到有数据或超时才返回给客户端,然后关闭连接,客户端处理完响应信息后再向服务器发起新的请求。

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值