Rocket核心原理理解系列【一】之长轮询
1、推模型
概念
Push推送方式(即Server端推送消息给client):当Server收到消息发送者发送过来的消息后,Server端主动把消息推送给client
优点
1、消息实时性高,延迟小(因为收到消息立刻推给消费者)【明显优点】
2、消费者处理简单(只需要收消息,不需要处理复杂的消息处理逻辑)
缺点
1、增加了Server的工作负担,对Server的性能造成影响;【影响较小】
2、另外Client如果不能够及时处理Server推送的消息,也是很大的问题。【影响较大】
2、 拉模型
概念
Client循环的从Server拉取消息,由client控制着主动权。
优点
1、Client掌控主动权,比如根据消费能力拉取指定数量消息
缺点
1、拉取消息的时间间隔不好设定,间隔太短循环空拉取造成资源浪费,间隔时间太长,就会增加消息消费的延迟,影响业务使用。【实时性稍差】
2、需要消费端Client拉取消息时维护offset,代码比较麻烦。【为了更灵活处理,需要消费者客户端个性化处理】
3、 推拉结合-长轮询
概念
兼具了上述列举Push和Pull的优点(Push的实时性和Pull的可控制性),需要Rocket的Server端和RocketMQ的Client互相配合才能够实现。
实现原理
Client发送消息请求,Server端接收请求,如果发现Server队列里没有新消息,Server端不立即返回,而是持有这个请求一段时间(通过设置超时时间来实现),在这段时间内轮询Server队列内是否有新的消息:
- 如果有新消息,就利用现有的连接返回消息给消费者;
- 如果这段时间内没有新消息进入队列,则返回空。
优点-兼具推拉模型优势一
1、消费消息的主动权既保留在Client端,也不会出现Server积压大量消息后,短时间内推送给Client大量消息使client因为性能问题出现消费不及时的情况。
缺点
1、 MQ Server端在持有MQ消费者客户端拉取消息请求的这段时间,占用了MQ Server端系统资源,因此长轮询适合客户端连接数可控的业务场景中(因为如果消费者客户端众多,MQ Server端需要为每个客户端消耗线程等资源)。
4、长轮询源码解读请查询文章
参考文章
- 《RocketMQ实战与原理解析》
网友评论