结合之前看的一些东西,阅读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 ...
随机推荐
- Scrapy 代理IP
Scrapy 代理IP 一.Scarpy使用代理IP 1.在setting.py 配置 代理服务器IP 2.在middlermares.py 配置 downloadmiddlermare(下载中间件) ...
- 解决openstack实例主机名后缀问题
参考地址https://ask.openstack.org/en/question/26918/change-novalocal-suffix-in-hostname/ 问题现象 可以看到主机名的后缀 ...
- Java面试问题汇总
转一些面试经验 刚看到下面这份面试清单,从个人的开发面试经历看,里面总结的大部分内容还是很不错的.年后想跳槽的朋友可以选取里面的问题准备一下. GitHub上的面试总结帖 Interview-Note ...
- Git 环境配置
Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量. 这些变量存储在三个不同的位置: /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用 ...
- IDEA 代码生成插件 CodeMaker
Java 开发过程中经常会遇到编写重复代码的事情,例如说:编写领域类和持久类的时候,大部分时候它们的变量名称,类型是一样的,在编写领域类的时候常常要重复写类似的代码.类似的问题太多……这里介绍一个 I ...
- DiscuzX2.5,X3.0,X3.1,X3.2完整目录结构【模板目录template】
/template/default/common 公共模板目录全局加载 block_forumtree.htm DIY论坛树形列表模块 block_thread.htm DIY帖子模块调用文件 ...
- Elasticsearch-6.7.0系列(二)ES集群安装与验证
准备3台centos7机器/虚拟机,每台都安装上elasticsearch6.7.0 ,安装过程参考我的另一篇博客<Elasticsearch-6.7.0系列(一)9200端口 .tar.gz版 ...
- 廖雪峰Java8JUnit单元测试-2使用JUnit-1使用Before和After
1. @Before和@After 同一个单元测试内的多个测试方法: 测试前都需要初始化某些对象 测试后可能需要清理资源fileInputStream.close() @Test public voi ...
- android 显示大图模糊问题
使用Glide 版本为4.8.0 /* */ Glide.with(context).asBitmap().load(url).into(new SimpleTarget<Bitmap>( ...
- TableVie优化方法和优化机制
1,UITableview的优化方法(缓存高度,异步绘制,减少层级,hide,避免离屏渲染) (1)缓存高度:当我们创建frame模型的时候,计算出来cell的高度的时候,我们可以将cell的高度缓存 ...