![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
RocketMQ
文章平均质量分 85
又蠢又笨的懒羊羊程序猿
『世界上只有一种真正的英雄主义』
展开
-
RocketMQ:消息ACK机制源码解析
消息消费进度概述消费者消费消息过程中,为了避免消息的重复消费,应将消息消费进度保存起来,当其他消费者再对消息进行消费时,读取已消费的消息偏移量,对之后的消息进行消费即可。消息模式分为两种:集群模式:一条消息只能被一个消费者消费广播模式:一条消息被所有消费者都消费一次广播模式下,消息被所有消费者消费,因此消息消费的进度可以跟消费端保存在一起,即本地保存。集群模式下,消息只能被集群内的一个消费者消费,进度不能保存在消费端,否则会导致消息重复消费,因此集群模式下消息进度集中保存在Broker中。原创 2021-11-20 13:38:29 · 7884 阅读 · 3 评论 -
RocketMQ:消费端的消息消息队列负载均衡与重新发布机制源码解析
文章目录前言流程解析总结前言在上一篇博客中我们了解到,PullMessageService线程主要是负责从pullRequestQueue中获得拉取消息请求并进行请求处理的。PullMessageService#run//在拉取消息请求队列中拉取消息请求PullRequest pullRequest = this.pullRequestQueue.take();//处理请求this.pullMessage(pullRequest);但是pullRequestQueue中的PullReque原创 2021-11-19 20:21:41 · 7051 阅读 · 2 评论 -
RocketMQ:Consumer概述及启动流程与消息拉取源码分析
文章目录Consumer概述消费者核心类消费者启动流程消息拉取PullMessageService实现机制ProcessQueue实现机制消息拉取基本流程客户端发起消息拉取请求消息服务器Broker组装消息消息拉取客户端处理消息总结Consumer概述消费者组与消费模式消息消费以组的模式展开,一个消费组内可包含多个消费者,每个消费组可以订阅多个主题。消费组之间有负载均衡和广播两种模式。负载均衡模式,主题下的同一条消息只允许被其中一个消费者消费。广播模式,主题下的同一条消息,将被所有消费者消费一次原创 2021-11-18 13:44:37 · 6140 阅读 · 1 评论 -
RocketMQ:消息消费队列与索引文件的实时更新以及文件恢复源码解析
文章目录消息存储1.实时更新消息消费队列和索引文件1.1.转发到ConsumerQueue1.2.转发到Index2.消息队列和索引文件恢复2.1.存储文件加载2.1.1.加载commitLog文件2.1.2.加载消息消费队列2.1.3.加载索引文件2.2.正常恢复2.3.异常恢复消息存储1.实时更新消息消费队列和索引文件消息消费队文件、消息属性索引文件都是基于CommitLog文件构建的,当消息生产者提交的消息存储在CommitLog文件中,ConsumerQueue、IndexFile需要及时更新原创 2021-11-17 18:39:38 · 902 阅读 · 1 评论 -
RocketMQ:消息存储机制详解与源码解析
文章目录消息存储机制1.前言2.核心存储类:DefaultMessageStore3.消息存储流程4.消息存储文件5.存储文件内存映射5.1.MapperFileQueue5.2.MappedFile5.2.1.commit5.2.2.flush5.3.TransientStorePool6.刷盘机制6.1.同步刷盘6.2.异步刷盘消息存储机制1.前言本文主要讲解内容是Broker接收到消息生产者发送的消息之后,如何将消息持久化存储在Broker中。2.核心存储类:DefaultMessageSto原创 2021-11-17 11:23:44 · 3049 阅读 · 2 评论 -
RocketMQ:Producer启动流程与消息发送源码分析
文章目录Producer1.方法和属性2.启动流程3.消息发送3.1验证消息3.2查找路由3.3选择队列3.4发送消息3.5发送批量消息Producer在RocketMQ中,消息生产者就是客户端,即消息的提供者。以下是消息生产者Producer项目预览图:1.方法和属性Producer的相关核心类:MQAdmin接口方法介绍://创建主题void createTopic(final String key, final String newTopic, final int queueNu原创 2021-11-15 13:08:35 · 1603 阅读 · 1 评论 -
RocketMQ:NameServer路由管理源码分析
NameServer路由管理1.前言NameServer主要作用是为消息消费者和消息生产者提供关于主题Topic的路由信息,那么NameServer需要存储路由的基本信息,还要管理Broker节点,包括路由注册、路由删除等。2.路由元信息路由元信息主要由RouteInfoManager来进行管理,这个类在已经介绍过,这里再做一下简单的介绍。private final static long BROKER_CHANNEL_EXPIRED_TIME = 1000 * 60 * 2; private原创 2021-11-13 19:08:21 · 1623 阅读 · 1 评论 -
RocketMQ:NameServer架构设计以及启动关闭流程源码分析
文章目录NameServer1.架构设计2.核心类与配置3.启动与关闭流程3.1.步骤一3.2.步骤二3.3.步骤三NameServer1.架构设计消息中间件的设计思路一般都是基于主题订阅与发布的机制,RocketMQ也不例外。RocketMQ中,消息生产者(Producer)发送某主题的消息到消息服务器,消息服务器对消息进行持久化存储,而消息消费者(Consumer)订阅所需要的主题,消息服务器根据订阅信息(路由信息)将消息推送至消息消费者(Push模式)或者消息消费者主动向消息服务器进行拉取(Pu原创 2021-11-12 22:59:07 · 1599 阅读 · 1 评论 -
RocketMQ集群启动报错:java.lang.RuntimeException: Lock failed,MQ already started
启动RocketMQ集群后报错:java.lang.RuntimeException: Lock failed,MQ already started at org.apache.rocketmq.store.DefaultMessageStore.start(DefaultMessageStore.java:214) at org.apache.rocketmq.broker.BrokerController.start(BrokerController.java:827) at org.apach原创 2021-11-01 12:10:16 · 2236 阅读 · 4 评论