京东面试 rockmq是推消息还是拉消息?他的消息模型是啥?

简介: RocketMQ采用拉模式结合长轮询模拟推效果,减少延迟并优化资源使用。在长轮询中,服务器在无消息时保持请求开放,待有新消息时立即响应,提升实时性。利用Netty的TCP连接和异步处理,RocketMQ构建高效通信协议,适应不同吞吐量和实时性需求场景,兼顾控制与实时响应。

在消息队列系统中,消费者模型(即消费者获取消息的方式)通常分为“拉”(pull)模式和“推”(push)模式。这两种模式在性能和实用性上有各自的优势和局限性,特别是在处理不同吞吐量和实时性需求的场景中。

RocketMQ的推拉模型
RocketMQ 本质上使用的是拉模式,但它通过长轮询等技术实现了类似推模式的效果,可以减少拉取的延迟,同时保持拉模式的控制优势。这种混合模型试图结合两种模式的优点,提供更灵活的消息消费能力,尤其是在面对不同的业务场景和性能需求时。

long_mq.png

长轮询是一种在客户端和服务器通信中常用的技术,特别是在实时消息传递系统中。它是一种特殊的轮询方式,可以减少普通轮询带来的频繁网络请求的开销,同时提高消息传递的实时性。长轮询在 RocketMQ 中的使用使得其拉(pull)模式表现得更像推(push)模式,以下是如何理解这一点:

长轮询的工作原理

  1. 请求保持开放:在长轮询中,消费者发送一个请求到服务器要求获取消息。如果服务器当前没有可用消息,它不会立即返回空响应,而是将请求保持开放。

  2. 等待消息:服务器保持请求开放,并等待直到有消息可用或者达到某个预设的超时时间。这种等待状态减少了客户端需要发送的请求数量,同时也保证了当消息到达时能够快速传递。

  3. 发送响应:一旦有新消息到达或超时时间到达,服务器立即将消息发送给消费者,或者发送一个表示超时的响应。这样,消费者几乎可以实时地接收到消息。

  4. 重启请求:收到消息或超时响应后,消费者处理完消息然后再次发起新的长轮询请求,循环继续。

类似推模式的效果

长轮询使得 RocketMQ 的拉模式在行为上更接近于推模式,具体表现在:

  • 实时性提升:由于服务器在有消息时立即响应,消费者几乎可以实时地接收消息,这类似于推模式中消息的即时推送。
  • 降低资源消耗:传统的轮询可能需要消费者不断地发送请求以检查是否有新消息,这不仅增加了网络流量,也可能造成服务器处理大量无效请求的负担。长轮询通过减少请求的频率来优化这一点。
  • 提高效率:消费者不需要频繁地进行空请求,只在服务器实际有消息可供发送时才进行通信,这提高了网络和服务器资源的使用效率。

RocketMQ 网络通信协议

RocketMQ 的通信协议基于 Netty 实现,Netty 提供了高性能的网络框架支持,RocketMQ 在此基础上构建了自定义的应用层协议。

  1. 基于 TCP 的实现

    • RocketMQ 使用持久的 TCP 连接来管理客户端和服务器之间的通信,这有助于保持连接的活跃性并减少连接建立和断开的开销。
  2. 利用 Netty 的功能

    • RocketMQ 利用 Netty 提供的异步处理和事件驱动能力,实现了高效的消息编解码、请求响应匹配、心跳检测和数据传输。
  3. 自定义消息协议

    • 包括对消息的编码和解码,请求的类型定义,以及客户端和服务器之间的交互流程。
    • 特别关注于高效的数据传输和减少网络延迟。

总结

