<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[m0_71749752的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/m0_71749752</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; m0_71749752]]></copyright><item><title><![CDATA[XXL-JOB Executor执行器端执行源码]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/158345309</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/158345309</guid><author>m0_71749752</author><pubDate>Tue, 24 Feb 2026 09:44:08 +0800</pubDate><description><![CDATA[在上一篇文章中，我们详细分析了调度中心的启动和调用算法，了解了任务是如何被发送到执行器的。今天，我们将视角切换到执行器端，看看当任务请求到达后，执行器是如何处理、排队、执行并最终回调给调度中心的。本文将继续深入源码，重点分析ExecutorBizImpl.run方法和JobThread的核心逻辑，并详细解读三种阻塞策略的实现原理。]]></description><category></category></item><item><title><![CDATA[XXL-JOB Admin端启动流程和调度算法源码]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/158037349</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/158037349</guid><author>m0_71749752</author><pubDate>Fri, 13 Feb 2026 10:58:45 +0800</pubDate><description><![CDATA[XXL-JOB 作为国内使用最广泛的轻量级分布式任务调度平台，其 Admin 端（调度中心） 的设计极具代表性。本文将深入到 XXL-JOB Admin 端的源码层面，完整梳理其启动流程与核心调度链路。从 XxlJobScheduler 的初始化，到 registryMonitorThread 的注册保活机制；从 慢任务探测与线程池隔离 的时间滑动窗口算法，到 十种路由策略（轮询、LRU、LFU、一致性 Hash 等）的底层实现，逐一拆解。]]></description><category></category></item><item><title><![CDATA[XXL-JOB执行器启动与注册源码分析]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/157805328</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/157805328</guid><author>m0_71749752</author><pubDate>Fri, 06 Feb 2026 14:20:25 +0800</pubDate><description><![CDATA[在分布式任务调度架构中，XXL-JOB 以其轻量级、易集成的特性被广泛应用于定时任务的管理与执行。本文将从源码层面深入分析其执行器（Executor）的启动机制，特别是通过 XxlJobSpringExecutor 这一 Spring Bean 的配置与初始化过程。我们将重点探讨其配置参数的实际作用、执行器的注册流程，以及底层 Netty 服务与调度中心（Admin）的通信机制，帮助开发者更好地理解其内部工作原理。]]></description><category></category></item><item><title><![CDATA[Spring Security 是如何注入 Tomcat Filter 链的 —— 启动与请求源码分析]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/157253190</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/157253190</guid><author>m0_71749752</author><pubDate>Thu, 22 Jan 2026 14:15:10 +0800</pubDate><description><![CDATA[在前面的文章中，我们已经从源码层面分析了 Tomcat 的启动流程、请求处理模型，以及 Spring Boot 是如何在嵌入式 Tomcat 场景下完成 Servlet 和 Filter 注册的。在此基础上，一个自然的问题是： 像 Spring Security 这样的安全框架，是如何介入 Tomcat 的 Filter 链，并在请求到达业务代码之前完成认证和鉴权的？]]></description><category></category></item><item><title><![CDATA[SpringBoot嵌入Tomcat注册Servlet、Filter流程]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/157060340</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/157060340</guid><author>m0_71749752</author><pubDate>Sat, 17 Jan 2026 10:20:08 +0800</pubDate><description><![CDATA[在前面的几篇文章中，我们已经从源码层面分析了 Tomcat 的启动流程和请求处理机制，包括 init / start 生命周期以及一次 HTTP 请求在容器内部的完整流转过程。但在实际项目中，越来越多的应用并不是以“独立 Tomcat + WAR 包”的形式部署，而是通过 Spring Boot 以嵌入式 Tomcat 的方式启动。这也带来了一个常见的疑问： 当没有 web.xml、没有手动部署应用时，Servlet 和 Filter 是在什么时候、又是如何被加载到 Tomcat 中的？]]></description><category></category></item><item><title><![CDATA[Tomcat源码分析三(Tomcat请求源码分析)]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/156946480</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/156946480</guid><author>m0_71749752</author><pubDate>Wed, 14 Jan 2026 15:12:10 +0800</pubDate><description><![CDATA[Request 是在什么时候创建的？org.apache.catalina.connector.Request 和 HttpServletRequest 之间是什么关系？请求是如何一步步交给应用层 Servlet 的？带着这些问题，本文将以 Tomcat 源码为线索，从 Connector 到 Container，梳理一次 HTTP 请求在 Tomcat 内部的完整执行路径,本文直接是从原始的请求Request开始往下分析,不会具体分析 请求是如果变成Request对象的，本文基于Tomcat9。]]></description><category></category></item><item><title><![CDATA[Tomcat源码分析二(Tomcat启动源码分析)]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/156726256</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/156726256</guid><author>m0_71749752</author><pubDate>Thu, 08 Jan 2026 15:35:18 +0800</pubDate><description><![CDATA[在日常使用 Tomcat 时，我们往往只关注它如何“跑起来”，却很少真正去理解 Tomcat 是如何一步一步完成启动的。本文从 Bootstrap 入口开始，到 Server、Service、Connector、Engine、Host、Context 的层层初始化，再到端口监听、请求接管，Tomcat 在启动过程中隐藏了大量精巧的设计与工程实践。]]></description><category></category></item><item><title><![CDATA[Tomcat源码分析一(Tomcat目录和配置文件说明)]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/156532135</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/156532135</guid><author>m0_71749752</author><pubDate>Sat, 03 Jan 2026 09:09:14 +0800</pubDate><description><![CDATA[Tomcat作为一款轻量级、开源且广泛使用的Java Web服务器和Servlet容器，其内部架构和配置机制对于Java Web开发者而言具有重要的学习价值。深入理解Tomcat的目录结构、配置文件以及类加载机制，不仅有助于我们更好地部署和管理Web应用，还能在遇到性能调优、安全配置、多环境部署等问题时提供清晰的解决思路。本文将从Tomcat的基础目录结构入手，逐步解析其核心配置文件的作用与配置细节，为后续深入分析Tomcat源码打下坚实的基础。]]></description><category></category></item><item><title><![CDATA[RocketMQ源码详解(Broker处理消费请求源码)]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/154874738</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/154874738</guid><author>m0_71749752</author><pubDate>Sat, 15 Nov 2025 14:20:32 +0800</pubDate><description><![CDATA[在分布式消息中间件RocketMQ中，Broker作为消息存储和转发的核心组件，其处理消费请求的机制直接影响着整个系统的性能和可靠性。理解Broker如何处理消费端的拉取请求，对于深入掌握RocketMQ的工作原理、性能调优以及问题排查都至关重要。本文将以RocketMQ 4.9.8版本为基础，深入分析Broker处理消费请求的源码实现。分层存储架构：通过CommitLog+ConsumeQueue的存储设计，实现了高效的随机读和顺序写。零拷贝优化。]]></description><category></category></item><item><title><![CDATA[RocketMQ源码详解(消费端启动流程)]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/153869798</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/153869798</guid><author>m0_71749752</author><pubDate>Sat, 25 Oct 2025 11:07:22 +0800</pubDate><description><![CDATA[在分布式消息系统中，消费端的启动流程往往决定了系统能否稳定、高效地处理消息。消费者不仅仅是简单地“连上 Broker 然后收消息”，而是涉及到客户端初始化、负载均衡、队列分配、消息拉取线程、消费服务线程等一系列环节。理解消费端的启动流程，有助于我们掌握 RocketMQ如何实现高可用的消费机制，以及在遇到消息堆积、消费延迟、负载不均等问题时，能快速定位到具体环节。在这篇文章中，我们就从源码角度梳理RocketMQ 消费端启动流程，看看一个消费者从start()]]></description><category></category></item><item><title><![CDATA[RocketMQ源码详解(Broker保存消息源码)]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/153722438</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/153722438</guid><author>m0_71749752</author><pubDate>Wed, 22 Oct 2025 10:23:43 +0800</pubDate><description><![CDATA[在分布式消息队列系统中，消息存储是其核心组成部分之一，它直接决定了消息的可靠性、系统的扩展性与性能。RocketMQ 作为一款广泛使用的高性能、高可靠性的消息队列中间件，凭借其灵活的架构和强大的功能，已成为大规模分布式系统中不可或缺的一部分。在本文中，我将重点解析 RocketMQ Broker 端的消息存储机制。我们将从消息的持久化过程存储结构设计性能优化以及存储与消费的高效协作。]]></description><category></category></item><item><title><![CDATA[RocketMQ源码(发送消息源码)]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/153048209</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/153048209</guid><author>m0_71749752</author><pubDate>Sat, 11 Oct 2025 14:32:45 +0800</pubDate><description><![CDATA[在分布式消息系统中，发送端（Producer）扮演着至关重要的角色。它不仅负责将消息高效、可靠地投递到 Broker，还需要在网络波动、Broker负载变化等复杂场景下保证消息的一致性和可达性。Apache RocketMQ 作为阿里巴巴开源并捐赠给 Apache 基金会的高性能消息中间件，其发送端实现有着极高的工程价值和设计考量。消息是如何从 Producer 组装、序列化并发往 Broker 的？发送过程中的重试、超时、路由更新是怎么实现的？同步发送、异步发送、单向发送底层的区别在哪里？]]></description><category></category></item><item><title><![CDATA[RocketMQ源码详解(Broker启动过程源码分析)]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/151151147</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/151151147</guid><author>m0_71749752</author><pubDate>Wed, 03 Sep 2025 15:49:52 +0800</pubDate><description><![CDATA[在分布式消息中间件RocketMQ的架构中，Broker扮演着核心的消息存储和转发枢纽角色。它直接承担了生产者的消息投递、消费者的消息拉取以及消息的持久化存储等核心职责，其稳定性和性能直接决定了整个消息集群的服务质量。本文将深入剖析RocketMQ 4.9.8版本中Broker服务的启动过程源码。我们将从启动脚本的入口开始，一步步揭开Broker如何初始化其核心控制器、如何加载配置与元数据、如何构建高性能的存储引擎和网络通信层，最终如何向NameServer完成注册，正式对外提供服务的完整过程。]]></description><category></category></item><item><title><![CDATA[RocketMQ源码详解(NameServer启动流程)]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/151013436</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/151013436</guid><author>m0_71749752</author><pubDate>Sat, 30 Aug 2025 10:52:23 +0800</pubDate><description><![CDATA[消息中间件的设计思路一般是基于主题订阅发布的机制，消息生产者(Producer)发送某一个主题到消息服务器，消息服务器负责将消息持久化存储，消息消费者(Consumer)订阅该兴趣的主题，消息服务器根据订阅信息(路由信息)将消息推送到消费者(Push模式)或者消费者主动向消息服务器拉去(Pull模式)，从而实现消息生产者与消息消费者解耦。为了避免消息服务器的单点故障导致的整个系统瘫痪，通常会部署多台消息服务器共同承担消息的存储。那消息生产者如何知道消息要发送到哪台消息服务器呢？]]></description><category></category></item><item><title><![CDATA[Netty的Http解码器源码分析]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/149787664</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/149787664</guid><author>m0_71749752</author><pubDate>Wed, 30 Jul 2025 21:36:49 +0800</pubDate><description><![CDATA[HTTP（HyperText Transfer Protocol，超文本传输协议）是一种基于请求-响应模型的无状态应用层协议，广泛用于客户端（如浏览器）和服务器之间的数据通信。基于 TCP 连接（默认端口 80 / HTTPS 默认端口 443）；无状态：每次请求都是独立的，服务器不会保留会话状态；文本格式：数据以文本形式组织，便于调试和阅读；支持多种方法：常见如 GET、POST、PUT、DELETE 等；本文围绕的源码展开，从字节流解析、请求行与请求头提取，请求体提取到组装为 Java 层级的。]]></description><category></category></item><item><title><![CDATA[Netty解码器在RocketMQ的应用]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/149705994</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/149705994</guid><author>m0_71749752</author><pubDate>Mon, 28 Jul 2025 08:10:08 +0800</pubDate><description><![CDATA[本文详细分析了Netty解码器在RocketMQ中的实际应用，重点围绕Broker注册到NameServer的流程展开，展示了自定义编解码逻辑在客户端与服务端之间的协作机制。1.Broker端编码流程使用NettyEncoder将RemotingCommand对象编码为字节流，通过fastEncodeHeader方法构建完整的帧结构（包括总长度、头部元数据、头部数据和可选的Body数据）。帧结构的设计清晰，通过ByteBuf的索引操作确保数据的正确性和完整性。2.NameServer端解码流程。]]></description><category></category></item><item><title><![CDATA[Netty 解码器深入分析：调用时机与继承关系]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/149560287</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/149560287</guid><author>m0_71749752</author><pubDate>Wed, 23 Jul 2025 09:04:25 +0800</pubDate><description><![CDATA[定义：解码器是 Netty 中用来从 ByteBuf 中提取消息内容的组件。作用：将字节流转化为 Java 对象，以供业务层处理。常见解码器：LengthFieldBasedFrameDecoder、LineBasedFrameDecoder、DelimiterBasedFrameDecoder等。类定义：LineBasedFrameDecoder是一个基于行分隔符的帧解码器，通常用于处理类似HTTP、IRC 等协议。构造方法：maxLength：设置消息的最大长度，用于防止无限制读取数据。]]></description><category></category></item><item><title><![CDATA[Netty服务端请求处理源码]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/149459726</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/149459726</guid><author>m0_71749752</author><pubDate>Sat, 19 Jul 2025 08:55:02 +0800</pubDate><description><![CDATA[自研事件循环模型（EventLoopGroup）非阻塞 IO + 任务队列并行执行（ioRatio）拆分任务类型（定时、尾部）优化调度可重建 Selector 规避空轮询 bugpipeline 解耦、责任链清晰这使得Netty在海量连接、高并发场景下依然保持稳定和灵活。]]></description><category></category></item><item><title><![CDATA[Netty主要组件和服务器启动源码分析]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/149305108</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/149305108</guid><author>m0_71749752</author><pubDate>Sun, 13 Jul 2025 08:11:18 +0800</pubDate><description><![CDATA[本文系统性地介绍了Netty框架中各个核心组件的作用与协作机制，深入剖析了诸如 Channel、EventLoop、ChannelPipeline、ChannelHandler、ByteBuf、Future/Promise 等关键类的职责与内部设计。同时，也详细分析了 Netty 中一些重要类的构造函数实现，解释了它们在框架初始化与运行过程中的关键角色。]]></description><category></category></item><item><title><![CDATA[CompletableFuture源码分析]]></title><link>https://blog.youkuaiyun.com/m0_71749752/article/details/149037586</link><guid>https://blog.youkuaiyun.com/m0_71749752/article/details/149037586</guid><author>m0_71749752</author><pubDate>Tue, 01 Jul 2025 08:02:37 +0800</pubDate><description><![CDATA[Java8 引入了CompletableFuture，大大增强了Future接口的能力，支持异步编排、链式调用和异常恢复, 它既是Future的实现类，也是接口的实现, 本文将深入分析其源码结构，了解其核心机制、线程模型和异常处理等设计亮点,本文基于JDK版本：JDK21(源码中已引入VarHandle替代Unsafe)。本文围绕CompletableFuture的核心方法如supplyAsync、thenApply、thenAccept、exceptionally、allOf、get 展开了系统源码分析。]]></description><category></category></item></channel></rss>