结合之前看的一些东西,阅读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 ...
随机推荐
- MySQL 数据表操作
MySQL 数据表操作 创建MySQL数据表需要以下信息: -表名: -表字段名: -定义每个表字段: 一.创建数据表 1)mysql> create table table_name (c ...
- [随笔][Java][总结][java 类型系统]
java 的类型系统大体分为两类,对象和基本类型.java使用静态类型检查来保证类型安全.每个变量在使用之前需要声明.非静态类型的语言不要求变量在使用之前进行声明. 基本数据类型 java的基本类型不 ...
- puzz: 图片和表单上传的不一致问题
1. 方向1 用户提交表单, 图片和表单同步上传.(由同一服务器处理, 服务器压力大. 没有分离) 2. 方向2 图片和表单分开上传. 如图片访问ftp,表单提交后台(图片和后台分离) 2 ...
- Tomcat 多个虚拟主机配置方法
conf/server.xml 移除注释内容后,类似内容如下: <Server> …… …… …… <Service name="Catalina"> &l ...
- (一)CentOS6.3安装Hadoop2.6.5
1.准备环境 下载CentOS: https://www.centos.org/download/ 下载JDK: https://www.oracle.com/technetwork/java/jav ...
- 2016-08-15T16:00:00.000Z 格式转换成yyyy-MM-dd HH:mm:ss格式
public static String UTCStringtODefaultString(String UTCString) { try { if (CommonUtils.notNullAndEm ...
- Git技能图
- jar包和war包的介绍和区别
jar包和war包的介绍和区别 Java程序员的日常 关注 做Java开发,jar包和war包接触的挺多的,有必要对它们做一个深入的了解,特总结整理如下: 1.jar包的介绍 JAR(Java Arc ...
- jmeter接口测试-线程组设置(断言失败后用例停止执行)
问题描述: jmeter跑接口用例的时候,其中一条用例的对断言失败后,后面的用例都不执行了! 解决思路1: 考虑应该有地方设置,在菜单栏找了半天没找到,百度也没有查到 解决思路2: jmeter源码导 ...
- C语言排序算法学习笔记——交换类排序
交换类排序:根据序列中两个元素关键字的比较结果来交换他俩在序列中的位置. 冒泡排序:假设待排序表长为n,从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i])则交换他们 ...