![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MQ#RocketMQ
文章平均质量分 75
乐观男孩
乐观开朗
展开
-
RocketMQ Broker消息存储结构图
1、CommitLog与ConsumerQueue、CommitLog与IndexFile映射关系。2、消息检索过程。原创 2022-04-09 14:11:16 · 389 阅读 · 0 评论 -
RocketMQ IndexFile(索引文件)
目录说明索引建立过程IndexFile文件结构总结说明RocketMQ支持根据消息的key进行消息查询,由于消息都是顺序存在MapperFile上,当需要根据指定的key进行消息查找时,只能对所有的消息进行遍历,显然这种方法是不可取的。为了提高消息查询效率,RocketMQ会为每条消息里的key建立索引,加快消息的检索。ReputMessageService,会不停地检测是否有新的消息还未建立索引,当发现某条消息还未建立索引时,会将建立索引的任务分发给CommitLogDispatcherBuildI原创 2022-04-09 14:08:53 · 1565 阅读 · 0 评论 -
RocketMQ ConsumeQueue(消费队列)
目录说明ConsumerQueue建立过程ConsumerQueue文件结构总结说明RocketMQ对新消息是顺序存在MapperFile上,但不同的Consumer需要订阅不同topic的数据,针对不同的Consumer,如果从原始数据进行数据拉取,这样效率非常低,有可能扫描完所有的MapperFile后,只有几条消息可供消费的。RocketMQ为了解决这种问题,引入了ConsumeQueue消费队列的概念:针对每一条消息,都会按topic和queueId进行分类。Consumer进行拉取消息时,Br原创 2022-04-09 14:03:32 · 4999 阅读 · 2 评论 -
RocketMQ Broker主从复制流程
目录复制过程连接建立Slave Broker上报复制offsetMaster Broker读取Slave Broker上报的offsetMaster Broker复制消息给Slave BrokerSlave Broker读取新数据总结复制过程Broker主从复制主要逻辑在HAService类的内部,主要涉及以下组件:1、HAClient:在Slave Broker角色才使用,其主要功能包括连接Master Broker、向Master Broker上报需要复制的offset、处理Master Bro原创 2022-03-26 22:47:13 · 1011 阅读 · 0 评论 -
RocketMQ Broker对新消息的处理流程
目录处理流程图Broker启动入口组件初始化过程消息处理过程消息刷新到磁盘总结处理流程图NettyServer:RocketMQ基于Netty服务器,NettyServer用于接收Client的请求(这里是新消息请求)。SendMessageProcessor:对请求进行预处理(解析请求命令、解析请求内容等)DefaultMessageStore:默认消息存储器,实现关于消息的存取操作。CommitLog:具体处理消息的存储逻辑,其内部维护了一些里的MapperFile。MapperFile:原创 2022-03-20 14:58:42 · 805 阅读 · 0 评论 -
RocketMQ消费模式:DefaultMQPushConsumer与DefaultLitePullConsumerImpl
目录DefaultMQPushConsumerDefaultLitePullConsumerImplDefaultLitePullConsumerImpl工作过程Push与Pull模式比较DefaultMQPushConsumerDefaultMQPushConsumer在前面的章节中已经学习,由此我们知道:DefaultMQPushConsumer内部自动commit offset,无法手动commit offset,消费到的消息主动推送到Consumer的listener进行业务逻辑处理。Defa原创 2022-02-08 22:30:32 · 2027 阅读 · 0 评论 -
RocketMQ Consumer消息消费过程(三)、消息的处理
目录说明消息处理流程图拉取结果处理ConsumeMessageOrderlyService总结说明从上一节《Consumer消息消费过程(二)、消息的拉取》中,我们知道,拉取到消息后,会通过调用回调函数的方式对消息进行处理。在本节中,我们就学习下消息的处理过程。消息处理流程图拉取结果处理1、如果消息拉取失败,则直接调用回调函数的onException方法,该方法会重新将消息拉取请求放入PullMessageService的阻塞队列,重新放入的任务会间隔一段时间(默认3秒)后才执行2、如果拉取原创 2022-01-23 12:17:50 · 2094 阅读 · 0 评论 -
RocketMQ Consumer消息消费过程(二)、消息的拉取
目录说明PullMessageService消息拉取流程图消费拉取过程总结说明从上一节《Consumer消息消费过程(一)、queue均衡》中,我们知道在Consumer启动的过程中,会触发queue均衡。queue均衡主要完成以下几个工作:1、按照一定的算法对Topic内的queue进行均衡,均衡过后就明确了当前Consumer该消费哪些queue;2、每个需要消费的queue就会封装成一个消息拉取任务PullRequest,交由PullMessageService异步执行消息拉取任务。在本节中原创 2022-01-23 12:05:06 · 2771 阅读 · 0 评论 -
RocketMQ Consumer消息消费过程(一)、queue均衡
目录说明均衡过程queue均衡入口均衡过程均衡规则:说明关于RocketMQ Consumer消费消息的过程,内容较多,为了能将消费过程中涉及的关键技术讲全、讲明白,所以这一部分,根据消费过程的主要处理内容,我将分三个小部分进行:1、queue的均衡:针对topic的queue,如何分配给不同的Consumer进行消费,分配的算法有哪些。2、消息的拉取:拉取消息的过程及消息处理。3、消息的消费:对拉取到的消息推送给Consumer处理。这一节,我们先学习queue的均衡流程。均衡过程为了让大原创 2022-01-16 18:44:43 · 1398 阅读 · 0 评论 -
RocketMQ Consumer启动过程
目录说明初始化过程启动过程总结说明RocketMQ消费者启动过程与生产者启动过程其实差不多,只是消费者在启动之前,会有一些比较重要前置的操作:订阅、注册消息监听器等。但整个过程来说,还是比较简单的,主要是对涉及的组件初始化、启动定时任务、初始化Netty客户端等。先来看一下消费者启动过程中涉及到的类的关系:主要类功能说明:1、DefaultMQPushConsumer:消费者相关操作(启动、注册消息监听器、订阅等)的总入口,依赖于DefaultMQPushConsumerImpl 实现相关的功能。原创 2022-01-16 18:25:32 · 1884 阅读 · 0 评论 -
RocketMQ Producer发送消息过程
目录说明消息发送入口根据Topic获取路由信息选择消息发送的目标队列发送消息到Broker说明在Producer启动完成后,就可以利用Producer向Broker发送消息,我们以最简单的发送同步消息进行流程讲解。发送消息的核心逻辑分三个步骤:1、根据Topic获取路由信息;2、选择消息发送的目标队列;3、发送消息到Broker。消息发送入口Producer发送消息的入口在DefaultMQProducer类的send()方法,DefaultMQProducer提供了很多重载的方法,这些重载方原创 2022-01-03 18:47:49 · 903 阅读 · 0 评论 -
RocketMQ Producer启动过程
目录说明启动过程总结说明RocketMQ Producer启动过程,其实比较简单,主要是对涉及的组件初始化、启动定时任务、初始化Netty客户端等。先来看一下Producer启动过程中涉及到的类的关系从类图中大概可以看出,一个Producer启动过程涉及哪几个类以及每个类大概的功能。从图中也可以看出,最终与服务端进行交互的,其实是NettyRemotingClient类。基于NettyRemotingClient基础之上,封装了一个对外提供操作的API操作类MQClientAPIImpl,该类大概的原创 2022-01-03 16:15:59 · 1228 阅读 · 0 评论 -
RocketMQ使用事务消息
目录说明原理事务消息处理流程生产端消费端说明事务消息:1、不支持延时消息和批量消息2、如果消息没有及时提交,默认check 15次,可以通过Broker的transactionCheckMax参数配置次数。如果超时15次依然没有得到明确结果,将会打印异常信息,具体的处理策略可以通过复写AbstractTransactionCheckListener类实现3、每次check的时间间隔可以通过Broker的transactionTimeout配置,也可以在消息中增加CHECK_IMMUNITY_TI原创 2021-12-18 17:55:23 · 1596 阅读 · 0 评论 -
RocketMQ 消息过滤
目录说明生产端消费端说明消息过滤的两种方式:Tag和SQL表达式。生产者:对Message设置Tag、用户属性消费者:subscribe时指定Tag、SQL表达式生产端@Test public void sendMessage() throws Exception { DefaultMQProducer defaultMQProducer = RocketMqUtil.getDefaultMQProducer(); Message msg = new Me原创 2021-12-18 17:22:18 · 321 阅读 · 0 评论 -
RocketMQ使用批量消息
目录说明生产端消费端遗留问题说明批量发送消息条件:1、发送到同一个topic2、等待同一个发送结果3、不允许使用定时消息4、不支持半事务特性5、同一批消息大小不能超过1MB,否则需要自己进行切割发送批量消息,最主要的区别是在发送消息的send方法入参一个List。生产端@Test public void sendMessage() throws Exception { DefaultMQProducer defaultMQProducer = RocketMqUt原创 2021-12-18 16:24:18 · 1238 阅读 · 0 评论 -
RocketMQ使用延迟消息
目录说明生产端消费端运行结果示例延迟级别与延迟时间对应关系说明1、延时消息不是延迟发送,消息是实时发送的,只是消费者延迟消费2、延迟消息主要通过对Message设置延迟级别实现,生产者和消费者按照正常逻辑进行生产和消费。生产端@Test public void sendMessage() throws Exception { DefaultMQProducer defaultMQProducer = RocketMqUtil.getDefaultMQProducer();原创 2021-12-18 14:14:51 · 1881 阅读 · 0 评论 -
RocketMQ使用广播消息
目录说明生产端消费端总结说明RocketMQ消息模式主要有两种:(1)、MessageModel.CLUSTERING:集群模式。同一消费者组内的每个消费者,只消费到Topic的一部分消息,所有消费者消费的消息加起来就是Topic的所有消息。(2)、MessageModel.BROADCASTING:广播模式。同一消费者组内的每个消费者,都消费到Topic的所有消息。如Topic有100条消息,则同个消费者组下的所有消费者都能消费到100条消息。消息广播,主要配置在于消费者通过配置消息模式Mess原创 2021-12-01 17:28:50 · 7160 阅读 · 0 评论 -
RocketMQ使用顺序消息
目录说明生产端消费端总结说明RocketMQ与其它消息队列一样,一个Topic利用多个队列来存储数据,单个队列内的数据是顺序存储的,但队列间的数据无法保证顺序性。RocketMQ目前支持保证某类数据或部分数据的顺序性。核心思想是:发送消息时,可以通过实现MessageQueueSelector接口,选择消息发送到哪个队列,从而保证某类数据的顺序性。同时,可以在send方法中指定入参,方便MessageQueueSelector接口内部根据入参选择指定的队列。生产端@Testpublic void原创 2021-12-01 17:20:43 · 680 阅读 · 0 评论 -
RocketMQ发送同步、异步、单向消息
目录说明基础工具类测试代码效果展示说明后续打算根据RocketMQ官网的例子,也对各种类型的消息进行简单的使用。在熟悉基本使用,了解各类消息的特点之后,再抽时间进行内部原理剖析。基础工具类在接下来的例子中,都会用到以下工具类RocketMqUtil,其主要作用是封装了RocketMQ的NameServer地址、Topic、生产者或消费者。所以这里先贴上该工具类的代码:package com.lzj.rocketmq;import org.apache.rocketmq.client.consu原创 2021-11-12 00:07:20 · 3261 阅读 · 0 评论 -
RocketMQ服务端安装
目录说明环境准备安装架构图Name Server安装Broker安装查看集群节点情况问题说明为了尽量模拟实际应用场景,我们以集群的方式安装RocketMQ。从RocketMQ的组成中可以知道,RocketMQ包括Producer、Consumer、Name Server和Broker四个部分,但Producer和Consumer属于客户端,所以服务端安装只需要安装Namer Server和Broker即可。环境准备服务器:三台CentOS 7.4 64位系统的虚拟机,IP分别为:192.168.6.原创 2021-10-26 23:57:36 · 499 阅读 · 0 评论 -
RocketMQ基础知识
RocketMQ基础知识RocketMQ架构概述Name ServerBrokerProducerConsumerRocketMQ客户端如何找到Name ServerRocketMQ架构概述Apache RocketMQ(阿里巴巴贡献给Apache)是一个分布式消息和流媒体平台,具有低延迟、高性能、高可靠、万亿级容量和灵活的可扩展性。它包括四个部分:Name Server、brokers、producers和consumers。每一个部分都可以水平扩展,不存在单点故障问题。Name Server原创 2021-10-26 23:32:29 · 303 阅读 · 0 评论