<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[szhlcy的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/szhlcy</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; szhlcy]]></copyright><item><title><![CDATA[RocketMQ源码解析——Broker部分之消息接收过程`SendMessageProcessor`(3)]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/122013677</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/122013677</guid><author>szhlcy</author><pubDate>Sun, 19 Dec 2021 13:40:18 +0800</pubDate><description><![CDATA[文章目录Broker启动时的准备netty启动时候的准备逻辑注册事件到Broker请求接收逻辑netty请求事件触发内部处理逻辑
前面说了消息在Producer端的发送逻辑。这里结合Broker端来说一下。消息在Broker端接收的逻辑。
Broker启动时的准备
netty启动时候的准备逻辑
关于Broker的启动逻辑这里
注册事件到Broker
请求接收逻辑
netty请求事件触发
内部处理逻辑

...]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解析——Producer部分之消息发送过程的一些重试和容错逻辑(2)]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/121871995</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/121871995</guid><author>szhlcy</author><pubDate>Tue, 14 Dec 2021 23:13:06 +0800</pubDate><description><![CDATA[文章目录根据Broker和消息发布信息选择一个MessageQueue——`selectOneMessageQueue`
前面说了消息发送的主逻辑这里主要说一下
根据Broker和消息发布信息选择一个MessageQueue——selectOneMessageQueue
selectOneMessageQueue是根据消息Topic的信息和BrokerName进行选择一个队列。这个方法定义在，容错策略的实现类MQFaultStrategy中。
Producer端在发送消息的时候，会先根据Topic找到指定的]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解析——Producer部分之消息发送过程DefaultMQProducer到DefaultMQProducerImpl（1）]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/121799034</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/121799034</guid><author>szhlcy</author><pubDate>Sat, 11 Dec 2021 13:09:58 +0800</pubDate><description><![CDATA[文章目录发送消息入口`DefaultMQProducer`消息发送实现`DefaultMQProducerImpl`发送消息主方逻辑实现 `sendDefaultImpl`根据topic获取消息发布信息`tryToFindTopicPublishInfo`
发送消息入口DefaultMQProducer
前面说了RocketMQ消息生产者的启动逻辑，现在接着说对应的消息发送的逻辑。消息发送的入口在DefaultMQProducer类的send方法。这个方法有很多的重载方法对应的参数各不一样这里举例其中参数最]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解析——Producer部分之生产者客户端MQClientInstance启动(2)]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/121081407</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/121081407</guid><author>szhlcy</author><pubDate>Sat, 20 Nov 2021 16:16:03 +0800</pubDate><description><![CDATA[文章目录
 前面说了消息生产者的启动主要流程，从启动脚本到DefaultMQProducer再到DefaultMQProducerImpl然后到MQClientInstance。都是一步一步委托的。这里之所以把MQClientInstance单独拿出来说，是因为MQClientInstance这个类不仅仅在生产者用到，他还是消费者，RocketMQ的Admin控制台的共用客户端实体类。

...]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解析——Producer部分之Producer启动过程DefaultMQProducer(1)]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/119579185</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/119579185</guid><author>szhlcy</author><pubDate>Tue, 10 Aug 2021 21:04:38 +0800</pubDate><description><![CDATA[文章目录从官网说明开始字段摘要构造方法摘要使用方法摘要代码分析`DefaultMQProducer`的构造方法生产者实例的启动`start`方法
 前面分析Broker的启动过程，接下来分析Producer的启动过程。
从官网说明开始
 先来看看官网的发送消息额实例代码
public class Producer {
    public static void main(String[] args) throws MQClientException {
        // 创建指定分组名的生产者
   ]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解析——Broker部分之Broker启动过程BrokerStartup(2)]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/118916887</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/118916887</guid><author>szhlcy</author><pubDate>Tue, 03 Aug 2021 21:03:30 +0800</pubDate><description><![CDATA[文章目录
 前面

]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解析——Broker部分之Broker启动过程BrokerStartup(1)]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/117265543</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/117265543</guid><author>szhlcy</author><pubDate>Mon, 19 Jul 2021 23:11:07 +0800</pubDate><description><![CDATA[文章目录从启动脚本到启动类启动类`BrokerStartup`创建前的准备工作`createBrokerController`
从启动脚本到启动类
 我们知道RocketMQ的Broker端的启动方式为，进入到RocketMQ的bin目录下，运行对应的mqbroker脚本。
 RocketMQ的Linux和Windows脚本内容也就是对应的mqbroker脚本，这里贴出来看看
.......省略部分脚本
export ROCKETMQ_HOME

sh ${ROCKETMQ_HOME}/bin/runbro]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解析——存储部分(8)操作消息相关日志的中介DefaultMessageStore]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/117483194</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/117483194</guid><author>szhlcy</author><pubDate>Tue, 29 Jun 2021 22:35:21 +0800</pubDate><description><![CDATA[文章目录
前面介绍了RocketMQ的一些主要的日志文件，CommitLog，ConsumeQueue，IndexFile

]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解析——存储部分(7)延迟消息的原理`ScheduleMessageService`]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/117718193</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/117718193</guid><author>szhlcy</author><pubDate>Tue, 15 Jun 2021 22:45:46 +0800</pubDate><description><![CDATA[文章目录延迟消息描述介绍
延迟消息描述介绍
RocketMQ的定时消息（延迟队列）是指消息发送到broker后，不会立即被消费，等待特定时间投递给真正的topic。broker有配置项messageDelayLevel，默认值为1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h，18个level。可以配置自定义messageDelayLevel。注意，messageDelayLevel是broker的属性，不属于某个topic。发消息时，设置]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解析——存储部分(6)RocketMQ主从同步原理相关的HAService和HAConnection]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/116055627</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/116055627</guid><author>szhlcy</author><pubDate>Tue, 11 May 2021 14:58:54 +0800</pubDate><description><![CDATA[文章目录引导
引导
 前面介绍了RocketMQ的CommitLog文件相关的类分析CommitLog物理日志相关的CommitLog类。其中有介绍到消息高可用刷盘的部分，也就是对应的handleHA方法，在这个方法中，如果设置了主从同步策略为同步，就会把对应的写入的消息的偏移量构造成一个GroupCommitRequest对象，然后丢到HAService类中进行处理，然后等待同步结果来进行后续操作，代码如下
   public void handleDiskFlush(AppendMessageResul]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解析——存储部分(5)IndexFile消息索引日志文件相关的`IndexService`类]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/115907118</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/115907118</guid><author>szhlcy</author><pubDate>Thu, 22 Apr 2021 15:05:57 +0800</pubDate><description><![CDATA[文章目录IndexFile文件讲解概述文件结构IndexFile文件相关的类IndexFile头文件相关的`IndexHead`类IndexFile读写相关的`IndexFile`类字段属性内部方法分析构造方法保存key对应index的`putKey`方法根据时间区间查询和key来进行查询消息的`selectPhyOffset`方法操作IndexFile文件集合的`IndexService`字段属性内部方法构造方法创建消息索引和保存的`buildIndex`根据消息以及时间范围查询消息集合的`queryOf]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解析——存储部分(4)ConsumeQueue逻辑日志文件相关的`ConsumeQueue`类]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/115146311</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/115146311</guid><author>szhlcy</author><pubDate>Thu, 08 Apr 2021 10:25:45 +0800</pubDate><description><![CDATA[文章目录

]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解析——存储部分(3)CommitLog物理日志相关的`CommitLog`类]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/114952442</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/114952442</guid><author>szhlcy</author><pubDate>Sun, 21 Mar 2021 14:36:44 +0800</pubDate><description><![CDATA[文章目录

]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解析——存储部分(2)对`MappedFile`进一步封装的`MappedFileQueue`]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/114541473</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/114541473</guid><author>szhlcy</author><pubDate>Wed, 17 Mar 2021 21:53:56 +0800</pubDate><description><![CDATA[文章目录

]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解析——存储部分(1)消息存储的底层`MappedFile`]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/114335608</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/114335608</guid><author>szhlcy</author><pubDate>Sat, 06 Mar 2021 14:39:37 +0800</pubDate><description><![CDATA[文章目录

]]></description><category></category></item><item><title><![CDATA[RocketMQ文件存储体系介绍]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/114333682</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/114333682</guid><author>szhlcy</author><pubDate>Sat, 06 Mar 2021 14:38:17 +0800</pubDate><description><![CDATA[文章目录

]]></description><category></category></item><item><title><![CDATA[spring源码------一个请求在spring中的处理过程（HandlerAdapter的选择跟请求的处理）代码及流程图说明 （4）]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/106188885</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/106188885</guid><author>szhlcy</author><pubDate>Wed, 20 May 2020 16:32:48 +0800</pubDate><description><![CDATA[文章目录前提1.`HandlerAdapter`对象2. 获取`HandlerAdapter`对象的`getHandlerAdapter`方法2.1 `getHandlerAdapter`方法分析2.1.1 容器中的`HandlerAdapter`对象以及实现的选择2.1.2 `RequestMappingHandlerAdapter`对`supports`的实现3. `HandlerAdapter`对请求处理的`hadler`方法3.1 逻辑交给子类实现的`hadler`方法3.2 `handleInte]]></description><category></category></item><item><title><![CDATA[spring源码------一个请求在spring中的处理过程（请求的处理链HandlerExecutionChain的选择）代码及流程图说明 （3）]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/105997489</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/105997489</guid><author>szhlcy</author><pubDate>Fri, 15 May 2020 15:05:51 +0800</pubDate><description><![CDATA[文章目录前提1. `HandlerExecutionChain`对象2 如何获取`HandlerExecutionChain`对象的2.1 进入到`AbstractHandlerMapping`的`getHandler`方法1.1 这个`handler`默认情况下的实际类型
前提
 前面已经讲过了从Servlet规范到FrameworkServlet，以及从FrameworkServlet规范到D...]]></description><category></category></item><item><title><![CDATA[spring源码------一个请求在spring中的处理过程（从FrameworkServlet规范到DispatcherServlet）代码及流程图说明 （2）]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/104859495</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/104859495</guid><author>szhlcy</author><pubDate>Fri, 08 May 2020 15:04:33 +0800</pubDate><description><![CDATA[文章目录
 前面的文章已经讲了从一个请求在spring中的处理过程（从Servlet规范到FrameworkServlet）代码及流程图说明接下来就是，从FrameworkServlet到DispatcherServlet的部分进行分析了。
 在FrameworkServlet的processRequest方法中，有调用doService方法的这个步骤。

...]]></description><category></category></item><item><title><![CDATA[spring源码------一个请求在spring中的处理过程（从Servlet规范到FrameworkServlet）代码及流程图说明 （1）]]></title><link>https://blog.youkuaiyun.com/szhlcy/article/details/103732644</link><guid>https://blog.youkuaiyun.com/szhlcy/article/details/103732644</guid><author>szhlcy</author><pubDate>Tue, 07 Jan 2020 13:43:13 +0800</pubDate><description><![CDATA[ 在网上有很多spring处理请求的流程图，但是都是比较简单的过程，都是围绕的DispatcherServlet进行说明的，这里我们从一个请求进入到spring中开始，到返回结果结束进行说明。

...]]></description><category></category></item></channel></rss>