<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RPC on 追风笔记</title><link>https://4f0a9a3b.wangpeng.pages.dev/tags/rpc/</link><description>Recent content in RPC on 追风笔记</description><generator>Hugo</generator><language>zh</language><lastBuildDate>Tue, 25 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://4f0a9a3b.wangpeng.pages.dev/tags/rpc/index.xml" rel="self" type="application/rss+xml"/><item><title>Dubbo 总体架构与核心概念</title><link>https://4f0a9a3b.wangpeng.pages.dev/tech/dubbo/architecture/</link><pubDate>Tue, 25 Aug 2026 00:00:00 +0000</pubDate><guid>https://4f0a9a3b.wangpeng.pages.dev/tech/dubbo/architecture/</guid><description>&lt;p&gt;Dubbo 的核心竞争力在于清晰的职责分层与高度可插拔的扩展机制。理解分层与 Invoker 抽象，是读懂 Dubbo 源码与排查线上问题的基础。&lt;/p&gt;&#10;&lt;h2 id="分层架构"&gt;分层架构&#10;&lt;/h2&gt;&#10;&lt;p&gt;Dubbo 自顶向下可分为若干逻辑层，每一层只依赖其下层的接口而非实现：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;service / config 层&lt;/strong&gt;：面向用户的 API 与配置层，&lt;code&gt;@DubboService&lt;/code&gt;、&lt;code&gt;@DubboReference&lt;/code&gt; 以及 &lt;code&gt;ReferenceConfig&lt;/code&gt;、&lt;code&gt;ServiceConfig&lt;/code&gt; 在此落地。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;proxy 层&lt;/strong&gt;：生成服务接口的动态代理，让远程调用对业务代码透明。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;registry 层&lt;/strong&gt;：封装服务注册与订阅，感知 provider/consumer 的上线下线。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;cluster 层&lt;/strong&gt;：将多个 Invoker 封装为「集群 Invoker」，负责负载均衡、容错与路由。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;protocol 层&lt;/strong&gt;：封装 RPC 调用，是 Invoker 暴露与引用的核心。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;filter 链&lt;/strong&gt;：贯穿调用的拦截器，可用于日志、鉴权、限流等横切逻辑。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="invoker-与-spi"&gt;Invoker 与 SPI&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;Invoker&lt;/code&gt; 是 Dubbo 的通用领域模型，代表「一个可执行且可描述的调用」，抽象了本地、远程、集群等不同类型的调用。&lt;code&gt;URL&lt;/code&gt; 则作为贯穿各层的配置总线，几乎所有扩展点都通过 URL 传递参数。&lt;/p&gt;&#10;&lt;p&gt;Dubbo 的扩展机制基于改进版的 JDK SPI，通过 &lt;code&gt;@SPI&lt;/code&gt; 注解声明扩展接口，&lt;code&gt;@Adaptive&lt;/code&gt; 生成自适应实现，&lt;code&gt;META-INF/dubbo/&lt;/code&gt; 下以接口全限定名命名的文件登记实现类：&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-63727b2b-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="java" data-td-line-count="7"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-63727b2b-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@SPI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dubbo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;Protocol&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@Adaptive&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Exporter&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;export&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Invoker&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;invoker&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RpcException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@Adaptive&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Invoker&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;refer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RpcException&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="一次同步调用的链路"&gt;一次同步调用的链路&#10;&lt;/h2&gt;&#10;&lt;p&gt;当 consumer 发起一次同步调用时，请求大致经历以下步骤：&lt;/p&gt;</description></item></channel></rss>