<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[MQCloud的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/a417930422</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; a417930422]]></copyright><item><title><![CDATA[Dubbo服务自动Web化之路]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/155277294</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/155277294</guid><author>a417930422</author><pubDate>Wed, 26 Nov 2025 16:58:00 +0800</pubDate><description><![CDATA[支持输出请求日志，并支持输出指令和请求包大小传输包过大时打印部分信息，便于故障定位支持动态封禁客户端IP等等2 由于Dubbo依赖CP架构的Zookeeper作为服务注册和发现组件，无法保障高可用，并且某些低版本的Dubbo存在的BUG，会导致故障，综合了成本和效益后，提供了一套自动Web化的方案，目前各个项目已经陆续接入AutoWebService，反应良好。]]></description><category></category></item><item><title><![CDATA[JDK21虚拟线程僵死、调查及展望]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/148764038</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/148764038</guid><author>a417930422</author><pubDate>Thu, 19 Jun 2025 13:13:40 +0800</pubDate><description><![CDATA[说起虚拟线程，不得不提一下Java现有的线程模型，Java的线程模型基于操作系统线程（即“平台线程”）。每个线程与操作系统的调度器直接挂钩，线程的创建和销毁往往需要较大的开销。随着并发处理需求的激增，基于线程池和事件驱动的异步编程模型逐渐成为解决高并发问题的主流方式。线程池是通过维护一组线程来处理任务，减少了频繁创建和销毁线程的性能开销，但在高并发场景下仍可能存在瓶颈：随着微服务架构的普及以及对高并发处理能力的需求，很多业务开始采用Reactive编程模型，例如RxJava、Project Reactor等]]></description><category></category></item><item><title><![CDATA[RocketMQ5.x版本延迟消息被重放问题调查]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/131126969</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/131126969</guid><author>a417930422</author><pubDate>Fri, 09 Jun 2023 14:45:26 +0800</pubDate><description><![CDATA[RETRY%pugc-sofa-delete-video-flush-consumer这个topic在broker-cold-1上的消息量变成了34706，而消费量为17353，堆积量跟消费量相等。而在测试环境中，broker没多少数据，10秒内肯定已经启动完了，所以没有发现这个问题，而线上环境数据量一般都是上百G，通常启动比较慢。而发现堆积的topic都是之前消费有失败的，产生了重试消息的，而这些重试消息也是被消费完了的。但是在4.x的broker陆续升级至5.x的过程中，发现了延迟消息被重放的问题。]]></description><category></category></item><item><title><![CDATA[found A Illegal MagicCode]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/124838463</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/124838463</guid><author>a417930422</author><pubDate>Wed, 18 May 2022 11:11:26 +0800</pubDate><description><![CDATA[一、背景
主从模式部署的broker集群，主节点同步模式为：异步复制，刷盘方式为：异步刷盘。
在主节点宕机重启后，从节点的store.log里大量出现了如下日志，并且在不断的输出：
2022-05-11 14:00:55 WARN ReputMessageService - found a illegal magic code 0xe588a9e5
2022-05-11 14:00:55 WARN ReputMessageService - found a illegal magic code 0xe588]]></description><category></category></item><item><title><![CDATA[一条消息的一生]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/115689792</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/115689792</guid><author>a417930422</author><pubDate>Wed, 14 Apr 2021 09:12:06 +0800</pubDate><description><![CDATA[一、 消息的诞生
消息，可以理解为异构系统数据交流的载体。它可以简单到只是一个单词：“Hello”，或是复杂的对象。
每个生命的诞生都是一场考验，消息也不例外（这里的诞生是指消息成功发送并安全存储的过程）。


准备工作 - 序列化
由于RocketMQ是分布式的，其消息存储组件-broker承担着核心的存储工作。
也就是说消息需要跨网络传输，才能到达broker。
那么这就涉及到序列化工作了，何谓序列化？
序列化就是把对象转化为字节数组的过程。
为什么需要转换成字节数组呢？因为计算机存储和网络传输都只认字]]></description><category></category></item><item><title><![CDATA[ehcache之offheap部分重要类说明]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/105363892</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/105363892</guid><author>a417930422</author><pubDate>Tue, 07 Apr 2020 14:23:29 +0800</pubDate><description><![CDATA[PageSource
页源，负责页分配，默认是的实现是：UpfrontAllocatingPageSource-预交付的page源。
重要属性：


List buffers = new ArrayList&lt;&gt;();
存放分配好的内存块(chunk)，最大1G。


List&lt;PowerOfTwoAllocator&gt; sliceAllocators = new Arra...]]></description><category></category></item><item><title><![CDATA[ehcache之offheap]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/105363832</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/105363832</guid><author>a417930422</author><pubDate>Tue, 07 Apr 2020 14:21:09 +0800</pubDate><description><![CDATA[一、背景
offheap作为摆脱gc的本地缓存来使用，对于缓存大量数据和提升应用的性能大有裨益。
EHCache的offheap层直接使用了Terracotta-OSS开源的offheap-store作为底层实现。
但是offheap-store包含了一系列的算法和数据结构的设计和使用，很多地方借鉴了操作系统的知识，比如内存分页设计，时钟置换算法，内存分配等等，由此可见涉及到内存管理的都是比较复杂...]]></description><category></category></item><item><title><![CDATA[4.agent配置详解]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/103823770</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/103823770</guid><author>a417930422</author><pubDate>Fri, 03 Jan 2020 17:12:55 +0800</pubDate><description><![CDATA[所有的代码分析基于pinpoint 1.6.2
常用配置


profiler.sampling.enable=true
是否进行采样，true表示开启采样，如果关闭采样，将不进行trace


profiler.sampling.rate=100
采样率：表示每profiler.sampling.rate次请求，进行一次trace
例如，100表示1/100，1表示每次请求都trace


pr...]]></description><category></category></item><item><title><![CDATA[3.agent通信]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/103823710</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/103823710</guid><author>a417930422</author><pubDate>Fri, 03 Jan 2020 17:11:27 +0800</pubDate><description><![CDATA[所有的代码分析基于pinpoint 1.6.2
在上篇文章agent追踪已经分析到部分代码，这里进行一个详细的介绍。
一、入口####
在每次追踪完毕后，需要调用这个方法trace.traceBlockEnd(),此方法内部使用storage.store(spanEvent)来持久化SpanEvent。
这里使用的storage是由StorageFactory创建的，而StorageFactory...]]></description><category></category></item><item><title><![CDATA[2.agent追踪]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/103823464</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/103823464</guid><author>a417930422</author><pubDate>Fri, 03 Jan 2020 17:06:36 +0800</pubDate><description><![CDATA[所有的代码分析基于pinpoint 1.6.2
在上篇文章agent启动中最终分析到了织入部分，那么这里分析一下Trace部分。
一、入口
所有的trace的都从plugin进入，也就是说，如果对某个组件不支持的话，是不会进行trace的。
这里以jetty的plugin为例，当一个请求过来时，有类似如下拦截代码（后置拦截在后面）：
//前置拦截
public void before(Object...]]></description><category></category></item><item><title><![CDATA[1.agent启动]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/103823122</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/103823122</guid><author>a417930422</author><pubDate>Fri, 03 Jan 2020 16:48:51 +0800</pubDate><description><![CDATA[1 agent启动、加载、拦截织入
所有的代码分析基于pinpoint 1.6.2
pinpoint agent使用方式为-javaagent:$PINPOINT_PATH/pinpoint-bootstrap-{version}.jar，故从javaagent开始：
一、jvm会调用PinpointBootStrap.premain方法，此方法做了如下操作：####

将状态标志为启动（即同一j...]]></description><category></category></item><item><title><![CDATA[springboot多数据源支持]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/103823015</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/103823015</guid><author>a417930422</author><pubDate>Fri, 03 Jan 2020 16:42:36 +0800</pubDate><description><![CDATA[mybatis+多数据源+多连接池配置
网上大多配置都是mybatis+多数据源，并没有对应的多数据池，这里列举一个完整的例子，废话不多说，直接看代码
1.pom.xml
pom里只用增加一个mybatis整合spring-boot的依赖：
&lt;dependency&gt;
	&lt;groupId&gt;org.mybatis.spring.boot&lt;/groupId&gt;
	&lt...]]></description><category></category></item><item><title><![CDATA[性能大比拼]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/103822815</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/103822815</guid><author>a417930422</author><pubDate>Fri, 03 Jan 2020 16:35:32 +0800</pubDate><description><![CDATA[一、创建euraka集群


创建父项目，包含父pom文件和子项目，并增加依赖，主要是：spring-cloud-starter-parent
&lt;parent&gt;
    &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt;
    &lt;artifactId&gt;spring-cloud-starter-parent&lt...]]></description><category></category></item><item><title><![CDATA[FeignClient]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/103822147</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/103822147</guid><author>a417930422</author><pubDate>Fri, 03 Jan 2020 16:05:19 +0800</pubDate><description><![CDATA[一、介绍
一个普通的java接口，加上FeignClient注解，就可以完成整合hystrix，ribbon的http调用，使用上很是方便，也感觉很神奇，内部实现有必要探究一下。
二、问题

第一个问题：被@FeignClient标注的类，在spring中最终注入的是什么？
第二个问题：如何跟hystrix结合的？
第三个问题：如何跟ribbon结合的？
第四个问题：调用过程？

带着这四个问题，...]]></description><category></category></item><item><title><![CDATA[4.调用关系及超时说明]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/103821787</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/103821787</guid><author>a417930422</author><pubDate>Fri, 03 Jan 2020 15:51:28 +0800</pubDate><description><![CDATA[调用关系图类似如下：


User发起http请求，这里省略了controller的一层，只为表明RestTemplate的调用过程
Hystrix采用aop拦截的方式，对标注HystrixCommand的方法进行拦截
RestTemplate执行内部的拦截链，但是此拦截并非aop，只是普通的java连接链，类似于ServletFilter
Ribbon执行负载均衡，选择合适的server（包含...]]></description><category></category></item><item><title><![CDATA[3.结合ribbon]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/103821180</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/103821180</guid><author>a417930422</author><pubDate>Fri, 03 Jan 2020 15:22:48 +0800</pubDate><description><![CDATA[一、简介
ribbon是一个支持http，tcp客户端的负责均衡库。
二、引入
在这里，结合spring-boot的方式，在pom中添加如下依赖：
&lt;dependency&gt;
    &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt;
    &lt;artifactId&gt;spring-cloud-starter-rib...]]></description><category></category></item><item><title><![CDATA[2.结合hystrix]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/103820939</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/103820939</guid><author>a417930422</author><pubDate>Fri, 03 Jan 2020 15:13:14 +0800</pubDate><description><![CDATA[一、简介
当http服务接口响应超时或调用http服务发生异常时，需要结合hystrix进行降级。
二、引入
在这里，结合spring-boot的方式，在pom中添加如下依赖：
&lt;dependency&gt;
    &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt;
    &lt;artifactId&gt;spring-cl...]]></description><category></category></item><item><title><![CDATA[1.快速入门]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/103820659</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/103820659</guid><author>a417930422</author><pubDate>Fri, 03 Jan 2020 15:02:44 +0800</pubDate><description><![CDATA[一、简介
RestTemplate是spring提供的http客户端模版，类似JdbcTemplate，它是线程安全的，支持切换不同的http客户端，目前支持HttpClient-4.3, OKHttp3, 基于netty4实现的http客户端和基于java的URLConnection实现的http客户端。
二、引入
RestTemplate默认已经包含在spring-web中，其默认采用java...]]></description><category></category></item><item><title><![CDATA[11.ribbon区域亲和]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/103819986</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/103819986</guid><author>a417930422</author><pubDate>Fri, 03 Jan 2020 14:46:48 +0800</pubDate><description><![CDATA[一、简介
ribbon的区域亲和机制如下（需要说明一点，亲和性发生在过滤阶段，请参考负载均衡器中server列表是如何动态更新的部分）：

以上的图示及文字仅为举例说明，下面描述一下图上表示的流程：
首先，先看右下角的provider集群，因为会分别部署在北京，上海，广州三个地区，把这里地区看作zone，故有三个zone。
provider集群会把实例信息（ip+port+name等等）按照配置e...]]></description><category></category></item><item><title><![CDATA[10.重试]]></title><link>https://blog.youkuaiyun.com/a417930422/article/details/103818016</link><guid>https://blog.youkuaiyun.com/a417930422/article/details/103818016</guid><author>a417930422</author><pubDate>Fri, 03 Jan 2020 14:33:09 +0800</pubDate><description><![CDATA[&lt;!doctype html&gt;



tmp.md
一、简介
ribbon的重试是指consumer调用provider发生异常后，ribbon发起重试。
RestTemplate和Feign使用的重试机制不一样，下面分开进行说明。
二、RestTemplate重试
RestTemplate都是spring-cloud来做的，内部依赖于spring-retry，增加如下配置打开重试机制...]]></description><category></category></item></channel></rss>