RocketMQ的Consumer详解之push和pull模式(长轮询)
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模式(长轮询)相关推荐
- RocketMQ的Consumer详解之重复消息的解决方案
重复消息的解决方案 造成消息重复的根本原因是:网络不可达.只要通过网络交换数据,就无法避免这个问题.所以解决这个问题的办法就是绕过这个问题.那么问题就变成了:如果消费端收到两条一样的消息,应该怎样处理 ...
- RocketMQ两万字详解
目录 简介 1.RocketMQ搭建(基于linux) 1.1 安装NameServer 1.2 安装Broker 1.3 控制台安装 2 .集成Spring Boot测试 2.1添加依赖 2.2 添 ...
- 从源码分析RocketMQ系列-RocketMQ消息设计详解
1 消息存储 消息存储是RocketMQ中最为复杂和最为重要的一部分,本节将分别从RocketMQ的消息存储整体架构.PageCache与Mmap内存映射以及RocketMQ中两种不同的刷盘方式三 ...
- x86 - CPU架构/寄存器详解 (三) 保护模式
系列文章 x86 - CPU架构/寄存器详解 (一)x86.8086.i386.IA-32 是什么? x86 - CPU架构/寄存器详解 (二) 实模式(8086模式) x86 - CPU架构/寄存器 ...
- 模糊匹配 读音_onenote搜索机制详解②:两种搜索模式,模糊与精确匹配
先从纯文本搜索讲起,这是最基本也是最重要的. 从这篇开始,以及接下来连续几篇文章,都会介绍搜索的基础功能.注意,这几篇文章中谈论的都是基本的.正常的搜索功能,暂时不考虑Bug等因素. 在很多软件(例如 ...
- python策略模式包含角色_详解Python设计模式之策略模式
虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...
- LVS原理详解(3种工作模式及8种调度算法)
2017年1月12日, 星期四 LVS原理详解(3种工作模式及8种调度算法) LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法) 作者:woshiliwentong 发布日期:20 ...
- 从RocketMQ看长轮询(Long Polling)
前言 消息队列一般在消费端都会提供push和pull两种模式,RocketMQ同样实现了这两种模式,分别提供了两个实现类:DefaultMQPushConsumer和DefaultMQPullCons ...
- RocketMQ的长轮询消费方式
1.Push推送方式(即Server端推送消息给client): 当Server收到消息发送者发送过来的消息后,Server端主动把消息推送给client,这个方式实时性比较好,但是增加了Server ...
最新文章
- java判断用户是否在某一个区域登录_Java实现QQ登录和微博第三方登录
- python中return的理解-python中的return的返回与执行
- mysql 二进制安装卸载_MySQL二进制版本的安装及卸载
- iphone桌面横屏设置在哪里_iPhone的实用攻略如此多,这4个你知道吗?
- 非专业转行python的几点建议
- CF思维联系–CodeForces -224C - Bracket Sequence
- matlab里inline定义矩阵,Matlab中的inline函数_matlab中inline函数
- win10软件拒绝访问删不掉_Win10右键菜单添加“获取文件管理员权限”选项
- 算法之路——插入排序篇3:希尔排序
- 安装Ubuntu时的硬盘分区方案
- 找出数组中两数之和为指定值的所有整数对
- Python数据结构与算法笔记(六):数据结构——列表和栈
- ASP.Net Web 点击链接直接下载 不在浏览器打开
- 约5亿条!华住旗下酒店开房信息泄露于“暗网”售卖,你改密码了吗?
- 编译SONiC交换机镜像(转,参考2)
- CPU的使用率和负载的区别
- 承认你的父母其实不那么爱你
- 收我叫mt3完整源码,不要拿网上的来忽悠,要求前后端完整,文档工具完整,重点可演示编译成功!联系我!
- 网络安全证书已过期或不可信怎么办
- Win11亮度无法调节解决方法(在卸载驱动,关闭自适应亮度和修改注册表都行不通的情况下)