<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>服务发现 on 追风笔记</title><link>https://4f0a9a3b.wangpeng.pages.dev/tags/%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0/</link><description>Recent content in 服务发现 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/%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0/index.xml" rel="self" type="application/rss+xml"/><item><title>服务注册与发现实战</title><link>https://4f0a9a3b.wangpeng.pages.dev/tech/dubbo/registry-discovery/</link><pubDate>Tue, 25 Aug 2026 00:00:00 +0000</pubDate><guid>https://4f0a9a3b.wangpeng.pages.dev/tech/dubbo/registry-discovery/</guid><description>&lt;p&gt;服务注册与发现是微服务架构的基石。Dubbo 将注册中心抽象为 &lt;code&gt;Registry&lt;/code&gt; 接口，因此可以在 ZooKeeper、Nacos、Consul 等实现之间平滑切换，业务代码无需改动。&lt;/p&gt;&#10;&lt;h2 id="注册中心接入"&gt;注册中心接入&#10;&lt;/h2&gt;&#10;&lt;p&gt;以 Nacos 为例，只需在配置中声明注册中心地址与协议即可。Dubbo 在启动时自动完成服务导出（export）与订阅（subscribe）：&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-404ebe0c-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="yaml" data-td-line-count="8"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-404ebe0c-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;dubbo&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="nt"&gt;application&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="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;order-service&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="nt"&gt;registry&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="nt"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;nacos://127.0.0.1:8848&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="nt"&gt;protocol&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="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;dubbo&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="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20880&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;p&gt;Provider 启动后会在注册中心写入自身元数据（接口、IP、端口、权重等）；Consumer 启动后订阅接口节点，拿到可用 Provider 列表并缓存到本地，后续调用直接走本地缓存，降低注册中心压力。&lt;/p&gt;&#10;&lt;h2 id="健康检查与上下线"&gt;健康检查与上下线&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;注册中心侧健康&lt;/strong&gt;：基于临时节点（ZooKeeper）或心跳（Nacos）感知进程存活，进程宕机时节点被摘除，Consumer 收到 &lt;code&gt;unregister&lt;/code&gt; 通知后剔除实例。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;应用侧优雅下线&lt;/strong&gt;：收到 &lt;code&gt;SIGTERM&lt;/code&gt; 时先取消注册、拒绝新请求、等待在途请求处理完毕再退出，避免调用方打到已下线的实例。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="不停机发布"&gt;不停机发布&#10;&lt;/h2&gt;&#10;&lt;p&gt;滚动发布时常见问题是「刚下线就又有流量」。推荐组合拳：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;下线前通过注册中心将实例权重置 0，使其不再接收新流量。&lt;/li&gt;&#10;&lt;li&gt;等待预热期与在途请求排空（如 10s）。&lt;/li&gt;&#10;&lt;li&gt;再执行实际进程关闭。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;配合 Consumer 端的失败重试与 &lt;code&gt;Cluster&lt;/code&gt; 容错（如 &lt;code&gt;Failover&lt;/code&gt;），可基本实现调用方无感知的版本迭代。需要注意：注册中心通知存在网络延迟，Consumer 本地缓存与重试机制是兜底关键。&lt;/p&gt;</description></item></channel></rss>