RocketMQ
文章平均质量分 71
vinylon1022
这个作者很懒,什么都没留下…
展开
-
RocketMQ十四、Broker处理Consumer请求
首先我们知道RocketMQ是将Producer发来的消息全部放入CommitLog里面,消费时是通过维护ConsumerQueue来帮助Consumer进行消费。当Broker收到Consumer的pull请求时,会先读取ConsumerQueue得到offset,然后再读取CommitLog得到消息内容。我们看一下broker启动时初始化的处理pull请求的处理器:this.remotingServer.registerProcessor(RequestCode.PULL_MESSAGE, thi.原创 2021-05-28 15:27:57 · 379 阅读 · 0 评论 -
RocketMQ十三、Broker的消息接收
先回过头来看一下broker启动时注册的消息处理器:public void registerProcessor() { /** * SendMessageProcessor */ SendMessageProcessor sendProcessor = new SendMessageProcessor(this); sendProcessor.registerSendMessageHook(sendMessageHookList); sendProces原创 2021-05-28 10:59:46 · 211 阅读 · 0 评论 -
RocketMQ十二、Broker启动
本篇开始介绍Broker部分的内容,主要包括Broker的启动、消息的接收、消息的处理。broker的启动主要分为两个过程,即initialize初始化和start启动BrokerStartup类的main方法:public static void main(String[] args) { start(createBrokerController(args));}其中createBrokerController方法初始化过程,start方法启动过程initializepublic原创 2021-05-28 10:21:22 · 838 阅读 · 0 评论 -
RocketMQ十一、消息存储(3)
本篇我们分析一下整体存储的流程。首先入口方法DefaultMessageStore的putMessage方法:@Overridepublic PutMessageResult putMessage(MessageExtBrokerInner msg) { // 状态检查 PutMessageStatus checkStoreStatus = this.checkStoreStatus(); if (checkStoreStatus != PutMessageStatus.PUT_原创 2021-05-27 16:17:49 · 108 阅读 · 0 评论 -
RocketMQ十、消息存储(2)
分析一下RocketMQ消息存储中的几个关键对象。MappedFileRocketMQ的文件操作是基于MappedByteBuffer操作的,MappedFile类是对MappedByteBuffer的包装,具有创建文件(使用非堆区内存), 写入, 提交, 读取, 释放, 关闭等功能, RocketMQ使用该类实现数据从内存到磁盘的持久化。其中:属性fileChannel: 该类对应的文件通道.mappedByteBuffer: 文件在内存中的映射. 如前文所述RocketMQ使用内存映射的方原创 2021-05-27 14:16:19 · 238 阅读 · 0 评论 -
RocketMQ九、消息存储(1)
前面提到RocketMQ是基于Topic模型的,这里先简单了解一下broker中是如何存储消息的。首先要知道的,RocketMQ的消息存储是基于文件系统的,主要包含三类文件:CommitLog、ConsumerQueue、IndexFile。其中:CommitLog 消息主体以及元数据的存储主体。 所有producer端写入的消息主体内容都会写入到CommitLog文件中。虽然消息内容的长度不是固定长度的,但是对于CommitLog,每个CommitLog文件是固定长度的,大小是1G(这么做的主要目原创 2021-05-27 11:13:26 · 154 阅读 · 0 评论 -
RocketMQ八、nameserver的请求处理
继续DefaultRequestProcessor的processRequest方法:@Overridepublic RemotingCommand processRequest(ChannelHandlerContext ctx, RemotingCommand request) throws RemotingCommandException { if (ctx != null) { log.debug("receive request, {} {} {}",原创 2021-05-14 16:41:12 · 172 阅读 · 0 评论 -
RocketMQ七、rocketMQ的网络通信模块
关于rocketMQ的netty消息处理,实际上都在一个rocketmq-remoting模块中。不管是nameserver还是broker,从netty的handler开始是统一的结构。我们先以nameserver部分的跟踪一下。前一篇看到过netty的启动,我们回过来再看一下:@Overridepublic void start() { ... prepareSharableHandlers(); ServerBootstrap childHandler =原创 2021-05-14 15:59:32 · 225 阅读 · 0 评论 -
RocketMQ六、NameServer的启动
首先我们先理解nameserver在做什么。简单来说就是一个注册中心,用于管理broker的地址信息和topic的信息,客户端可以通过nameserver获得topic信息,通过topic获取broker相关信息,以及每个broker上topic的queue信息等。也就是说nameserver维护了整个MQ集群的元数据信息,客户端可以通过链接nameserver得到这些信息,以明确将对应的消息发送到哪个broker上去。NameServer的启动NamesrvStartup类的main方法:pu原创 2021-05-14 15:35:18 · 358 阅读 · 0 评论 -
RocketMQ五、生产消费模型
简单介绍一下我对RocketMQ的topic的结构理解: 每个topic会有多个queue队列,每个queue会有多份分布在不同的broker上,如下图:consumer在消费一个topic时,选择某一个Queue进行消费,同ConsumerGroup下不同的consumer消费的是不同的queue,不同ConsumerGroup下的consumer可以消费同一个queue:...原创 2021-05-14 11:27:14 · 203 阅读 · 0 评论 -
RocketMQ四、Client的通信
Client -> Broker直接看DefaultMQProducerImpl的send方法:private SendResult sendDefaultImpl( Message msg, final CommunicationMode communicationMode, final SendCallback sendCallback, final long timeout) throws MQClientException, RemotingExcepti原创 2021-04-29 11:38:33 · 412 阅读 · 0 评论 -
RocketMQ三、Consumer的启动
我们先看一下RocketMQAutoConfiguration的定义:@Configuration@EnableConfigurationProperties(RocketMQProperties.class)@ConditionalOnClass({ MQAdmin.class, ObjectMapper.class })@ConditionalOnProperty(prefix = "rocketmq", value = "name-server")@Import({ JacksonFallb原创 2021-04-29 10:09:34 · 1163 阅读 · 0 评论 -
RocketMQ二、producer端启动
前面简单了解了一下RocketMQ的使用。本文分析一下producer端的启动流程。首先还是看一下RocketMQ的配置类:@Bean @ConditionalOnMissingBean(DefaultMQProducer.class) @ConditionalOnProperty(prefix = "rocketmq", value = {"name-server", "producer.group"}) public DefaultMQProducer defaultMQPr原创 2021-04-28 14:27:33 · 1034 阅读 · 0 评论 -
RocketMQ一、使用RocketMQ
最近比较忙,好长时间没有更新了。正好最近在使用rocketMQ,先聊聊使用过程中的一些情况吧。引入springboot环境中引入rocketMQ很简单,加入相应的starter即可:<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId></dependency>原创 2021-02-05 10:45:51 · 1209 阅读 · 0 评论