push和pull模式

在RocketMQ中,消费者有两种模式,一种是push模式,另一种是pull模式。

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

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

但在具体实现时,Push和Pull模式都是采用消费端主动拉取的方式,即consumer轮询从broker拉取消息。

区别:

Push方式里,consumer把轮询过程封装了,并注册MessageListener监听器,取到消息后,唤醒MessageListener的consumeMessage()来消费,对用户而言,感觉消息是被推送过来的。

Pull方式里,取消息的过程需要用户自己写,首先通过打算消费的Topic拿到MessageQueue的集合,遍历MessageQueue集合,然后针对每个MessageQueue批量取消息,一次取完后,记录该队列下一次要取的开始offset,直到取完了,再换另一个MessageQueue。

疑问:既然是采用pull方式实现,RocketMQ如何保证消息的实时性呢?

长轮询

RocketMQ中采用了长轮询的方式实现,什么是长轮询呢?

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

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

RocketMQ的Consumer详解之push和pull模式(长轮询)相关推荐

  1. RocketMQ的Consumer详解之重复消息的解决方案

    重复消息的解决方案 造成消息重复的根本原因是:网络不可达.只要通过网络交换数据,就无法避免这个问题.所以解决这个问题的办法就是绕过这个问题.那么问题就变成了:如果消费端收到两条一样的消息,应该怎样处理 ...

  2. RocketMQ两万字详解

    目录 简介 1.RocketMQ搭建(基于linux) 1.1 安装NameServer 1.2 安装Broker 1.3 控制台安装 2 .集成Spring Boot测试 2.1添加依赖 2.2 添 ...

  3. 从源码分析RocketMQ系列-RocketMQ消息设计详解

    1 消息存储   消息存储是RocketMQ中最为复杂和最为重要的一部分,本节将分别从RocketMQ的消息存储整体架构.PageCache与Mmap内存映射以及RocketMQ中两种不同的刷盘方式三 ...

  4. x86 - CPU架构/寄存器详解 (三) 保护模式

    系列文章 x86 - CPU架构/寄存器详解 (一)x86.8086.i386.IA-32 是什么? x86 - CPU架构/寄存器详解 (二) 实模式(8086模式) x86 - CPU架构/寄存器 ...

  5. 模糊匹配 读音_onenote搜索机制详解②:两种搜索模式,模糊与精确匹配

    先从纯文本搜索讲起,这是最基本也是最重要的. 从这篇开始,以及接下来连续几篇文章,都会介绍搜索的基础功能.注意,这几篇文章中谈论的都是基本的.正常的搜索功能,暂时不考虑Bug等因素. 在很多软件(例如 ...

  6. python策略模式包含角色_详解Python设计模式之策略模式

    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...

  7. LVS原理详解(3种工作模式及8种调度算法)

    2017年1月12日, 星期四 LVS原理详解(3种工作模式及8种调度算法) LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法) 作者:woshiliwentong  发布日期:20 ...

  8. 从RocketMQ看长轮询(Long Polling)

    前言 消息队列一般在消费端都会提供push和pull两种模式,RocketMQ同样实现了这两种模式,分别提供了两个实现类:DefaultMQPushConsumer和DefaultMQPullCons ...

  9. RocketMQ的长轮询消费方式

    1.Push推送方式(即Server端推送消息给client): 当Server收到消息发送者发送过来的消息后,Server端主动把消息推送给client,这个方式实时性比较好,但是增加了Server ...

最新文章

  1. java判断用户是否在某一个区域登录_Java实现QQ登录和微博第三方登录
  2. python中return的理解-python中的return的返回与执行
  3. mysql 二进制安装卸载_MySQL二进制版本的安装及卸载
  4. iphone桌面横屏设置在哪里_iPhone的实用攻略如此多,这4个你知道吗?
  5. 非专业转行python的几点建议
  6. CF思维联系–CodeForces -224C - Bracket Sequence
  7. matlab里inline定义矩阵,Matlab中的inline函数_matlab中inline函数
  8. win10软件拒绝访问删不掉_Win10右键菜单添加“获取文件管理员权限”选项
  9. 算法之路——插入排序篇3:希尔排序
  10. 安装Ubuntu时的硬盘分区方案
  11. 找出数组中两数之和为指定值的所有整数对
  12. Python数据结构与算法笔记(六):数据结构——列表和栈
  13. ASP.Net Web 点击链接直接下载 不在浏览器打开
  14. 约5亿条!华住旗下酒店开房信息泄露于“暗网”售卖,你改密码了吗?
  15. 编译SONiC交换机镜像(转,参考2)
  16. CPU的使用率和负载的区别
  17. 承认你的父母其实不那么爱你
  18. 收我叫mt3完整源码,不要拿网上的来忽悠,要求前后端完整,文档工具完整,重点可演示编译成功!联系我!
  19. 网络安全证书已过期或不可信怎么办
  20. Win11亮度无法调节解决方法(在卸载驱动,关闭自适应亮度和修改注册表都行不通的情况下)

热门文章

  1. Django如何安装指定版本
  2. 一种求凸多边形内部似最大圆的算法
  3. 一步步创建 边栏 Gadget(一)
  4. Netty框架整体架构及源码知识点
  5. 程序员:最绝望的面试代码写了4个小时,就是不运行!最终收到15K的offer
  6. AssetBundle系列——共享资源打包/依赖资源打包
  7. Emgucv粗略抠取车牌
  8. Linux 3.10 新特性
  9. HDU-不容易系列之(3)—— LELE的RPG难题
  10. 告别ASP.NET操作EXCEL的烦恼