通过长轮询,RocketMQ 的拉模式有效地结合了拉模式的控制优势和推模式的实时响应优势。这种方法既保留了消费者按需获取消息的能力,又提高了消息传递的及时性和效率,适合于需要实时性但又想控制消息流的场景。这种技术使得 RocketMQ 在保持高性能的同时,也能适应各种不同的使用需求。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
|
存储 消息中间件 NoSQL
每日大厂面试题大汇总 —— 今日的是“京东-后端开发-一面”
文章汇总了京东后端开发一面的面试题目,包括ArrayList与LinkedList的区别、HashMap的数据结构和操作、线程安全问题、线程池参数、MySQL存储引擎、Redis性能和线程模型、分布式锁处理、HTTP与HTTPS、Kafka等方面的问题。
144 0
|
21天前
|
Java 关系型数据库 数据库
京东面试:聊聊Spring事务?Spring事务的10种失效场景?加入型传播和嵌套型传播有什么区别?
45岁老架构师尼恩分享了Spring事务的核心知识点,包括事务的两种管理方式(编程式和声明式)、@Transactional注解的五大属性(transactionManager、propagation、isolation、timeout、readOnly、rollbackFor)、事务的七种传播行为、事务隔离级别及其与数据库隔离级别的关系,以及Spring事务的10种失效场景。尼恩还强调了面试中如何给出高质量答案,推荐阅读《尼恩Java面试宝典PDF》以提升面试表现。更多技术资料可在公众号【技术自由圈】获取。
|
1月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
83 2
|
3月前
|
安全 Java 应用服务中间件
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
什么是类加载器,类加载器有哪些;什么是双亲委派模型,JVM为什么采用双亲委派机制,打破双亲委派机制;类装载的执行过程
106 35
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
|
1月前
|
存储 缓存 NoSQL
京东面试:亿级黑名单 如何设计?亿级查重 呢?(答案含:布隆过滤器、布谷鸟过滤器)
尼恩,40岁的老架构师,近期在读者交流群中分享了几个大厂面试题及其解决方案。这些问题包括亿级数据查重、黑名单存储、电话号码判断、安全网址判断等。尼恩给出了三种解决方案:使用BitMap位图、BloomFilter布隆过滤器和CuckooFilter布谷鸟过滤器。这些方法不仅高效,还能显著提升面试表现。尼恩还建议大家系统化学习,刷题《尼恩Java面试宝典PDF》,并提供简历修改和面试辅导,帮助大家实现“offer自由”。更多技术资料和PDF可在公众号【技术自由圈】获取。
|
1月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
2月前
|
SQL 存储 关系型数据库
京东面试:分库分表后,如何深度翻页?
在40岁老架构师尼恩的读者交流群中,有小伙伴在京东面试时遇到了MySQL分库分表后深度分页太慢的问题。本文详细分析了单表和分表场景下的性能问题及优化方法,包括索引覆盖、子查询分页、Join分页、禁止跳页查询、二次查询法等。此外,还介绍了使用ES+HBase的海量NOSQL架构方案。通过这些方法,可以显著提升分页查询的性能,帮助面试者在技术面试中脱颖而出。
京东面试:分库分表后,如何深度翻页?
|
2月前
|
SQL 关系型数据库 MySQL
京东面试:什么情况下 mysql RR不能解决幻读? RR隔离mysql如何实现?
老架构师尼恩在其读者交流群中分享了关于MySQL事务隔离级别的深入解析,特别针对RR级隔离如何解决幻读问题进行了详细讨论。文章不仅解释了ACID中的隔离性概念,还列举了四种事务隔离级别(未提交读、提交读、可重复读、串行读)的特点及应用场景。尼恩通过具体的例子和图表,清晰地展示了不同隔离级别下的并发事务问题(脏读、不可重复读、幻读)及其解决方案,特别是RR级隔离下的MVCC机制如何通过快照读和当前读来防止幻读。此外,尼恩还提供了相关面试题的解答技巧和参考资料,帮助读者更好地准备技术面试。更多详细内容和实战案例可在《尼恩Java面试宝典》中找到。
|
2月前
|
缓存 算法 架构师
京东面试:如何设计600Wqps高并发ID?如何解决时钟回拨问题?
资深架构师尼恩在其读者交流群中分享了关于分布式ID系统的设计与实现,特别是针对高并发场景下的解决方案。他强调了分布式ID系统在高并发核心组件中的重要性,并详细介绍了百度的UidGenerator,这是一个基于Snowflake算法改进的Java实现,旨在解决分布式系统中的唯一ID生成问题。UidGenerator通过自定义workerId位数和初始化策略,支持虚拟化环境下的实例自动重启和漂移,其单机QPS可达600万。此外尼恩的技术分享不仅有助于提升面试表现,还能帮助开发者在实际项目中应对高并发挑战。
京东面试:如何设计600Wqps高并发ID?如何解决时钟回拨问题?
|
2月前
|
缓存 关系型数据库 API
京东面试题:ElasticSearch深度分页解决方案!
京东面试题:ElasticSearch深度分页解决方案!
下一篇
DataWorks