数媒在线课堂 从 RocketMQ 看长轮询 (Long Polling)

消息队列一般在消费端都会提供 push 和 pull 两种模式,RocketMQ 同样实现了这两种模式,分别提供了两个实现类:DefaultMQPushConsumer 和 DefaultMQPullConsumer;两种方式各有优势:

push 模式:推送模式,即服务端有数据之后立马推送消息给客户端,需要客户端和『服务器』建立长连接,实时性很高,对客户端来说也简单,接收处理消息即可;缺点就是服务端不知道客户端处理消息的能力,可能会导致数据积压,同时也增加了服务端的工作量,影响服务端的性能;

pull 模式:拉取模式,即客户端主动去服务端拉取数据,主动权在客户端,拉取数据,然后处理数据,再拉取数据,一直循环下去,具体拉取数据的时间间隔不好设定,太短可能会导致大量的连接拉取不到数据,太长导致数据接收不及时;

RocketMQ 使用了长轮询的方式,兼顾了 push 和 pull 两种模式的优点,下面首先对长轮询做简单介绍,进而分析 RocketMQ 内置的长轮询模式。

长轮询

长轮询通过客户端和服务端的配合,达到主动权在客户端,同时也能保证数据的实时性;长轮询本质上也是轮询,只不过对普通的轮询做了优化处理,服务端在没有数据的时候并不是马上返回数据,会 hold 住请求,等待服务端有数据,或者一直没有数据超时处理,然后一直循环下去;下面看一下如何简单实现一个长轮询;

1. 实现步骤

1.1 客户端轮询发送请求

客户端应该存在一个一直循环的程序,不停的向服务端发送获取消息请求;

1.2 服务端处理数据

『服务器』接收到客户端请求之后,首先查看是否有数据,如果有数据则直接返回,如果没有则保持连接,等待获取数据,服务端获取数据之后,会通知之前的请求连接来获取数据,然后返回给客户端;

1.3 客户端接收数据

正常情况下,客户端会马上接收到服务端的数据,或者等待一段时间获取到数据;如果一直获取不到数据,会有超时处理;在获取数据或者超时处理之后会关闭连接,然后再次发起长轮询请求;

RocketMQ 长轮询

RocketMQ 的消费端提供了两种消费模式分别是:DefaultMQPushConsumer 和 DefaultMQPullConsumer,其中 DefaultMQPushConsumer 就是使用的长轮询

PullCallback 回调

服务端处理完之后,给客户端响应,回调其中的 PullCallback,其中在处理完消息之后,重要的一步就是再次把 pullRequest 放到 PullMessageService 服务中,等待下一次的轮询;

今日霍州(www.jrhz.info)©️

特别声明:[数媒在线课堂 从 RocketMQ 看长轮询 (Long Polling)] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

『鹿晗』从醉酒翻车到演唱会32秒售罄,顶流逆袭背后藏着多少汗水?(『鹿晗』去酒吧被偶遇)

当悬浮吊台因技术故障卡在半空,『鹿晗』临场即兴清唱《让我留在你身边》,引导观众打开手机闪光灯,瞬间将体育场点亮成星海——这段未剪辑的视频在B站疯传,弹幕里刷满了这才是顶流该有的样子。有观众形容:仿佛被歌声温柔包裹…

『鹿晗』从醉酒翻车到演唱会32秒售罄,顶流逆袭背后藏着多少汗水?(『鹿晗』去酒吧被偶遇)

2个细节解锁『杨紫』的“清甜”魔法(杨jieshi)

2个细节解锁『杨紫』的“清甜”魔法(杨jieshi)

射血分数42是心衰吗(射血分数44是心功能几级)

射血分数42通常提示存在心力衰竭。射血分数是评估心脏泵血功能的重要指标,正常值为50-70%,低于40%可明确诊断为射血分数降低型心力衰竭。 射血分数42处于临界范围,可能反映早期或轻度心力衰竭

射血分数42是心衰吗(射血分数44是心功能几级)

睿能科技旗下贝能国际与英飞凌推出『机器人』️关节驱动的一站式解决方案(睿能科技老板)

人民财讯2月6日电,睿能科技(603933)旗下贝能国际官微消息,贝能与英飞凌科技联合推出了一款高集成度解决方案——基于英飞凌PSOC™Control C3 MCU微控制器和高效GaN功率器件的400W机器…

睿能科技旗下贝能国际与英飞凌推出『机器人』️关节驱动的一站式解决方案(睿能科技老板)

『宁德时代』、长安汽车等在重庆成立动力电池公司

公开资料显示,近日,时代长安(重庆)动力电池有限公司成立,法定代表人为朱云峰,注册资本为10亿元,经营范围包含:电池制造;电池销售;新兴能源技术研发; 新材料技术研发;电子专用材料制造;电子专用材料销售等。…

『宁德时代』、长安汽车等在重庆成立动力电池公司