结合之前看的一些东西,阅读RockMQ实战与原理解析笔记
Topic有多个message queue,消息可以并行的向各个message queue发送,消费者也可以并行的从多个message queue读取消息并消费
clustering模式消费一个topic里的消息内容是哦,可以启动多个消费者并行消费,每个消费者只消费Topic里消息的一部分,以此提高消费速度,这个时候就是通过订阅组来指明哪些消费者是同一组,同一组的消费者共同消费同一个Topic里的内容
DefaultMQPushConsumer由系统控制读取操作,收到消息后自动调用传入的处理方法来处理;
DefaultMQPullConsumer读取操作中的大部分功能由使用者自主控制
RocketMQ支持两种消息模式,clustering和broadcasting
集群模式下,同一个consumergroup里的每个consumer只消费所订阅消息的一部分内容,同一个consumergroup里的所有的comsumer消费的内容合起来才是所订阅topic内容的整体,从而达到负载均衡的目的
广播模式下,同一个consumergroup里的每个consumer都能消费到所订阅topic的全部消息,也就是一个消息会被多次分发,被多个consumer消费
可以指定消费某个Topic下的多个标记了某tag的消息,也可以消费全部
Push方式是服务端接收到消息后,主动把消息推送给客户端,实时性高,但弊端是加大了服务端工作量,而且无法顾及到客户端处理能力的不同,造成潜在问题
Pull的方式是客户端循环从服务端拉取消息,主动权在客户端手里,自己拉取到一定的消息后,处理妥当了再接着取,问题是如何设置获取间隔,太短容易浪费忙等,太长可能处理不及时
DefaultMQPushConsuer的源码中有很多PullRequest语句,比如Default-MQPushConsumerImpl.this.executePullRequestImmediately(pullRequest)。为什么“PushConsumer”中使用“PullRequest”呢?这是通过“长轮询”方式达到Push效果的方法,长轮询方式既有Pull的优点,又兼具Push方式的实时性。
服务端接受到请求后,队列里没有新消息,并不急于返回,通过一个循环不断查看状态,每次waitForRunning一段时间,然后再check,默认情况下,当broker一直没有新的消息,第三次check的时候,等待时间超过request里的brokerSuspendMaxTimeMillis,就返回空结果。在等待过程中,如果broker收到了新的消息后悔直接调用notifyMessageArriving函数返回请求结果,长轮询的核心就是,Broker端hold住客户端过来的请求一小段时间,在这个时间内有新的消息到达,就利用现有的连接立即返回给consumer,长轮询的主动权还是掌握在consumer手中,broker即使有大量消息积压也不会主动推送给consumer,缺点就是在Hold过程中需要占用资源,适合在消息队列这种客户端连接数可控的场景
结合之前看的一些东西,阅读RockMQ实战与原理解析笔记的更多相关文章
- 看图写代码---看图写代码 阅读<<Audio/Video Connectivity Solutions for Virtex-II Pro and Virtex-4 FPGAs >>
看图写代码 阅读<<Audio/Video Connectivity Solutions for Virtex-II Pro and Virtex-4 FPGAs >> 1.S ...
- 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要三
最近工作较忙,手上有几个项目等着我独立开发设计,所以平时工作日的时候没有太多时间,下班累了就不想动,也就周末有点时间,今天我花了一个下午的时间来继续总结与整理书中要点,在整理的过程中,发现了书中的一些 ...
- SpringMVC源码阅读:Controller中参数解析
1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...
- 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要系列文章索引
从发表第一篇文章到最后一篇文章,时间间隔有整整一个月,虽只有5篇文章,但每一篇文章都是我吸收<LEARNING HARD C#学习笔记>这本书的内容要点及网上各位大牛们的经验,没有半点废话 ...
- 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要二
今天继续分享我的阅读<LEARNING HARD C#学习笔记>知识点总结与摘要二,仍然是基础知识,但可温故而知新. 七.面向对象 三大基本特性: 封装:把客观事物封装成类,并隐藏类的内部 ...
- 阅读 video on-screen display v6.0笔记
阅读 video on-screen display v6.0笔记 关于axi总线时钟的区分 需要弄清楚的是aclk, aclken, aresetn 信号是和video 有关的,axi4-lite的 ...
- 阅读<Vivado Design Suite Tutorial---Logic Simulation>笔记
阅读<Vivado Design Suite Tutorial---Logic Simulation>笔记 1.建工程,添加仿真文件 2.在IP Catalog里面添加IP核 Sine_h ...
- 阅读 ‘External Memory PHY Interface (ALTMEMPHY)’笔记
阅读 ‘External Memory PHY Interface (ALTMEMPHY)’笔记 1.PLL reference clock frequency 此处控制器输入时钟设置为100MHz, ...
- 阅读Protobuf官网的一些笔记
阅读 Protobuf 官网的一些笔记 Protobuf API(The Protocol Buffer API) 每个字段都会有基本的 set_ get_ 方法 string类型的字段可以使用 mu ...
随机推荐
- Python控制台颜色
Python控制台颜色 格式:\033[显示方式;前景色;背景色m 说明: 前景色 背景色 颜色 30 40 黑色 31 41 红色 32 42 绿色 33 43 黃色 34 44 蓝色 35 45 ...
- Java 内部类的作用
1.内部类可以很好的实现隐藏 一般的非内部类,是不允许有 private 与protected权限的,但内部类可以 2.内部类拥有外围类的所有元素的访问权限 3.可是实现多重继承 4.可以避免修改接口 ...
- 第5章 Hyperledger Fabric功能
Hyperledger Fabric is a unique implementation of distributed ledger technology (DLT) that delivers e ...
- PHP数组和XML相互转换的函数
//数组转xml function ArrToXml($arr) { if(!is_array($arr) || count($arr) == 0) return ''; $xml = "& ...
- LOJ 2548 「JSOI2018」绝地反击 ——二分图匹配+网络流手动退流
题目:https://loj.ac/problem/2548 如果知道正多边形的顶点,就是二分答案.二分图匹配.于是写了个暴力枚举多边形顶点的,还很愚蠢地把第一个顶点枚举到 2*pi ,其实只要 \( ...
- EF提示“序列化类型为XXX的对象时检测到循环引用”
能看到这个标题 ,我就用解释原因,网上很多,我只给大家一个解决方案会: public <#=code.Escape(entity)#> ToPOCO() { return new < ...
- LCD LED OLED区别 以及RGB、YUV和HSV颜色空间模型
led 液晶本身不发光,而是有背光作为灯源,白色是由红绿蓝三色组成,黑色是,液晶挡住了led灯光穿过显示器. lcd比led更薄. oled:显示黑色时,灯是灭的,所以显示黑色更深,效果更好. 这就不 ...
- 工控随笔_04_西门子_解决Step 7软件因授权问题不能打开的方式和方法
西门子的软件是授权软件,只有经过授权认证的用户才能使用,如果没有通过授权认证则不能 正常的使用软件的相关功能. 一.西门子授权不成功问题 如上图所示报故障代码: 000001-0505.报警文本为:未 ...
- 根据导出的查询结果拼接字符串,生成sql语句并保存到txt文件中
import os os.chdir("C:/") path = os.getcwd() print(path) f = open("sql.csv") # p ...
- 理解OpenShift(6):集中式日志处理
理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...