blob: 992b78c51ae817a364bcc103029b730962c6cde6 [file] [log] [blame]
<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS content="INDEX, FOLLOW"><link rel=canonical href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/dubbo-spi/><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.121.2"><link rel="shortcut icon" type=image/png href=/imgs/favicon.png><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=manifest href=/manifest.webmanifest><title>扩展点开发指南 | Apache Dubbo</title><meta property="og:title" content="扩展点开发指南">
<meta property="og:description" content="本文介绍了 Dubbo SPI 的原理和实现细节"><meta property="og:type" content="article"><meta property="og:url" content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/dubbo-spi/"><meta property="article:section" content="overview"><meta property="article:modified_time" content="2024-03-19T23:02:26+08:00"><meta itemprop=name content="扩展点开发指南"><meta itemprop=description content="本文介绍了 Dubbo SPI 的原理和实现细节"><meta itemprop=dateModified content="2024-03-19T23:02:26+08:00"><meta itemprop=wordCount content="2530"><meta itemprop=keywords content><meta name=twitter:card content="summary"><meta name=twitter:title content="扩展点开发指南"><meta name=twitter:description content="本文介绍了 Dubbo SPI 的原理和实现细节"><script async src="https://www.googletagmanager.com/gtag/js?id=G-1TFHM5YBH0"></script><script>var doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-1TFHM5YBH0",{anonymize_ip:!1})}</script><link rel=preload href=/scss/main.min.579fd54dc4cf2a919ea0045f85430b8e5ba3a44795042eb92b436eb5a2892db2.css as=style><link href=/scss/main.min.579fd54dc4cf2a919ea0045f85430b8e5ba3a44795042eb92b436eb5a2892db2.css rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin=anonymous></script><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta name=theme-color content="#326ce5"><link rel=stylesheet href=/css/feature-states.css><meta name=description content="本文介绍了 Dubbo SPI 的原理和实现细节"><meta property="og:description" content="本文介绍了 Dubbo SPI 的原理和实现细节"><meta name=twitter:description content="本文介绍了 Dubbo SPI 的原理和实现细节"><meta property="og:url" content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/dubbo-spi/"><meta property="og:title" content="扩展点开发指南"><meta name=twitter:title content="扩展点开发指南"><meta name=twitter:image:alt content="Apache Dubbo"><meta property="og:type" content="article"><meta name=viewport content="width=device-width"><script async defer src=/js/github-buttons.js></script><link href=/css/community.css rel=stylesheet><link href=/css/contactus.css rel=stylesheet><link href=/css/language.css rel=stylesheet><script src=/js/script.js></script></head><body class="td-page td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand navbar-link flex-column flex-md-row td-navbar navbar-parent" data-auto-burger=primary><div class=container-navbar><a class=navbar-brand href=/zh-cn/><span class=navbar-logo></span><span class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="td-navbar-nav-scroll menu_navbar_list" id=main_navbar><ul class="navbar-nav mt-2 mt-lg-0"><li class="nav-item nav-item-line px-2 mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/overview/home/><span>文档</span></a></li><li class="nav-item dropdown d-lg-block community_after"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=true aria-expanded=false>联系社区</a><div class="dropdown-menu dropdown-menu-right" aria-labelledby=navbarDropdownMenuLink><a class=dropdown-item href=/zh-cn/blog/news/>新闻</a>
<a class=dropdown-item href=/zh-cn/overview/notices/>安全公告</a>
<a class=dropdown-item href=/zh-cn/contact/>贡献者指南</a></div></li><li class="nav-item nav-item-line px-2 mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/blog/><span>博客</span></a></li><li class="nav-item nav-item-line px-2 mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/download/><span>下载</span></a></li><li class="nav-item dropdown d-lg-block"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=true aria-expanded=false>生态</a><div class="dropdown-menu dropdown-menu-right" aria-labelledby=navbarDropdownMenuLink><a class=dropdown-item href=https://start.dubbo.apache.org/>代码生成</a>
<a class=dropdown-item href=/zh-cn/overview/mannual/control-plane/>可视化控制台</a>
<a class=dropdown-item href=/zh-cn/overview/what/core-features/service-mesh/>无代理网格</a>
<a class=dropdown-item href=https://github.com/apache/dubbo-samples>更多样例</a></div></li></ul></div><div class="td-navbar-nav-scroll menu_navbar_language_change"><ul class="navbar-nav mt-2 mt-lg-0 language_change_btn_pc"><li class="nav-item d-lg-block"><div class="nav nav-tabs languagetab-contain" id=languageTabs role=tablist><a class="languagetab-btn nav-item nav-link" href=/en/ role=tab aria-selected=false>EN
</a><a class="languagetab-btn nav-item nav-link active" href=/zh-cn/ role=tab aria-selected=true>中文</a></div><style>.languagetab-contain{width:135px;height:40px;border-radius:32px;background-color:#ebecef;padding:3px 6px}.languagetab-btn{width:60px!important;height:32px!important;border-radius:32px!important;text-decoration:none;display:flex;justify-content:center;align-items:center;font-size:12px!important}.languagetab-btn.active{background-color:#dddee4!important;border:0}</style></li><li class="nav-item d-lg-block"><div class="nav-item d-none d-lg-block"><div id=docsearch></div></div></li></ul><ul class="navbar-nav mt-lg-0 language_change_btn_mobile"><button type=button data-toggle=collapse data-target=#main_navbar aria-controls=main_navbar aria-expanded=false aria-label="Toggle navigation" style=border:0;margin-right:16px><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentcolor" class="bi bi-menu-app" viewBox="0 0 16 16"><path d="M0 1.5A1.5 1.5.0 011.5.0h2A1.5 1.5.0 015 1.5v2A1.5 1.5.0 013.5 5h-2A1.5 1.5.0 010 3.5zM1.5 1a.5.5.0 00-.5.5v2a.5.5.0 00.5.5h2a.5.5.0 00.5-.5v-2A.5.5.0 003.5 1zM0 8a2 2 0 012-2h12a2 2 0 012 2v5a2 2 0 01-2 2H2a2 2 0 01-2-2zm1 3v2a1 1 0 001 1h12a1 1 0 001-1v-2zm14-1V8a1 1 0 00-1-1H2A1 1 0 001 8v2zM2 8.5a.5.5.0 01.5-.5h9a.5.5.0 010 1h-9A.5.5.0 012 8.5m0 4a.5.5.0 01.5-.5h6a.5.5.0 010 1h-6a.5.5.0 01-.5-.5"/></svg></button><li class=nav-item><div class="nav-item d-block"><div id=docsearch></div></div></li></ul><a class="btn btn-dark ml-2 github-btn" href=https://github.com/apache/dubbo/>GITHUB</a></div></div></nav><div class="collapse navbar-collapse mobile_navbar_menu" id=main_navbar><ul class="navbar-nav mt-2 mt-lg-0 navbar-menus-list-mobile"><li class="nav-item nav-item-line mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/overview/home/><span>文档</span></a></li><li class="nav-item d-lg-block" style=position:relative><a class=nav-link data-toggle=collapse href=#collapseCommunity role=button aria-expanded=false aria-controls=collapseMenu>联系社区<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" fill="currentcolor" class="bi bi-caret-down-fill svg_arrow_down_community" viewBox="0 0 16 16"><path d="M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 01.753 1.659l-4.796 5.48a1 1 0 01-1.506.0z"/></svg></a><div class=collapse id=collapseCommunity><div class="card card-body" style="background-color:#f4f4f6;padding:10px 0;border:0"><a class=dropdown-item href=/zh-cn/blog/news/>新闻</a>
<a class=dropdown-item href=/zh-cn/overview/notices/>安全公告</a>
<a class=dropdown-item href=/zh-cn/contact/>贡献者指南</a></div></div></li><li class="nav-item nav-item-line mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/blog/><span>博客</span></a></li><li class="nav-item nav-item-line mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/download/><span>下载</span></a></li><li class="nav-item d-lg-block" style=position:relative><a class=nav-link data-toggle=collapse href=#collapseEcosystem role=button aria-expanded=false aria-controls=collapseMenu>生态<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" fill="currentcolor" class="bi bi-caret-down-fill svg_arrow_down_ecosystem" viewBox="0 0 16 16"><path d="M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 01.753 1.659l-4.796 5.48a1 1 0 01-1.506.0z"/></svg></a><div class=collapse id=collapseEcosystem><div class="card card-body" style="background-color:#f4f4f6;padding:10px 0;border:0"><a class=dropdown-item href=https://start.dubbo.apache.org/>代码生成</a>
<a class=dropdown-item href=/zh-cn/overview/mannual/control-plane/>可视化控制台</a>
<a class=dropdown-item href=/zh-cn/overview/what/core-features/service-mesh/>无代理网格</a>
<a class=dropdown-item href=https://github.com/apache/dubbo-samples>更多样例</a></div></div></li></ul><style>.navbar-menus-list-mobile{a { color: #121316 !important; }}</style></div><style>.navbar-parent{justify-content:center;background-color:#f4f4f6!important}.container-navbar{width:100%;display:flex;justify-content:space-between;align-items:center;@media only screen and (min-width:768px){width: 85.125rem;}}.github-btn{width:120px;height:40px;border-radius:32px;padding-top:11px;color:#f4f4f6;font-size:12px;line-height:16px;font-weight:400;display:none;@media only screen and (min-width:768px){display: inline-block;}}.menu_navbar_list{display:none;@media only screen and (min-width:768px){display: flex;}}.menu_navbar_language_change{.language_change_btn_pc { display: none; } .language_change_btn_mobile { display: flex; } @media only screen and (min-width: 768px) { .language_change_btn_mobile { display: none; } .language_change_btn_pc { display: flex; } }}.community_after{position:relative;padding-right:8px}.community_after::after{content:"";position:absolute;top:50%;transform:translateY(-50%);left:100%;width:1px;height:16px;background-color:#8fa8a6}.mobile_navbar_menu{top:64px;position:fixed;z-index:99999999;background:#f4f4f6;width:100vw;padding-left:20px;padding-bottom:20px}</style><div lang=zh-cn id=announcement style="background-color:#3371e3;color:#fff;background-image:linear-gradient(90deg,#0096ff 0%,#33beff 100%)"><aside><div class=announcement-main data-nosnippet><h4><img alt=announcement-apache-dubbo src=/imgs/contacts/wechat-account.jpg style=float:right;width:10%;height:auto>
<a href=/zh-cn/blog/2024/09/11/apache-dubbo-3.3-全新发布triple-x-领衔开启微服务通信新时代/>Apache Dubbo 3.3 全新版本</a> <em>正式上线!</em></h4><p>在 Apache Dubbo 突破 4w Star 之际,Apache Dubbo 团队正式宣布,Dubbo 3.3 正式发布!作为全球领先的开源微服务框架,Dubbo 一直致力于为开发者提供高性能、可扩展且灵活的分布式服务解决方案。此次发布的 Dubbo 3.3,通过 Triple X 的全新升级,突破了以往局限,实现了对南北向与东西向流量的全面支持,并提升了对云原生架构的友好性。<br><br>欢迎扫描右侧二维码关注 Apache Dubbo 微信公众号!</p></div></aside></div><section class="header-hero text-white pb-0 light-text"></section></header><div class="container-fluid td-outer"><div class=td-main><div class="row flex-md-nowrap"><div class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none"><script>$(function(){$("#td-section-nav a").removeClass("active"),$("#td-section-nav #m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturedubbo-spi").addClass("active"),$("#td-section-nav #m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturedubbo-spi-li span").addClass("td-sidebar-nav-active-item"),$("#td-section-nav #m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturedubbo-spi").parents("li").addClass("active-path"),$("#td-section-nav li.active-path").addClass("show"),$("#td-section-nav li.active-path").children("input").prop("checked",!0),$("#td-section-nav #m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturedubbo-spi-li").siblings("li").addClass("show"),$("#td-section-nav #m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturedubbo-spi-li").children("ul").children("li").addClass("show"),$("#td-sidebar-menu").toggleClass("d-none")})</script><div id=td-sidebar-menu class="td-sidebar__inner d-none"><div id=content-mobile><form class="td-sidebar__search d-flex align-items-center"><div id=docsearch></div><button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav foldable-nav" id=td-section-nav><ul class="td-sidebar-nav__section pr-md-3 ul-0"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverview-li><ul class=ul-1><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewwhat-li><input type=checkbox id=m-zh-cnoverviewwhat-check>
<label for=m-zh-cnoverviewwhat-check><a href=/zh-cn/overview/what/ title="Dubbo 介绍" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewwhat><span>介绍</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatoverview-li><input type=checkbox id=m-zh-cnoverviewwhatoverview-check>
<label for=m-zh-cnoverviewwhatoverview-check><a href=/zh-cn/overview/what/overview/ title="了解 Dubbo 核心概念和架构" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatoverview><span>概念与架构</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatxyz-difference-li><input type=checkbox id=m-zh-cnoverviewwhatxyz-difference-check>
<label for=m-zh-cnoverviewwhatxyz-difference-check><a href=/zh-cn/overview/what/xyz-difference/ title="与 gRPC、Spring Cloud、Istio 的关系" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatxyz-difference><span>与 gRPC、Spring Cloud、Istio 关系</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewwhatcore-features-li><input type=checkbox id=m-zh-cnoverviewwhatcore-features-check>
<label for=m-zh-cnoverviewwhatcore-features-check><a href=/zh-cn/overview/what/core-features/ title="Dubbo 核心特性" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewwhatcore-features><span>功能</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featuresservice-definition-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featuresservice-definition-check>
<label for=m-zh-cnoverviewwhatcore-featuresservice-definition-check><a href=/zh-cn/overview/what/core-features/service-definition/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featuresservice-definition><span>微服务开发</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featuresservice-discovery-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featuresservice-discovery-check>
<label for=m-zh-cnoverviewwhatcore-featuresservice-discovery-check><a href=/zh-cn/overview/what/core-features/service-discovery/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featuresservice-discovery><span>服务发现</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featuresload-balance-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featuresload-balance-check>
<label for=m-zh-cnoverviewwhatcore-featuresload-balance-check><a href=/zh-cn/overview/what/core-features/load-balance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featuresload-balance><span>负载均衡</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewwhatcore-featurestraffic-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featurestraffic-check>
<label for=m-zh-cnoverviewwhatcore-featurestraffic-check><a href=/zh-cn/overview/what/core-features/traffic/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewwhatcore-featurestraffic><span>流量管控</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featurestrafficintroduction-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featurestrafficintroduction-check>
<label for=m-zh-cnoverviewwhatcore-featurestrafficintroduction-check><a href=/zh-cn/overview/what/core-features/traffic/introduction/ title="Dubbo 路由(router)机制及其如何实现流量管控介绍" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featurestrafficintroduction><span>路由机制介绍</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featurestrafficcondition-rule-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featurestrafficcondition-rule-check>
<label for=m-zh-cnoverviewwhatcore-featurestrafficcondition-rule-check><a href=/zh-cn/overview/what/core-features/traffic/condition-rule/ title=条件路由规则 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featurestrafficcondition-rule><span>条件路由</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featurestraffictag-rule-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featurestraffictag-rule-check>
<label for=m-zh-cnoverviewwhatcore-featurestraffictag-rule-check><a href=/zh-cn/overview/what/core-features/traffic/tag-rule/ title=标签路由规则 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featurestraffictag-rule><span>标签路由</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featurestrafficscript-rule-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featurestrafficscript-rule-check>
<label for=m-zh-cnoverviewwhatcore-featurestrafficscript-rule-check><a href=/zh-cn/overview/what/core-features/traffic/script-rule/ title=脚本路由规则 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featurestrafficscript-rule><span>脚本路由</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featurestrafficconfiguration-rule-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featurestrafficconfiguration-rule-check>
<label for=m-zh-cnoverviewwhatcore-featurestrafficconfiguration-rule-check><a href=/zh-cn/overview/what/core-features/traffic/configuration-rule/ title=动态配置规则 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featurestrafficconfiguration-rule><span>动态配置</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featurestrafficcircuit-breaking-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featurestrafficcircuit-breaking-check>
<label for=m-zh-cnoverviewwhatcore-featurestrafficcircuit-breaking-check><a href=/zh-cn/overview/what/core-features/traffic/circuit-breaking/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featurestrafficcircuit-breaking><span>限流 & 熔断</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featurestrafficmesh-rule-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featurestrafficmesh-rule-check>
<label for=m-zh-cnoverviewwhatcore-featurestrafficmesh-rule-check><a href=/zh-cn/overview/what/core-features/traffic/mesh-rule/ title="Mesh 路由规则" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featurestrafficmesh-rule><span>Mesh 路由</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featuresprotocols-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featuresprotocols-check>
<label for=m-zh-cnoverviewwhatcore-featuresprotocols-check><a href=/zh-cn/overview/what/core-features/protocols/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featuresprotocols><span>通信协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featuresextensibility-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featuresextensibility-check>
<label for=m-zh-cnoverviewwhatcore-featuresextensibility-check><a href=/zh-cn/overview/what/core-features/extensibility/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featuresextensibility><span>扩展适配</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featuresobservability-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featuresobservability-check>
<label for=m-zh-cnoverviewwhatcore-featuresobservability-check><a href=/zh-cn/overview/what/core-features/observability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featuresobservability><span>观测服务</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featuressecurity-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featuressecurity-check>
<label for=m-zh-cnoverviewwhatcore-featuressecurity-check><a href=/zh-cn/overview/what/core-features/security/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featuressecurity><span>认证鉴权</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featuresservice-mesh-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featuresservice-mesh-check>
<label for=m-zh-cnoverviewwhatcore-featuresservice-mesh-check><a href=/zh-cn/overview/what/core-features/service-mesh/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featuresservice-mesh><span>服务网格</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featuresecosystem-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featuresecosystem-check>
<label for=m-zh-cnoverviewwhatcore-featuresecosystem-check><a href=/zh-cn/overview/what/core-features/ecosystem/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featuresecosystem><span>微服务生态</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatcore-featuresmore-li><input type=checkbox id=m-zh-cnoverviewwhatcore-featuresmore-check>
<label for=m-zh-cnoverviewwhatcore-featuresmore-check><a href=/zh-cn/overview/what/core-features/more/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatcore-featuresmore><span>更多高级功能</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewwhatadvantages-li><input type=checkbox id=m-zh-cnoverviewwhatadvantages-check>
<label for=m-zh-cnoverviewwhatadvantages-check><a href=/zh-cn/overview/what/advantages/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewwhatadvantages><span>核心优势</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatadvantagesusability-li><input type=checkbox id=m-zh-cnoverviewwhatadvantagesusability-check>
<label for=m-zh-cnoverviewwhatadvantagesusability-check><a href=/zh-cn/overview/what/advantages/usability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatadvantagesusability><span>快速易用</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatadvantagesperformance-li><input type=checkbox id=m-zh-cnoverviewwhatadvantagesperformance-check>
<label for=m-zh-cnoverviewwhatadvantagesperformance-check><a href=/zh-cn/overview/what/advantages/performance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatadvantagesperformance><span>超高性能</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatadvantagesgovernance-li><input type=checkbox id=m-zh-cnoverviewwhatadvantagesgovernance-check>
<label for=m-zh-cnoverviewwhatadvantagesgovernance-check><a href=/zh-cn/overview/what/advantages/governance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatadvantagesgovernance><span>服务治理</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewwhatadvantagesproduction-ready-li><input type=checkbox id=m-zh-cnoverviewwhatadvantagesproduction-ready-check>
<label for=m-zh-cnoverviewwhatadvantagesproduction-ready-check><a href=/zh-cn/overview/what/advantages/production-ready/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewwhatadvantagesproduction-ready><span>生产环境验证</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-zh-cnoverviewmannual-li><input type=checkbox id=m-zh-cnoverviewmannual-check checked>
<label for=m-zh-cnoverviewmannual-check><a href=/zh-cn/overview/mannual/ title="Dubbo SDK 用户手册" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannual><span>用户手册</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdk-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdk-check>
<label for=m-zh-cnoverviewmannualjava-sdk-check><a href=/zh-cn/overview/mannual/java-sdk/ title="Java SDK 手册" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdk><span>Java SDK</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkversions-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkversions-check>
<label for=m-zh-cnoverviewmannualjava-sdkversions-check><a href=/zh-cn/overview/mannual/java-sdk/versions/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkversions><span>版本信息</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkquick-start-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkquick-start-check>
<label for=m-zh-cnoverviewmannualjava-sdkquick-start-check><a href=/zh-cn/overview/mannual/java-sdk/quick-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkquick-start><span>快速入门</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkquick-startstarter-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkquick-startstarter-check>
<label for=m-zh-cnoverviewmannualjava-sdkquick-startstarter-check><a href=/zh-cn/overview/mannual/java-sdk/quick-start/starter/ title="创建基于Spring Boot的微服务应用" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkquick-startstarter><span>创建基于Spring Boot的Dubbo应用</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktasks-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasks-check>
<label for=m-zh-cnoverviewmannualjava-sdktasks-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/ title="跟随示例任务学习 Dubbo" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktasks><span>使用教程</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktasksdevelop-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksdevelop-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksdevelop-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/develop/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktasksdevelop><span>快速创建应用</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksdevelopspringboot-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksdevelopspringboot-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksdevelopspringboot-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/develop/springboot/ title="Spring Boot" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksdevelopspringboot><span>Spring Boot Starter</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksdevelopapi-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksdevelopapi-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksdevelopapi-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/develop/api/ title="使用原生 API 开发 Dubbo 应用" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksdevelopapi><span>纯 API 开发模式</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktasksprotocols-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksprotocols-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksprotocols-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/protocols/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktasksprotocols><span>通信协议</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksprotocolsprotocol-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksprotocolsprotocol-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksprotocolsprotocol-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/protocols/protocol/ title="Dubbo 支持的 RPC 通信协议" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksprotocolsprotocol><span>选择 RPC 协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksprotocolsdubbo-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksprotocolsdubbo-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksprotocolsdubbo-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/protocols/dubbo/ title="基于 TCP 的 RPC 通信协议 - dubbo" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksprotocolsdubbo><span>dubbo协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktasksprotocolstriple-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksprotocolstriple-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksprotocolstriple-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/protocols/triple/ title="基于 HTTP1/2 的 RPC 通信协议 - triple" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktasksprotocolstriple><span>triple协议</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksprotocolstripleinterface-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksprotocolstripleinterface-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksprotocolstripleinterface-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/protocols/triple/interface/ title="使用 Java 接口方式开发 triple 通信服务" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksprotocolstripleinterface><span>Java接口方式</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksprotocolstripleidl-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksprotocolstripleidl-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksprotocolstripleidl-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/protocols/triple/idl/ title="使用 Protobuf(IDL) 开发 triple 通信服务" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksprotocolstripleidl><span>Protobuf(IDL)方式</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksprotocolstriplestreaming-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksprotocolstriplestreaming-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksprotocolstriplestreaming-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/protocols/triple/streaming/ title="Streaming 通信" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksprotocolstriplestreaming><span>Streaming流式通信</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksprotocolstriplegrpc-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksprotocolstriplegrpc-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksprotocolstriplegrpc-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/protocols/triple/grpc/ title="使用 Dubbo 开发 gRPC 服务" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksprotocolstriplegrpc><span>发布/调用标准gRPC服务</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksprotocolsrest-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksprotocolsrest-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksprotocolsrest-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/protocols/rest/ title="发布 REST 风格的服务" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksprotocolsrest><span>rest协议</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktasksservice-discovery-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksservice-discovery-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksservice-discovery-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/service-discovery/ title=注册中心、服务发现与负载均衡 class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktasksservice-discovery><span>服务发现</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksservice-discoveryregistry-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksservice-discoveryregistry-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksservice-discoveryregistry-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/service-discovery/registry/ title=服务发现的工作方式、基本使用方法与配置细节 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksservice-discoveryregistry><span>服务发现</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksservice-discoveryloadbalance-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksservice-discoveryloadbalance-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksservice-discoveryloadbalance-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/service-discovery/loadbalance/ title=负载均衡策略与配置细节 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksservice-discoveryloadbalance><span>负载均衡</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksservice-discoveryzookeeper-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksservice-discoveryzookeeper-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksservice-discoveryzookeeper-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/service-discovery/zookeeper/ title="使用 Zookeeper 作为注册中心实现自动服务发现" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksservice-discoveryzookeeper><span>使用Zookeeper注册中心</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksservice-discoverynacos-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksservice-discoverynacos-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksservice-discoverynacos-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/service-discovery/nacos/ title="使用 Nacos 作为注册中心实现自动服务发现" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksservice-discoverynacos><span>使用Nacos注册中心</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksservice-discoverykubernetes-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksservice-discoverykubernetes-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksservice-discoverykubernetes-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/service-discovery/kubernetes/ title="基于 Kubernetes Service 的服务发现" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksservice-discoverykubernetes><span>使用Kubernetes注册中心</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktasksobservability-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksobservability-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksobservability-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/observability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktasksobservability><span>观测服务</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksobservabilityconsole-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksobservabilityconsole-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksobservabilityconsole-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/observability/console/ title=可观测性 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksobservabilityconsole><span>控制台</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksobservabilityprometheus-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksobservabilityprometheus-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksobservabilityprometheus-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/observability/prometheus/ title="从 Prometheus 查询 Metrics 监控指标" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksobservabilityprometheus><span>Prometheus</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksobservabilitygrafana-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksobservabilitygrafana-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksobservabilitygrafana-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/observability/grafana/ title="使用 Grafana 可视化查看集群 Metrics 指标" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksobservabilitygrafana><span>Grafana</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksobservabilitylogging-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksobservabilitylogging-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksobservabilitylogging-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/observability/logging/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksobservabilitylogging><span>日志管理</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracing-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracing-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracing-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/observability/tracing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracing><span>全链路追踪</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingtracing-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingtracing-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingtracing-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/observability/tracing/tracing/ title=全链路追踪使用与实现说明 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingtracing><span>链路追踪</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingotlp-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingotlp-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingotlp-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/observability/tracing/otlp/ title=OTlp class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingotlp><span>OpenTelemetry</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingzipkin-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingzipkin-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingzipkin-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/observability/tracing/zipkin/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingzipkin><span>Zipkin</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingskywalking-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingskywalking-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingskywalking-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/observability/tracing/skywalking/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksobservabilitytracingskywalking><span>Skywalking</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktasksdeploy-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksdeploy-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksdeploy-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/deploy/ title=打包并部署应用 class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktasksdeploy><span>打包部署</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksdeploydeploy-on-vm-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksdeploydeploy-on-vm-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksdeploydeploy-on-vm-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/deploy/deploy-on-vm/ title="传统基于 Zookeeper、Nacos 的注册中心部署架构,部署 Dubbo 应用到虚拟机环境" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksdeploydeploy-on-vm><span>传统注册中心</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksdeploydeploy-on-kubernetes-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksdeploydeploy-on-kubernetes-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksdeploydeploy-on-kubernetes-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/deploy/deploy-on-kubernetes/ title="部署 Dubbo 应用到 Kubernetes 环境" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksdeploydeploy-on-kubernetes><span>Kubernetes</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksdeploydeploy-on-kubernetes-service-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksdeploydeploy-on-kubernetes-service-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksdeploydeploy-on-kubernetes-service-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/deploy/deploy-on-kubernetes-service/ title="部署 Dubbo 应用到虚拟机环境" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksdeploydeploy-on-kubernetes-service><span>服务网格</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-management-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstraffic-management-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstraffic-management-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/traffic-management/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-management><span>流量管控</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementarchitecture-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementarchitecture-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementarchitecture-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/traffic-management/architecture/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementarchitecture><span>示例应用架构</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementtimeout-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementtimeout-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementtimeout-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/traffic-management/timeout/ title=动态调整服务超时时间 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementtimeout><span>调整超时时间</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementretry-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementretry-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementretry-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/traffic-management/retry/ title=通过重试提高服务调用成功率 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementretry><span>服务重试</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementaccesslog-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementaccesslog-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementaccesslog-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/traffic-management/accesslog/ title=通过动态开启访问日志跟踪服务调用情况 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementaccesslog><span>访问日志</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementregion-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementregion-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementregion-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/traffic-management/region/ title=同机房/区域优先 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementregion><span>同区域优先</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementisolation-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementisolation-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementisolation-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/traffic-management/isolation/ title=通过标签实现流量隔离环境(灰度、多套开发环境等) class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementisolation><span>环境隔离</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementroute-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementroute-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementroute-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/traffic-management/route/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementroute><span>基于条件的流量路由</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementarguments-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementarguments-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementarguments-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/traffic-management/arguments/ title=根据请求参数引导流量分布 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementarguments><span>参数路由</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementweight-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementweight-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementweight-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/traffic-management/weight/ title=基于权重值的比例流量转发 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementweight><span>权重比例</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementmock-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementmock-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementmock-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/traffic-management/mock/ title=在大促之前对弱依赖调用进行服务降级 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementmock><span>服务降级</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementhost-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementhost-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementhost-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/traffic-management/host/ title="将流量点对点引导到一台机器 (如排查问题)" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstraffic-managementhost><span>固定机器导流</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktasksframework-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframework-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframework-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/ title="Dubbo 作为轻量 RPC 框架解决组件通信问题" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktasksframework><span>RPC框架</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworklightweight-rpc-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworklightweight-rpc-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworklightweight-rpc-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/lightweight-rpc/ title="使用轻量的 Java SDK 开发 RPC Server 和 Client" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworklightweight-rpc><span>Server与Client</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkthreading-model-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkthreading-model-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkthreading-model-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/threading-model/ title=消费端线程模型,提供者端线程模型 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkthreading-model><span>线程模型</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkfilter-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkfilter-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkfilter-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/filter/ title="使用 Filter 过滤器动态拦截请求(request)或响应(response)" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkfilter><span>Filter拦截器</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworktimeout-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworktimeout-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworktimeout-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/timeout/ title="为服务调用指定 timeout 超时时间" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworktimeout><span>超时时间</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkasync-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkasync-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkasync-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/async/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkasync><span>异步调用</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkversion_group-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkversion_group-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkversion_group-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/version_group/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkversion_group><span>版本与分组</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkattachment-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkattachment-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkattachment-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/attachment/ title=调用链路传递隐式参数 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkattachment><span>传递附加参数</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkfault-tolerent-strategy-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkfault-tolerent-strategy-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkfault-tolerent-strategy-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/fault-tolerent-strategy/ title=集群容错 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkfault-tolerent-strategy><span>集群容错(重试)</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkgeneric-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkgeneric-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkgeneric-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/generic/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkgeneric><span>泛化调用</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmore-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmore-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmore-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/ title="Dubbo 作为轻量 RPC 框架解决组件通信问题" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmore><span>更多特性</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoregeneric-impl-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoregeneric-impl-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmoregeneric-impl-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/generic-impl/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoregeneric-impl><span>泛化实现</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreecho-service-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreecho-service-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreecho-service-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/echo-service/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreecho-service><span>回声测试</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorespecify-ip-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorespecify-ip-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmorespecify-ip-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/specify-ip/ title="动态指定 IP 调用" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorespecify-ip><span>运行时动态指定 IP 调用</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreexplicit-target-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreexplicit-target-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreexplicit-target-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/explicit-target/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreexplicit-target><span>直连提供者</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreevents-notify-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreevents-notify-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreevents-notify-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/events-notify/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreevents-notify><span>调用触发事件通知</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorecallback-parameter-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorecallback-parameter-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmorecallback-parameter-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/callback-parameter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorecallback-parameter><span>服务端对客户端进行回调</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorelocal-mock-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorelocal-mock-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmorelocal-mock-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/local-mock/ title=服务讲解(本地伪装) class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorelocal-mock><span>服务降级</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorelocal-stub-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorelocal-stub-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmorelocal-stub-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/local-stub/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorelocal-stub><span>本地存根</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorelocal-call-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorelocal-call-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmorelocal-call-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/local-call/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorelocal-call><span>本地调用</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreconcurrency-control-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreconcurrency-control-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreconcurrency-control-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/concurrency-control/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreconcurrency-control><span>并发控制</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreconfig-connections-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreconfig-connections-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreconfig-connections-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/config-connections/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreconfig-connections><span>连接控制</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreset-host-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreset-host-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreset-host-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/set-host/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreset-host><span>主机配置</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreresult-cache-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreresult-cache-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreresult-cache-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/result-cache/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreresult-cache><span>调用结果缓存</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorereference-config-cache-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorereference-config-cache-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmorereference-config-cache-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/reference-config-cache/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorereference-config-cache><span>服务引用配置对象缓存</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorerouter-snapshot-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorerouter-snapshot-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmorerouter-snapshot-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/router-snapshot/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorerouter-snapshot><span>路由状态采集</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreparameter-validation-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreparameter-validation-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreparameter-validation-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/parameter-validation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmoreparameter-validation><span>参数校验</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorereactive-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorereactive-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksframeworkmorereactive-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/framework/more/reactive/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksframeworkmorereactive><span>响应式编程</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktasksextensibility-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksextensibility-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksextensibility-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/extensibility/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktasksextensibility><span>自定义扩展</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksextensibilityspi-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksextensibilityspi-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksextensibilityspi-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/extensibility/spi/ title="自定义 SPI 扩展的基本步骤" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksextensibilityspi><span>如何自定义扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksextensibilityfilter-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksextensibilityfilter-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksextensibilityfilter-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/extensibility/filter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksextensibilityfilter><span>Filter</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksextensibilityprotocol-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksextensibilityprotocol-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksextensibilityprotocol-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/extensibility/protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksextensibilityprotocol><span>Protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksextensibilityregistry-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksextensibilityregistry-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksextensibilityregistry-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/extensibility/registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksextensibilityregistry><span>Registry</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksextensibilityrouter-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksextensibilityrouter-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksextensibilityrouter-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/extensibility/router/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksextensibilityrouter><span>Router</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktaskstrasaction-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstrasaction-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstrasaction-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/trasaction/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktaskstrasaction><span>分布式事务</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstrasactiondistributed-transaction-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstrasactiondistributed-transaction-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstrasactiondistributed-transaction-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/trasaction/distributed-transaction/ title="使用 Seata 支持分布式事务" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstrasactiondistributed-transaction><span>使用Seata让Dubbo支持分布式事务</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktasksgateway-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksgateway-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksgateway-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/gateway/ title=HTTP流量接入 class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktasksgateway><span>HTTP网关接入</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksgatewayarchitecture-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksgatewayarchitecture-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksgatewayarchitecture-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/gateway/architecture/ title="前端 http 流量接入 Dubbo 后端微服务体系的基础架构" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksgatewayarchitecture><span>基本架构</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksgatewaydubbo-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksgatewaydubbo-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksgatewaydubbo-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/gateway/dubbo/ title="通过网关将 http 流量接入 Dubbo 后端服务" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksgatewaydubbo><span>dubbo协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksgatewaytriple-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksgatewaytriple-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksgatewaytriple-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/gateway/triple/ title="通过网关将 http 流量接入 Dubbo 后端服务" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksgatewaytriple><span>triple协议</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktasksrate-limit-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksrate-limit-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksrate-limit-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/rate-limit/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktasksrate-limit><span>限流降级</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksrate-limitsentinel-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksrate-limitsentinel-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksrate-limitsentinel-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/rate-limit/sentinel/ title="使用 Sentinel 应对突发流量,保护您的应用" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksrate-limitsentinel><span>Sentinel限流</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksrate-limitconcurrency-control-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksrate-limitconcurrency-control-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksrate-limitconcurrency-control-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/rate-limit/concurrency-control/ title="Dubbo 框架内置的并发控制策略" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksrate-limitconcurrency-control><span>框架内置限流</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktasksrate-limitadaptive-concurrency-control-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktasksrate-limitadaptive-concurrency-control-check>
<label for=m-zh-cnoverviewmannualjava-sdktasksrate-limitadaptive-concurrency-control-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/rate-limit/adaptive-concurrency-control/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktasksrate-limitadaptive-concurrency-control><span>自适应限流</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktaskssecurity-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskssecurity-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskssecurity-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/security/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktaskssecurity><span>安全策略</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskssecurityclass-check-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskssecurityclass-check-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskssecurityclass-check-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/security/class-check/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskssecurityclass-check><span>类检查机制</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskssecuritytoken-authorization-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskssecuritytoken-authorization-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskssecuritytoken-authorization-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/security/token-authorization/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskssecuritytoken-authorization><span>权限控制</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskssecuritytls-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskssecuritytls-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskssecuritytls-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/security/tls/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskssecuritytls><span>TLS支持</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskssecurityauth-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskssecurityauth-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskssecurityauth-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/security/auth/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskssecurityauth><span>服务鉴权</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdktaskstroubleshoot-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstroubleshoot-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstroubleshoot-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/troubleshoot/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdktaskstroubleshoot><span>故障排查</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstroubleshootprofiler-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstroubleshootprofiler-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstroubleshootprofiler-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/troubleshoot/profiler/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstroubleshootprofiler><span>请求耗时采样</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstroubleshootstart-failed-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstroubleshootstart-failed-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstroubleshootstart-failed-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/troubleshoot/start-failed/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstroubleshootstart-failed><span>应用启动失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstroubleshootno-provider-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstroubleshootno-provider-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstroubleshootno-provider-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/troubleshoot/no-provider/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstroubleshootno-provider><span>地址找不到异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdktaskstroubleshootrequest-failed-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdktaskstroubleshootrequest-failed-check>
<label for=m-zh-cnoverviewmannualjava-sdktaskstroubleshootrequest-failed-check><a href=/zh-cn/overview/mannual/java-sdk/tasks/troubleshoot/request-failed/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdktaskstroubleshootrequest-failed><span>请求成功率低</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manual-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manual-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manual-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manual><span>参考手册</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/config/ title=配置手册 class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig><span>配置说明</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigspring-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigspring-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualconfigspring-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/config/spring/ title=配置手册 class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigspring><span>Spring</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigspringspring-boot-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigspringspring-boot-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualconfigspringspring-boot-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/config/spring/spring-boot/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigspringspring-boot><span>Spring Boot</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigspringxml-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigspringxml-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualconfigspringxml-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/config/spring/xml/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigspringxml><span>XML 配置</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigapi-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigapi-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualconfigapi-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/config/api/ title=配置手册 class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigapi><span>原生API</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigapiapi-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigapiapi-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualconfigapiapi-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/config/api/api/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigapiapi><span>API 配置</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigmaven-plugin-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigmaven-plugin-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualconfigmaven-plugin-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/config/maven-plugin/ title="Dubbo Maven Plugin 的配置方式" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigmaven-plugin><span>Maven Plugin 配置</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigprinciple-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigprinciple-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualconfigprinciple-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/config/principle/ title=配置工作原理 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigprinciple><span>配置加载流程</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigproperties-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigproperties-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualconfigproperties-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/config/properties/ title=配置项参考手册 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfigproperties><span>配置项手册</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualserialization-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualserialization-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualserialization-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/ title=序列化 class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualserialization><span>序列化协议</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationserialization-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationserialization-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualserializationserialization-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/serialization/ title="Dubbo 序列化机制介绍" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationserialization><span>序列化概述</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationtriple-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationtriple-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualserializationtriple-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/triple/ title="triple 协议支持的序列化" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationtriple><span>triple</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationtripleprotobuf-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationtripleprotobuf-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualserializationtripleprotobuf-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/triple/protobuf/ title="如何在 triple 协议场景下使用 protobuf、json 序列化" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationtripleprotobuf><span>Protobuf</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationtriplewrapper-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationtriplewrapper-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualserializationtriplewrapper-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/triple/wrapper/ title="基于 Java 接口模式开发 triple 服务时,底层的序列化机制实现" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationtriplewrapper><span>Protobuf Wrapper</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbo-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbo-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbo-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/dubbo/ title="dubbo 协议支持的序列化" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbo><span>dubbo</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbohessian-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbohessian-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbohessian-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/dubbo/hessian/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbohessian><span>Hessian</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbofastjson2-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbofastjson2-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbofastjson2-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/dubbo/fastjson2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbofastjson2><span>Fastjson2</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbofastjson-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbofastjson-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbofastjson-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/dubbo/fastjson/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbofastjson><span>Fastjson</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubboavro-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubboavro-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubboavro-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/dubbo/avro/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubboavro><span>Avro</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbofst-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbofst-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbofst-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/dubbo/fst/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbofst><span>FST</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbogson-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbogson-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbogson-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/dubbo/gson/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbogson><span>Gson</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbokryo-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbokryo-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbokryo-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/dubbo/kryo/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbokryo><span>Kryo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbomsgpack-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbomsgpack-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbomsgpack-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/dubbo/msgpack/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationdubbomsgpack><span>MessagePack</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationserialization-upgrade-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationserialization-upgrade-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualserializationserialization-upgrade-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/serialization/serialization-upgrade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualserializationserialization-upgrade><span>序列化协议升级</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocol-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocol-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualprotocol-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/ title="RPC 协议" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocol><span>RPC协议</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoloverview-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoloverview-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoloverview-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/overview/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoloverview><span>协议概述</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoltriple-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoltriple-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoltriple-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/ title=协议概述 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoltriple><span>triple</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoldubbo-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoldubbo-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoldubbo-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/dubbo/ title=Dubbo协议 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoldubbo><span>dubbo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolmulti-protocols-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolmulti-protocols-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolmulti-protocols-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/multi-protocols/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolmulti-protocols><span>多协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoltriple-33-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoltriple-33-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoltriple-33-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple-3.3/ title="Tripe 3.3 新特性" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoltriple-33><span>tripe-3.3新特性</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoltripe-rest-manual-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoltripe-rest-manual-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoltripe-rest-manual-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/tripe-rest-manual/ title="Triple Rest 用户手册" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocoltripe-rest-manual><span>triple-rest用户手册</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothers-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothers-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothers-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/others/ title="Dubbo 提供的更多 RPC 扩展协议实现" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothers><span>扩展实现</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersredis-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersredis-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersredis-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/others/redis/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersredis><span>Redis 协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersthrift-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersthrift-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersthrift-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/others/thrift/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersthrift><span>Thrift 协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersmemcached-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersmemcached-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersmemcached-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/others/memcached/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersmemcached><span>Memcached 协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersv32_rest_protocol_design-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersv32_rest_protocol_design-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersv32_rest_protocol_design-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/others/v3.2_rest_protocol_design/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersv32_rest_protocol_design><span>Rest 协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersrmi-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersrmi-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersrmi-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/others/rmi/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothersrmi><span>Rmi协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothershessian-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothershessian-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothershessian-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/others/hessian/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolothershessian><span>Hessian协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolotherswebservice-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolotherswebservice-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolotherswebservice-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/others/webservice/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualprotocolotherswebservice><span>Webservice协议</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistry-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualregistry-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualregistry-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/registry/ title=注册中心、服务发现与负载均衡 class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistry><span>注册中心与服务发现</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryoverview-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryoverview-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualregistryoverview-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/registry/overview/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryoverview><span>注册中心概述</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryzookeeper-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryzookeeper-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualregistryzookeeper-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/registry/zookeeper/ title="使用 Zookeeper 作为注册中心实现自动服务发现" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryzookeeper><span>zookeeper</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistrynacos-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualregistrynacos-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualregistrynacos-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/registry/nacos/ title="使用 Nacos 作为注册中心实现自动服务发现" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistrynacos><span>nacos</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistrymultiple-registry-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualregistrymultiple-registry-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualregistrymultiple-registry-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/registry/multiple-registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistrymultiple-registry><span>多注册中心</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryservice-discovery-application-vs-interface-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryservice-discovery-application-vs-interface-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualregistryservice-discovery-application-vs-interface-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/registry/service-discovery-application-vs-interface/ title="应用级服务发现 vs 接口级服务发现" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryservice-discovery-application-vs-interface><span>应用级vs接口级</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothers-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothers-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothers-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/registry/others/ title=注册中心、服务发现与负载均衡 class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothers><span>扩展实现</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersmulticast-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersmulticast-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersmulticast-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/registry/others/multicast/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersmulticast><span>Multicast</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersconsul-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersconsul-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersconsul-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/registry/others/consul/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersconsul><span>Consul</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersetcd-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersetcd-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersetcd-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/registry/others/etcd/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersetcd><span>Etcd</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersredis-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersredis-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersredis-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/registry/others/redis/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualregistryothersredis><span>Redis</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-center-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-center-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-center-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/config-center/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-center><span>配置中心</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerintroduction-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerintroduction-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerintroduction-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/config-center/introduction/ title=配置中心 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerintroduction><span>配置中心概述</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerzookeeper-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerzookeeper-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerzookeeper-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/config-center/zookeeper/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerzookeeper><span>Zookeeper</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centernacos-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centernacos-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centernacos-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/config-center/nacos/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centernacos><span>Nacos</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerapollo-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerapollo-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerapollo-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/config-center/apollo/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerapollo><span>Apollo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerothers-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerothers-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerothers-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/config-center/others/ title=更多配置中心扩展实现 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualconfig-centerothers><span>扩展实现</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-center-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-center-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-center-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/metadata-center/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-center><span>元数据中心</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centeroverview-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centeroverview-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centeroverview-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/metadata-center/overview/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centeroverview><span>元数据中心概述</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centernacos-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centernacos-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centernacos-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/metadata-center/nacos/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centernacos><span>Nacos</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centerzookeeper-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centerzookeeper-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centerzookeeper-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/metadata-center/zookeeper/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centerzookeeper><span>Zookeeper</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centerothers-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centerothers-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centerothers-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/metadata-center/others/ title=更多元数据中心扩展实现 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualmetadata-centerothers><span>扩展实现</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualperformance-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualperformance-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualperformance-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/performance/ title=性能参考手册 class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualperformance><span>性能Benchmark</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualperformancerpc-benchmarking-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualperformancerpc-benchmarking-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualperformancerpc-benchmarking-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/performance/rpc-benchmarking/ title="RPC 协议 Triple&amp;Dubbo 基准测试" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualperformancerpc-benchmarking><span>RPC 基准</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualperformancepage-benchmarking-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualperformancepage-benchmarking-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualperformancepage-benchmarking-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/performance/page-benchmarking/ title="RPC 基准测试 控制台" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualperformancepage-benchmarking><span>RPC 控制台</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualperformancebenchmarking-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualperformancebenchmarking-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualperformancebenchmarking-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/performance/benchmarking/ title=应用级服务发现基准测试 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualperformancebenchmarking><span>应用级服务发现基准</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualgraalvm-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualgraalvm-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualgraalvm-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/graalvm/ title="Dubbo 集成 Graalvm参考手册" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualgraalvm><span>GraalVM</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualgraalvmsupport-graalvm-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualgraalvmsupport-graalvm-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualgraalvmsupport-graalvm-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/graalvm/support-graalvm/ title="Dubbo AOT -- 如何使用 GraalVM Native Image 实现 Dubbo 应用静态化" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualgraalvmsupport-graalvm><span>支持 GraalVM Native Image</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspi-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspi-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspi-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/ title="SPI 插件扩展点使用手册" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualspi><span>SPI插件扩展点</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspioverview-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspioverview-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspioverview-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/overview/ title="Dubbo SPI 概述" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspioverview><span>SPI 概述</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspispi-list-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspispi-list-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspispi-list-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/spi-list/ title="Dubbo SPI 插件及详情" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspispi-list><span>SPI 插件列表</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescription-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescription-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescription-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/ title="Dubbo SPI 插件定义及使用详细介绍" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescription><span>部分重点SPI使用说明</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionprotocol-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionprotocol-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionprotocol-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionprotocol><span>协议扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionfilter-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionfilter-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionfilter-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/filter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionfilter><span>调用拦截扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioninvoker-listener-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioninvoker-listener-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioninvoker-listener-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/invoker-listener/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioninvoker-listener><span>引用监听扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionexporter-listener-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionexporter-listener-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionexporter-listener-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/exporter-listener/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionexporter-listener><span>暴露监听扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncluster-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncluster-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncluster-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/cluster/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncluster><span>集群扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionrouter-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionrouter-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionrouter-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/router/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionrouter><span>路由扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionload-balance-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionload-balance-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionload-balance-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/load-balance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionload-balance><span>负载均衡扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionmerger-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionmerger-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionmerger-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/merger/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionmerger><span>合并结果扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionregistry-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionregistry-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionregistry-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionregistry><span>注册中心扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionmonitor-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionmonitor-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionmonitor-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/monitor/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionmonitor><span>监控中心扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionextension-factory-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionextension-factory-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionextension-factory-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/extension-factory/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionextension-factory><span>扩展点加载扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionliveness-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionliveness-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionliveness-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/liveness/ title="Liveness 存活探针" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionliveness><span>存活探针</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionproxy-factory-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionproxy-factory-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionproxy-factory-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/proxy-factory/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionproxy-factory><span>动态代理扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionreadiness-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionreadiness-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionreadiness-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/readiness/ title="Readiness 就绪探针" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionreadiness><span>就绪探针</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionstartup-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionstartup-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionstartup-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/startup/ title="Startup 启动探针" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionstartup><span>启动探针</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncompiler-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncompiler-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncompiler-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/compiler/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncompiler><span>编译器扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionconfig-center-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionconfig-center-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionconfig-center-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/config-center/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionconfig-center><span>配置中心扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionmetadata-report-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionmetadata-report-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionmetadata-report-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/metadata-report/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionmetadata-report><span>元数据中心扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptiondispatcher-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptiondispatcher-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptiondispatcher-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/dispatcher/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptiondispatcher><span>消息派发扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionthreadpool-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionthreadpool-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionthreadpool-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/threadpool/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionthreadpool><span>线程池扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionserialize-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionserialize-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionserialize-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/serialize/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionserialize><span>序列化扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionremoting-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionremoting-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionremoting-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/remoting/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionremoting><span>网络传输扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionexchanger-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionexchanger-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionexchanger-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/exchanger/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionexchanger><span>信息交换扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionpage-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionpage-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionpage-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/page/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionpage><span>对等网络节点组网器扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionnetworker-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionnetworker-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionnetworker-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/networker/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionnetworker><span>组网扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptiontelnet-handler-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptiontelnet-handler-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptiontelnet-handler-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/telnet-handler/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptiontelnet-handler><span>Telnet 命令扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionstatus-checker-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionstatus-checker-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionstatus-checker-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/status-checker/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionstatus-checker><span>状态检查扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncontainer-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncontainer-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncontainer-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/container/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncontainer><span>容器扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncache-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncache-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncache-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/cache/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptioncache><span>缓存扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionvalidation-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionvalidation-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionvalidation-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/validation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionvalidation><span>验证扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionlogger-adapter-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionlogger-adapter-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionlogger-adapter-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/logger-adapter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionlogger-adapter><span>日志适配扩展</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionqos-permission-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionqos-permission-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionqos-permission-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/qos-permission/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualspidescriptionqos-permission><span>QoS匿名访问权限验证扩展</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualqos-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualqos-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualqos-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/qos/ title="QOS 操作手册" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualqos><span>单机运维命令(QOS)</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosoverview-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualqosoverview-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualqosoverview-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/qos/overview/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosoverview><span>QOS 概述</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosqos-list-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualqosqos-list-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualqosqos-list-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/qos/qos-list/ title="QoS 命令列表,命令大全" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosqos-list><span>命令列表</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroduction-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroduction-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroduction-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/qos/introduction/ title=包含对每个命令的使用方法、效果的详细说明 class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroduction><span>部分命令详解</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductioncommand-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductioncommand-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductioncommand-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/qos/introduction/command/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductioncommand><span>基础命令手册</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionservice-management-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionservice-management-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionservice-management-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/qos/introduction/service-management/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionservice-management><span>服务管理命令</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionprobe-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionprobe-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionprobe-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/qos/introduction/probe/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionprobe><span>框架状态命令</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionlogger-management-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionlogger-management-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionlogger-management-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/qos/introduction/logger-management/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionlogger-management><span>日志框架运行时管理</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionprofiler-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionprofiler-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionprofiler-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/qos/introduction/profiler/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionprofiler><span>性能采样命令</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionrouter-snapshot-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionrouter-snapshot-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionrouter-snapshot-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/qos/introduction/router-snapshot/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionrouter-snapshot><span>路由状态命令</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionsecurity-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionsecurity-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionsecurity-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/qos/introduction/security/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductionsecurity><span>序列化安全审计</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductiondefault_metrics-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductiondefault_metrics-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductiondefault_metrics-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/qos/introduction/default_metrics/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualqosintroductiondefault_metrics><span>默认监控指标命令</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualrouting-rule-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualrouting-rule-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualrouting-rule-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/routing-rule/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualrouting-rule><span>路由规则</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecture-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecture-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecture-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecture><span>源码架构</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-protocol-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-protocol-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-protocol-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/multi-protocol/ title=单端口多协议实现原理解析 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-protocol><span>单端口多协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturecode-architecture-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturecode-architecture-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturecode-architecture-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/code-architecture/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturecode-architecture><span>代码架构</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitectureservice-invocation-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitectureservice-invocation-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualarchitectureservice-invocation-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/service-invocation/ title=服务调用扩展点 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitectureservice-invocation><span>服务调用</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instance-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instance-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instance-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/multi-instance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instance><span>多实例部署</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instancemulti-instance-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instancemulti-instance-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instancemulti-instance-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/multi-instance/multi-instance/ title=多实例部署的设计理念 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instancemulti-instance><span>多实例设计理念</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instancemodel-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instancemodel-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instancemodel-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/multi-instance/model/ title=多实例相关的模型与概念定义 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instancemodel><span>模型与概念</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instanceworkflow-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instanceworkflow-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instanceworkflow-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/multi-instance/workflow/ title=多实例启动流程与模块依赖关系 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instanceworkflow><span>启动流程与模块依赖关系</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instancedevelop-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instancedevelop-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instancedevelop-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/multi-instance/develop/ title="多实例让源码开发更复杂,学习如何正确的扩展 SPI 实现" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturemulti-instancedevelop><span>如果在源码中操作实例</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturedubbo-spi-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturedubbo-spi-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturedubbo-spi-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/dubbo-spi/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualarchitecturedubbo-spi><span>扩展点开发指南</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq><span>错误码 FAQ</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq0-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq0-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq0-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq0><span>0 - Common 层</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq01-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq01-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq01-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq01><span>0-1 - 线程池资源枯竭</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq02-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq02-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq02-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq02><span>0-2 - 非法属性值</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq03-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq03-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq03-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq03><span>0-3 - 无法访问缓存路径</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq04-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq04-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq04-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq04><span>0-4 - 缓存条目超限</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq05-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq05-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq05-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq05><span>0-5 - 缓存文件大小超限</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq06-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq06-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq06-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq06><span>0-6 - 线程中断异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq07-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq07-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq07-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq07><span>0-7 - 未找到反射类</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq08-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq08-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq08-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq08><span>0-8 - 反射失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq09-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq09-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq09-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/9/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq09><span>0-9 - 通知事件失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq010-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq010-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq010-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/10/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq010><span>0-10 - 当前调用不在支持</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq011-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq011-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq011-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/11/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq011><span>0-11 - 服务停止失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq012-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq012-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq012-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/12/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq012><span>0-12 - 未知异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq013-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq013-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq013-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/13/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq013><span>0-13 - 指标收集器发生异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq014-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq014-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq014-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/14/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq014><span>0-14 - 监控异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq015-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq015-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq015-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/15/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq015><span>0-15 - 加载扩展类时发生异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq016-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq016-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq016-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/16/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq016><span>0-16 - 没有可用的执行器</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq017-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq017-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq017-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/17/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq017><span>0-17 - 执行器在关闭时发生未知异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq018-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq018-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq018-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/18/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq018><span>0-18 - 线程池执行器被错误使用</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq019-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq019-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq019-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/19/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq019><span>0-19 - 处理任务时发生异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq020-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq020-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq020-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/20/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq020><span>0-20 - 存储堆栈信息时发生异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq021-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq021-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq021-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/21/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq021><span>0-21 - 构建的实例过多</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq022-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq022-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq022-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/22/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq022><span>0-22 - 输入输出流异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq023-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq023-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq023-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/23/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq023><span>0-23 - 序列化数据转换异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq024-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq024-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq024-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/24/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq024><span>0-24 - 覆盖字段值异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq025-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq025-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq025-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/25/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq025><span>0-25 - 加载映射错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq026-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq026-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq026-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/26/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq026><span>0-26 - 元数据发布服务时的警告信息</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq027-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq027-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq027-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/27/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq027><span>0-27 - 线程池隔离配置异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq028-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq028-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq028-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/28/ title="0-28 - 操作了可能会引起危险的行为" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq028><span>0-28 - 危险的行为</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq029-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq029-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq029-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/29/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq029><span>0-29 - 未找到Tracer依赖</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq099-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq099-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq099-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/0/99/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq099><span>0-99 - 调用了过时 (Deprecated) 的方法</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq1-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq1-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq1-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq1><span>1 - 注册中心层</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq11-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq11-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq11-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq11><span>1-1 - 地址非法</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq13-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq13-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq13-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq13><span>1-3 - URL 销毁失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq14-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq14-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq14-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq14><span>1-4 - 空地址</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq15-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq15-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq15-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq15><span>1-5 - 接收到没有任何参数的 URL</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq16-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq16-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq16-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq16><span>1-6 - 清空URL缓存出错</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq17-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq17-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq17-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/7/ title="1-7 - 通知注册事件失败" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq17><span>1-7 - 读写注册中心服务缓存失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq18-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq18-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq18-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq18><span>1-8 - 销毁时注销(取消订阅)地址失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq19-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq19-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq19-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/9/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq19><span>1-9 - 读写注册中心服务缓存失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq110-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq110-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq110-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/10/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq110><span>1-10 - 读写注册中心服务缓存失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq111-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq111-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq111-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/11/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq111><span>1-11 - 注册服务实例创建失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq112-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq112-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq112-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/12/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq112><span>1-12 - “注册服务” 的实例均已销毁</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq113-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq113-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq113-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/13/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq113><span>1-13 - 执行重试任务失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq114-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq114-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq114-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/14/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq114><span>1-14 - 动态配置识别失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq115-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq115-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq115-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/15/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq115><span>1-15 - 销毁服务失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq116-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq116-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq116-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/16/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq116><span>1-16 - 存在不支持的类别</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq117-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq117-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq117-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/17/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq117><span>1-17 - metadata Server 失效</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq118-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq118-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq118-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/18/ title="1-18 - 未提供 metadata service 端口" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq118><span>1-18 - 未提供 metadata service 端口</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq119-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq119-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq119-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/19/ title="1-19 - K8S监听异常" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq119><span>1-19 - K8S监听异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq120-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq120-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq120-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/20/ title="1-20 - K8S Pod不存在" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq120><span>1-20 - K8S Pod不存在</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq121-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq121-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq121-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/21/ title="1-21 - K8S 无可用服务" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq121><span>1-21 - K8S 无可用服务</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq122-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq122-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq122-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/22/ title="1-22 - K8S 配置地址错误" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq122><span>1-22 - K8S 配置地址错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq126-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq126-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq126-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/26/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq126><span>1-26 - xDS 证书生成失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq127-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq127-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq127-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/27/ title="1-27 - K8S监听异常" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq127><span>1-27 - K8S监听异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq128-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq128-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq128-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/28/ title="1-28 - xDS 存根错误" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq128><span>1-28 - xDS 存根错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq129-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq129-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq129-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/29/ title="1-29 - xDS 读取文件失败" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq129><span>1-29 - xDS 读取文件失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq130-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq130-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq130-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/30/ title="1-30 - xDS 请求失败" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq130><span>1-30 - xDS 请求失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq131-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq131-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq131-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/31/ title="1-31 - xDS 响应失败" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq131><span>1-31 - xDS 响应失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq132-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq132-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq132-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/32/ title="1-32 - xDS Channel 初始化失败" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq132><span>1-32 - xDS Channel 初始化失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq133-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq133-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq133-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/33/ title="1-33 - xDS 服务发现初始化失败" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq133><span>1-33 - xDS 服务发现初始化失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq134-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq134-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq134-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/34/ title="1-34 - xDS 解析发生错误" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq134><span>1-34 - xDS 解析发生错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq135-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq135-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq135-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/35/ title="1-35 - ZK 异常" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq135><span>1-35 - ZK 异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq136-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq136-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq136-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/36/ title="1-36 - 未知异常" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq136><span>1-36 - 未知异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq137-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq137-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq137-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/37/ title="1-37 - Nacos 异常" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq137><span>1-37 - Nacos 异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq138-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq138-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq138-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/38/ title="1-38 - Socket 连接异常" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq138><span>1-38 - Socket 连接异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq139-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq139-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq139-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/39/ title="1-39 - 获取元数据失败" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq139><span>1-39 - 获取元数据失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq140-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq140-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq140-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/40/ title="1-40 - 路由等待时间过长" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq140><span>1-40 - 路由等待时间过长</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq141-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq141-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq141-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/41/ title="1-41 - Istio 异常" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq141><span>1-41 - Istio 异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq142-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq142-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq142-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/1/42/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq142><span>1-42 - Nacos 存在低版本服务</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq2-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq2-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq2-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq2><span>2 - 路由层</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq21-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq21-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq21-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq21><span>2-1 - 路由选址执行失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq22-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq22-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq22-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq22><span>2-2 - 没有可用的 Provider(地址找不到)</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq23-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq23-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq23-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq23><span>2-3 - 路由关闭失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq24-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq24-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq24-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq24><span>2-4 - Merger接口加载失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq25-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq25-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq25-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq25><span>2-5 - 筛选提供方失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq26-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq26-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq26-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq26><span>2-6 - 条件路由筛选提供方列表为空</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq27-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq27-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq27-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq27><span>2-7 - 条件路由执行异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq28-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq28-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq28-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq28><span>2-8 - 提供方返回异常响应</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq29-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq29-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq29-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/9/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq29><span>2-9 - 增加超时检查任务失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq210-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq210-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq210-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/10/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq210><span>2-10 - 调用服务提供方失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq211-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq211-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq211-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/11/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq211><span>2-11 - 标签路由规则不合法</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq212-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq212-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq212-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/12/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq212><span>2-12 - 标签路由获取提供方应用名为空</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq213-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq213-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq213-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/13/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq213><span>2-13 - 接收加载mesh的路由规则失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq214-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq214-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq214-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/14/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq214><span>2-14 - 脚本路由执行失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq215-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq215-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq215-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/15/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq215><span>2-15 - 路由规则解析失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq216-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq216-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq216-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/16/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq216><span>2-16 - 请求重试多次失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq217-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq217-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq217-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/17/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq217><span>2-17 - mock请求失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq218-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq218-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq218-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/18/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq218><span>2-18 - mesh路由规则未被监听</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq219-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq219-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq219-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/19/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq219><span>2-19 - 异步请求失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq220-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq220-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq220-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/2/20/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq220><span>2-20 - 获取分组结果合并时失败</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq3-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq3-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq3-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq3><span>3 - 动态代理层</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq31-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq31-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq31-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/3/1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq31><span>3-1 - 将地址转换成 Invoker 失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq32-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq32-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq32-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/3/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq32><span>3-2 - 发布或推送服务失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq33-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq33-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq33-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/3/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq33><span>3-3 - 通过Javassist生成字节码失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq34-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq34-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq34-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/3/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq34><span>3-4 - 客户端发送请求超时</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq35-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq35-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq35-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/3/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq35><span>3-5 - 异步响应出现异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq36-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq36-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq36-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/3/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq36><span>3-6 - 代理执行服务发生异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq37-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq37-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq37-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/3/7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq37><span>3-7 - 服务端响应结果超时</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq38-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq38-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq38-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/3/8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq38><span>3-8 - 代理失败</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq4-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq4-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq4-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq4><span>4 - 协议层</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq41-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq41-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq41-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq41><span>4-1 - 不支持的协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq42-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq42-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq42-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq42><span>4-2 - 序列化优化器初始发生错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq43-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq43-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq43-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq43><span>4-3 - 接口引用调用失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq44-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq44-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq44-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq44><span>4-4 - 非安全序列化方式</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq45-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq45-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq45-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq45><span>4-5 - 流关闭异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq46-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq46-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq46-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq46><span>4-6 - 反序列化失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq47-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq47-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq47-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq47><span>4-7 - 关闭客户端时发生错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq48-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq48-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq48-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq48><span>4-8 - 关闭服务端时发生错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq49-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq49-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq49-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/9/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq49><span>4-9 - 解析失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq410-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq410-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq410-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/10/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq410><span>4-10 - Triple 序列化结果失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq411-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq411-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq411-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/11/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq411><span>4-11 - 发起请求失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq412-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq412-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq412-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/12/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq412><span>4-12 - 创建Triple流失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq413-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq413-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq413-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/13/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq413><span>4-13 - 服务端超时</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq414-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq414-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq414-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/14/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq414><span>4-14 - 响应结果失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq415-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq415-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq415-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/15/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq415><span>4-15 - 客户端流监听器</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq416-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq416-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq416-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/16/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq416><span>4-16 - 服务已关闭</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq417-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq417-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq417-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/17/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq417><span>4-17 - 关闭所有调用程序时发生错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq418-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq418-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq418-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/18/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq418><span>4-18 - 无法从调用中获取服务模型</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq419-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq419-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq419-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/19/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq419><span>4-19 - 参数值有出错的可能</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq420-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq420-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq420-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/20/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq420><span>4-20 - 数据解码失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq421-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq421-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq421-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/4/21/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq421><span>4-21 - 检测到不安全的序列化数据</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq5-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq5-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq5-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq5><span>5 - 配置(中心)层</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq51-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq51-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq51-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq51><span>5-1 - 配置中心连接失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq52-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq52-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq52-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq52><span>5-2 - 注册/注销关闭钩子方法失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq53-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq53-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq53-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq53><span>5-3 - 销毁方法调用时发生意外错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq54-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq54-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq54-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq54><span>5-4 - 服务接口中找不到方法</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq55-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq55-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq55-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq55><span>5-5 - 无法获得env变量</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq56-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq56-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq56-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq56><span>5-6 - 接口类型的属性冲突</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq57-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq57-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq57-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq57><span>5-7 - 取消导出时发生意外错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq58-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq58-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq58-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq58><span>5-8 - 协议将使用随机可用端口</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq59-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq59-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq59-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/9/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq59><span>5-9 - 服务配置导出失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq510-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq510-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq510-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/10/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq510><span>5-10 - 服务的注册接口应用程序映射失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq511-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq511-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq511-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/11/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq511><span>5-11 - 注册实例错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq512-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq512-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq512-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/12/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq512><span>5-12 - 刷新实例和元数据错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq513-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq513-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq513-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/13/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq513><span>5-13 - 无法销毁模型</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq514-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq514-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq514-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/14/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq514><span>5-14 - 模型启动错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq515-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq515-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq515-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/15/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq515><span>5-15 - 模型引用错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq516-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq516-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq516-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/16/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq516><span>5-16 - 无法找到任何有效的协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq517-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq517-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq517-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/17/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq517><span>5-17 - 参数值格式错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq518-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq518-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq518-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/18/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq518><span>5-18 - 通知注册事件失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq520-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq520-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq520-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/20/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq520><span>5-20 - 停止 dubbo 模块时发生错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq521-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq521-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq521-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/21/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq521><span>5-21 - 服务销毁时发生异常错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq522-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq522-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq522-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/22/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq522><span>5-22 - 注册中心在初始化时发生错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq523-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq523-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq523-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/23/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq523><span>5-23 - 等待导出/引用服务发生异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq524-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq524-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq524-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/24/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq524><span>5-24 - 异步等待引用服务发生异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq525-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq525-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq525-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/25/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq525><span>5-25 - 自定义实现发生未定义异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq526-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq526-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq526-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/26/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq526><span>5-26 - 元数据已导出</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq527-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq527-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq527-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/27/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq527><span>5-27 - 内部类API被错误使用</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq528-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq528-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq528-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/28/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq528><span>5-28 - 未发现可用注解</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq529-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq529-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq529-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/29/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq529><span>5-29 - 扫描包未配置</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq530-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq530-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq530-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/30/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq530><span>5-30 - 声明bean定义重复</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq531-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq531-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq531-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/31/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq531><span>5-31 - 状态检查错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq532-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq532-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq532-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/32/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq532><span>5-32 - Apollo 断开连接时发生错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq533-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq533-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq533-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/33/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq533><span>5-33 - Apollo 配置更新事件发生异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq534-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq534-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq534-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/34/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq534><span>5-34 - NACOS 发生错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq535-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq535-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq535-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/35/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq535><span>5-35 - 容器初始化失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq536-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq536-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq536-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/36/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq536><span>5-36 - 过滤器校验时发生错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq537-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq537-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq537-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/37/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq537><span>5-37 - 动态配置监听处理发生错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq538-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq538-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq538-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/38/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq538><span>5-38 - 配置参数未定义</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq539-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq539-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq539-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/39/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq539><span>5-39 - Dubbo配置bean初始化器发生错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq540-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq540-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq540-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/40/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq540><span>5-40 - Dubbo配置bean未找到</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq541-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq541-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq541-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/41/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq541><span>5-41 - SSL证书读取失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq542-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq542-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq542-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/42/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq542><span>5-42 - Dubbo 证书签发失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq543-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq543-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq543-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/5/43/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq543><span>5-43 - Dubbo 证书签发连接不安全</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq6-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq6-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq6-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq6><span>6 - 网络传输层</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq61-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq61-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq61-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq61><span>6-1 - 服务端连接失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq62-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq62-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq62-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq62><span>6-2 - 客户端超时</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq63-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq63-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq63-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq63><span>6-3 - 网络连接关闭失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq64-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq64-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq64-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq64><span>6-4 - 网络通讯层未知异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq65-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq65-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq65-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq65><span>6-5 - 网络连接断开失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq66-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq66-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq66-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq66><span>6-6 - 不支持的消息</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq67-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq67-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq67-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/7/ title="6-7 - 线程连接数超限警告" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq67><span>6-7 - 服务端连接失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq68-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq68-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq68-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq68><span>6-8 - 返回数据解码失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq69-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq69-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq69-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/9/ title="6-9 - 序列号ID存在重复" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq69><span>6-9 - 服务端连接失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq610-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq610-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq610-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/10/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq610><span>6-10 - 超过有效载荷限制异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq611-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq611-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq611-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/11/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq611><span>6-11 - 字符集不被支持</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq612-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq612-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq612-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/12/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq612><span>6-12 - ZK客户端销毁时发生错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq613-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq613-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq613-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/13/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq613><span>6-13 - 流关闭异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq614-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq614-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq614-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/14/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq614><span>6-14 - 服务端响应失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq615-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq615-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq615-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/15/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq615><span>6-15 - 跳过未读完的流数据</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq616-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq616-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq616-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/6/16/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq616><span>6-16 - 重连时发生异常</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq7-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq7-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq7-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq7><span>7 - QoS 插件模块</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq71-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq71-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq71-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/7/1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq71><span>7-1 - QOS 已关闭</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq72-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq72-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq72-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/7/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq72><span>7-2 - QOS 已开启</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq73-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq73-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq73-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/7/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq73><span>7-3 - 设置超时时间的警告百分比值</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq74-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq74-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq74-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/7/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq74><span>7-4 - QOS 服务启动失败</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq75-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq75-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq75-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/7/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq75><span>7-5 - QOS 命令未找到</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq76-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq76-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq76-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/7/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq76><span>7-6 - QOS 发生未知异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq77-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq77-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq77-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/7/7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq77><span>7-7 - QOS 无权限访问</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq81-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq81-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq81-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/81/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq81><span>81 - 单元测试辅助模块(注册中心)</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq811-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq811-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq811-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/81/1/ title="81-1 - ZK 启动异常" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq811><span>81-1 - ZK 启动异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq812-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq812-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq812-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/81/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq812><span>81-2 - ZK 销毁异常</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq813-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq813-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq813-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/81/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq813><span>81-3 - 通过url无法下载文件</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq814-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq814-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq814-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/81/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq814><span>81-4 - 嵌入式ZooKeeper运行异常</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq99-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq99-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq99-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/99/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq99><span>99 - 其它未知错误</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq990-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq990-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq990-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/99/0/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq990><span>99-0 - 内部未知错误</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq991-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq991-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaq991-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/99/1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaq991><span>99-1 - 程序被打断</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaqintro-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualfaqintro-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualfaqintro-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/faq/intro/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualfaqintro><span>错误码机制的介绍</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibility-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibility-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibility-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/upgrades-and-compatibility/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibility><span>升级和兼容性</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilitymigration-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilitymigration-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilitymigration-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/upgrades-and-compatibility/migration/ title="从 dubbo2 升级到 dubbo3(涵盖 2.5.x、2.6.x、2.7.x 等版本)" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilitymigration><span>升级到Dubbo3</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilitymigration-triple-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilitymigration-triple-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilitymigration-triple-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/upgrades-and-compatibility/migration-triple/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilitymigration-triple><span>升级到triple协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilitymigration-service-discovery-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilitymigration-service-discovery-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilitymigration-service-discovery-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/upgrades-and-compatibility/migration-service-discovery/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilitymigration-service-discovery><span>升级到应用级服务发现</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/upgrades-and-compatibility/version/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion><span>版本变更记录</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion2x-to-3x-compatibility-guide-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion2x-to-3x-compatibility-guide-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion2x-to-3x-compatibility-guide-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/upgrades-and-compatibility/version/2.x-to-3.x-compatibility-guide/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion2x-to-3x-compatibility-guide><span>2.x 升级至 3.x</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion30-to-31-compatibility-guide-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion30-to-31-compatibility-guide-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion30-to-31-compatibility-guide-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/upgrades-and-compatibility/version/3.0-to-3.1-compatibility-guide/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion30-to-31-compatibility-guide><span>3.0 升级至 3.1</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion31-to-32-compatibility-guide-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion31-to-32-compatibility-guide-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion31-to-32-compatibility-guide-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/upgrades-and-compatibility/version/3.1-to-3.2-compatibility-guide/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion31-to-32-compatibility-guide><span>3.1 升级至 3.2</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion32-to-33-compatibility-guide-li><input type=checkbox id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion32-to-33-compatibility-guide-check>
<label for=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion32-to-33-compatibility-guide-check><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/upgrades-and-compatibility/version/3.2-to-3.3-compatibility-guide/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualjava-sdkreference-manualupgrades-and-compatibilityversion32-to-33-compatibility-guide><span>3.2 升级至 3.3</span></a></label></li></ul></li></ul></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualgolang-sdk-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdk-check>
<label for=m-zh-cnoverviewmannualgolang-sdk-check><a href=/zh-cn/overview/mannual/golang-sdk/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualgolang-sdk><span>Golang SDK</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkversions-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkversions-check>
<label for=m-zh-cnoverviewmannualgolang-sdkversions-check><a href=/zh-cn/overview/mannual/golang-sdk/versions/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkversions><span>版本信息</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkintroduction-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkintroduction-check>
<label for=m-zh-cnoverviewmannualgolang-sdkintroduction-check><a href=/zh-cn/overview/mannual/golang-sdk/introduction/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkintroduction><span>框架介绍</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualgolang-sdkquickstart-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkquickstart-check>
<label for=m-zh-cnoverviewmannualgolang-sdkquickstart-check><a href=/zh-cn/overview/mannual/golang-sdk/quickstart/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualgolang-sdkquickstart><span>快速开始</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkquickstartrpc-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkquickstartrpc-check>
<label for=m-zh-cnoverviewmannualgolang-sdkquickstartrpc-check><a href=/zh-cn/overview/mannual/golang-sdk/quickstart/rpc/ title="开发 RPC Server & RPC Client" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkquickstartrpc><span>开发RPC服务</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkquickstartmicroservices-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkquickstartmicroservices-check>
<label for=m-zh-cnoverviewmannualgolang-sdkquickstartmicroservices-check><a href=/zh-cn/overview/mannual/golang-sdk/quickstart/microservices/ title=开发微服务 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkquickstartmicroservices><span>开发微服务应用</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualgolang-sdktutorial-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorial-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorial-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualgolang-sdktutorial><span>使用教程</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualgolang-sdktutorialrpc-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialrpc-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialrpc-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/rpc/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualgolang-sdktutorialrpc><span>RPC框架</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialrpcstreaming-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialrpcstreaming-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialrpcstreaming-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/rpc/streaming/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialrpcstreaming><span>流式通信</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialrpctimeout-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialrpctimeout-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialrpctimeout-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/rpc/timeout/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialrpctimeout><span>超时时间</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialrpchealthcheck-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialrpchealthcheck-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialrpchealthcheck-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/rpc/healthcheck/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialrpchealthcheck><span>健康检查</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialrpcretry-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialrpcretry-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialrpcretry-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/rpc/retry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialrpcretry><span>请求重试</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialrpcprotocol-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialrpcprotocol-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialrpcprotocol-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/rpc/protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialrpcprotocol><span>通信协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialrpcerror-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialrpcerror-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialrpcerror-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/rpc/error/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialrpcerror><span>异常类型返回值</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialrpcattachments-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialrpcattachments-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialrpcattachments-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/rpc/attachments/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialrpcattachments><span>传递附加参数</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialrpcstart-check-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialrpcstart-check-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialrpcstart-check-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/rpc/start-check/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialrpcstart-check><span>启动时检查</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialrpcfilter-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialrpcfilter-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialrpcfilter-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/rpc/filter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialrpcfilter><span>filter拦截器</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualgolang-sdktutorialservice-discovery-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialservice-discovery-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialservice-discovery-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/service-discovery/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualgolang-sdktutorialservice-discovery><span>地址发现</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialservice-discoverynacos-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialservice-discoverynacos-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialservice-discoverynacos-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/service-discovery/nacos/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialservice-discoverynacos><span>使用 Nacos 作为注册中心</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialservice-discoveryzookeeper-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialservice-discoveryzookeeper-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialservice-discoveryzookeeper-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/service-discovery/zookeeper/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialservice-discoveryzookeeper><span>使用 Zookeeper 作为注册中心</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialservice-discoverymulti_registry-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialservice-discoverymulti_registry-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialservice-discoverymulti_registry-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/service-discovery/multi_registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialservice-discoverymulti_registry><span>多注册中心</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualgolang-sdktutorialload-balance-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialload-balance-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialload-balance-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/load-balance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualgolang-sdktutorialload-balance><span>负载均衡</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialload-balanceloadbalance-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialload-balanceloadbalance-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialload-balanceloadbalance-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/load-balance/loadbalance/ title=负载均衡策略与配置细节 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialload-balanceloadbalance><span>负载均衡</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualgolang-sdktutorialconfiguration-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialconfiguration-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialconfiguration-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/configuration/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualgolang-sdktutorialconfiguration><span>配置文件</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialconfigurationfile-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialconfigurationfile-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialconfigurationfile-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/configuration/file/ title="使用 dubbogo.yml 配置文件开发应用" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialconfigurationfile><span>本地配置文件</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialconfigurationremote-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialconfigurationremote-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialconfigurationremote-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/configuration/remote/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialconfigurationremote><span>远程配置文件</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualgolang-sdktutorialobservability-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialobservability-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialobservability-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/observability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualgolang-sdktutorialobservability><span>可视化观测</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialobservabilitylogger-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialobservabilitylogger-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialobservabilitylogger-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/observability/logger/ title=配置和管理框架日志 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialobservabilitylogger><span>框架日志</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialobservabilityrpc_metrics-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialobservabilityrpc_metrics-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialobservabilityrpc_metrics-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/observability/rpc_metrics/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialobservabilityrpc_metrics><span>metrics监控</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialobservabilitytracing-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialobservabilitytracing-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialobservabilitytracing-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/observability/tracing/ title=链路追踪 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialobservabilitytracing><span>全链路追踪</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualgolang-sdktutorialtraffic-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialtraffic-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialtraffic-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualgolang-sdktutorialtraffic><span>流量管控</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialtrafficrouter-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialtrafficrouter-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialtrafficrouter-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/router/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialtrafficrouter><span>路由规则</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialtrafficsentinel-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialtrafficsentinel-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialtrafficsentinel-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/traffic/sentinel/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialtrafficsentinel><span>Sentinel限流降级</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualgolang-sdktutorialgateway-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialgateway-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialgateway-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/gateway/ title=HTTP流量接入 class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualgolang-sdktutorialgateway><span>HTTP网关接入</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialgatewayhttp_triple-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialgatewayhttp_triple-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialgatewayhttp_triple-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/gateway/http_triple/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialgatewayhttp_triple><span>接入 Ingress 流量</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialgatewaypixiu-nacos-triple-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialgatewaypixiu-nacos-triple-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialgatewaypixiu-nacos-triple-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/gateway/pixiu-nacos-triple/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialgatewaypixiu-nacos-triple><span>使用 Pixiu 暴露 Dubbo-go 服务</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualgolang-sdktutorialtransaction-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialtransaction-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialtransaction-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/transaction/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualgolang-sdktutorialtransaction><span>分布式事务</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialtransactionseata-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialtransactionseata-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialtransactionseata-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/transaction/seata/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialtransactionseata><span>Seata分布式事务</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubbo-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubbo-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubbo-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/interop-dubbo/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubbo><span>与dubbo-java互通</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubbocall_java_protocol_triple_protobuf-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubbocall_java_protocol_triple_protobuf-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubbocall_java_protocol_triple_protobuf-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/interop-dubbo/call_java_protocol_triple_protobuf/ title="基于 protobuf 实现 triple 协议互通(适用于两边都用 protobuf 开发的场景)" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubbocall_java_protocol_triple_protobuf><span>protobuf+triple 协议互通</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubbocall_java_protocol_dubbo_non_protobuf-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubbocall_java_protocol_dubbo_non_protobuf-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubbocall_java_protocol_dubbo_non_protobuf-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/interop-dubbo/call_java_protocol_dubbo_non_protobuf/ title="非protoubf模式协议互通(适用于老版本 dubbo java 应用)" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubbocall_java_protocol_dubbo_non_protobuf><span>非protoubf模式协议互通</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubboservice-discovery-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubboservice-discovery-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubboservice-discovery-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/interop-dubbo/service-discovery/ title=基于应用级服务发现实现地址互通 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-dubboservice-discovery><span>服务发现实现地址互通</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-grpc-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-grpc-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialinterop-grpc-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/interop-grpc/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-grpc><span>与grpc互通</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-grpccall_grpc-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-grpccall_grpc-check>
<label for=m-zh-cnoverviewmannualgolang-sdktutorialinterop-grpccall_grpc-check><a href=/zh-cn/overview/mannual/golang-sdk/tutorial/interop-grpc/call_grpc/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdktutorialinterop-grpccall_grpc><span>与 gRPC 应用互通</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualgolang-sdkrefer-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkrefer-check>
<label for=m-zh-cnoverviewmannualgolang-sdkrefer-check><a href=/zh-cn/overview/mannual/golang-sdk/refer/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualgolang-sdkrefer><span>参考手册</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkreferecology-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkreferecology-check>
<label for=m-zh-cnoverviewmannualgolang-sdkreferecology-check><a href=/zh-cn/overview/mannual/golang-sdk/refer/ecology/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkreferecology><span>生态组件</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkrefergeneric-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkrefergeneric-check>
<label for=m-zh-cnoverviewmannualgolang-sdkrefergeneric-check><a href=/zh-cn/overview/mannual/golang-sdk/refer/generic/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkrefergeneric><span>泛化调用</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkreferuse_dubbogo_cli-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkreferuse_dubbogo_cli-check>
<label for=m-zh-cnoverviewmannualgolang-sdkreferuse_dubbogo_cli-check><a href=/zh-cn/overview/mannual/golang-sdk/refer/use_dubbogo_cli/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkreferuse_dubbogo_cli><span>使用 dubbogo-cli 工具</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecode-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkrefersourcecode-check>
<label for=m-zh-cnoverviewmannualgolang-sdkrefersourcecode-check><a href=/zh-cn/overview/mannual/golang-sdk/refer/sourcecode/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecode><span>源码解读</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodeprotocol-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodeprotocol-check>
<label for=m-zh-cnoverviewmannualgolang-sdkrefersourcecodeprotocol-check><a href=/zh-cn/overview/mannual/golang-sdk/refer/sourcecode/protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodeprotocol><span>网络协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecoderegistry-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkrefersourcecoderegistry-check>
<label for=m-zh-cnoverviewmannualgolang-sdkrefersourcecoderegistry-check><a href=/zh-cn/overview/mannual/golang-sdk/refer/sourcecode/registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecoderegistry><span>注册中心</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecode30_feature-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkrefersourcecode30_feature-check>
<label for=m-zh-cnoverviewmannualgolang-sdkrefersourcecode30_feature-check><a href=/zh-cn/overview/mannual/golang-sdk/refer/sourcecode/3.0_feature/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecode30_feature><span>新特性</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodegeneric-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodegeneric-check>
<label for=m-zh-cnoverviewmannualgolang-sdkrefersourcecodegeneric-check><a href=/zh-cn/overview/mannual/golang-sdk/refer/sourcecode/generic/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodegeneric><span>泛化调用</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodegeneric-2-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodegeneric-2-check>
<label for=m-zh-cnoverviewmannualgolang-sdkrefersourcecodegeneric-2-check><a href=/zh-cn/overview/mannual/golang-sdk/refer/sourcecode/generic-2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodegeneric-2><span>泛化调用</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodeaop_and_extension-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodeaop_and_extension-check>
<label for=m-zh-cnoverviewmannualgolang-sdkrefersourcecodeaop_and_extension-check><a href=/zh-cn/overview/mannual/golang-sdk/refer/sourcecode/aop_and_extension/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodeaop_and_extension><span>AOP 与可扩展机制</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodeapp_and_interface-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodeapp_and_interface-check>
<label for=m-zh-cnoverviewmannualgolang-sdkrefersourcecodeapp_and_interface-check><a href=/zh-cn/overview/mannual/golang-sdk/refer/sourcecode/app_and_interface/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodeapp_and_interface><span>Dubbo的应用和接口</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodearchitecture-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodearchitecture-check>
<label for=m-zh-cnoverviewmannualgolang-sdkrefersourcecodearchitecture-check><a href=/zh-cn/overview/mannual/golang-sdk/refer/sourcecode/architecture/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkrefersourcecodearchitecture><span>架构</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualgolang-sdkrefernacos-li><input type=checkbox id=m-zh-cnoverviewmannualgolang-sdkrefernacos-check>
<label for=m-zh-cnoverviewmannualgolang-sdkrefernacos-check><a href=/zh-cn/overview/mannual/golang-sdk/refer/nacos/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualgolang-sdkrefernacos><span>使用 Nacos 作为注册中心</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualnodejs-sdk-li><input type=checkbox id=m-zh-cnoverviewmannualnodejs-sdk-check>
<label for=m-zh-cnoverviewmannualnodejs-sdk-check><a href=/zh-cn/overview/mannual/nodejs-sdk/ title="Node.js SDK 手册" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualnodejs-sdk><span>Node.js SDK</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualnodejs-sdkquick-start-li><input type=checkbox id=m-zh-cnoverviewmannualnodejs-sdkquick-start-check>
<label for=m-zh-cnoverviewmannualnodejs-sdkquick-start-check><a href=/zh-cn/overview/mannual/nodejs-sdk/quick-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualnodejs-sdkquick-start><span>快速开始</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualweb-sdk-li><input type=checkbox id=m-zh-cnoverviewmannualweb-sdk-check>
<label for=m-zh-cnoverviewmannualweb-sdk-check><a href=/zh-cn/overview/mannual/web-sdk/ title="Web SDK 手册" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualweb-sdk><span>Web SDK</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualweb-sdkquick-start-li><input type=checkbox id=m-zh-cnoverviewmannualweb-sdkquick-start-check>
<label for=m-zh-cnoverviewmannualweb-sdkquick-start-check><a href=/zh-cn/overview/mannual/web-sdk/quick-start/ title="Web 浏览器访问 Dubbo 服务" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualweb-sdkquick-start><span>Web浏览器访问Dubbo服务</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualrust-sdk-li><input type=checkbox id=m-zh-cnoverviewmannualrust-sdk-check>
<label for=m-zh-cnoverviewmannualrust-sdk-check><a href=/zh-cn/overview/mannual/rust-sdk/ title="Rust SDK 手册" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualrust-sdk><span>Rust SDK</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualrust-sdkquick-start-li><input type=checkbox id=m-zh-cnoverviewmannualrust-sdkquick-start-check>
<label for=m-zh-cnoverviewmannualrust-sdkquick-start-check><a href=/zh-cn/overview/mannual/rust-sdk/quick-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualrust-sdkquick-start><span>快速开始</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualrust-sdkjava-interoperability-li><input type=checkbox id=m-zh-cnoverviewmannualrust-sdkjava-interoperability-check>
<label for=m-zh-cnoverviewmannualrust-sdkjava-interoperability-check><a href=/zh-cn/overview/mannual/rust-sdk/java-interoperability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualrust-sdkjava-interoperability><span>Rust和Java互相调用</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualrust-sdkservice-discovery-li><input type=checkbox id=m-zh-cnoverviewmannualrust-sdkservice-discovery-check>
<label for=m-zh-cnoverviewmannualrust-sdkservice-discovery-check><a href=/zh-cn/overview/mannual/rust-sdk/service-discovery/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualrust-sdkservice-discovery><span>服务发现</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualrust-sdkrouter-module-li><input type=checkbox id=m-zh-cnoverviewmannualrust-sdkrouter-module-check>
<label for=m-zh-cnoverviewmannualrust-sdkrouter-module-check><a href=/zh-cn/overview/mannual/rust-sdk/router-module/ title=服务路由规则 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualrust-sdkrouter-module><span>服务路由</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualrust-sdkstreaming-li><input type=checkbox id=m-zh-cnoverviewmannualrust-sdkstreaming-check>
<label for=m-zh-cnoverviewmannualrust-sdkstreaming-check><a href=/zh-cn/overview/mannual/rust-sdk/streaming/ title="Streaming 通信模型" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualrust-sdkstreaming><span>Streaming通信模型</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualrust-sdkunix-transport-li><input type=checkbox id=m-zh-cnoverviewmannualrust-sdkunix-transport-check>
<label for=m-zh-cnoverviewmannualrust-sdkunix-transport-check><a href=/zh-cn/overview/mannual/rust-sdk/unix-transport/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualrust-sdkunix-transport><span>使用Unix套接字连接器通信</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewmannualcontrol-plane-li><input type=checkbox id=m-zh-cnoverviewmannualcontrol-plane-check>
<label for=m-zh-cnoverviewmannualcontrol-plane-check><a href=/zh-cn/overview/mannual/control-plane/ title="Admin 控制台操作手册" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewmannualcontrol-plane><span>控制面</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualcontrol-planearchitecture-li><input type=checkbox id=m-zh-cnoverviewmannualcontrol-planearchitecture-check>
<label for=m-zh-cnoverviewmannualcontrol-planearchitecture-check><a href=/zh-cn/overview/mannual/control-plane/architecture/ title="Admin 整体架构与安装步骤" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualcontrol-planearchitecture><span>架构与安装</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualcontrol-planesearch-li><input type=checkbox id=m-zh-cnoverviewmannualcontrol-planesearch-check>
<label for=m-zh-cnoverviewmannualcontrol-planesearch-check><a href=/zh-cn/overview/mannual/control-plane/search/ title="Admin 服务查询" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualcontrol-planesearch><span>文档查询</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualcontrol-planetest-li><input type=checkbox id=m-zh-cnoverviewmannualcontrol-planetest-check>
<label for=m-zh-cnoverviewmannualcontrol-planetest-check><a href=/zh-cn/overview/mannual/control-plane/test/ title="Admin 服务测试功能简介" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualcontrol-planetest><span>服务测试</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewmannualcontrol-planemock-li><input type=checkbox id=m-zh-cnoverviewmannualcontrol-planemock-check>
<label for=m-zh-cnoverviewmannualcontrol-planemock-check><a href=/zh-cn/overview/mannual/control-plane/mock/ title="Admin 服务 Mock 功能简介" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewmannualcontrol-planemock><span>服务Mock</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreference-li><input type=checkbox id=m-zh-cnoverviewreference-check>
<label for=m-zh-cnoverviewreference-check><a href=/zh-cn/overview/reference/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreference><span>其他</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferencemetrics-li><input type=checkbox id=m-zh-cnoverviewreferencemetrics-check>
<label for=m-zh-cnoverviewreferencemetrics-check><a href=/zh-cn/overview/reference/metrics/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferencemetrics><span>Metrics</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencemetricsstandard_metrics-li><input type=checkbox id=m-zh-cnoverviewreferencemetricsstandard_metrics-check>
<label for=m-zh-cnoverviewreferencemetricsstandard_metrics-check><a href=/zh-cn/overview/reference/metrics/standard_metrics/ title="Dubbo 框架标准监控指标" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencemetricsstandard_metrics><span>标准监控指标</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferenceintegrations-li><input type=checkbox id=m-zh-cnoverviewreferenceintegrations-check>
<label for=m-zh-cnoverviewreferenceintegrations-check><a href=/zh-cn/overview/reference/integrations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferenceintegrations><span>集成适配</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceintegrationsprometheus-li><input type=checkbox id=m-zh-cnoverviewreferenceintegrationsprometheus-check>
<label for=m-zh-cnoverviewreferenceintegrationsprometheus-check><a href=/zh-cn/overview/reference/integrations/prometheus/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceintegrationsprometheus><span>Prometheus</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceintegrationsgrafana-li><input type=checkbox id=m-zh-cnoverviewreferenceintegrationsgrafana-check>
<label for=m-zh-cnoverviewreferenceintegrationsgrafana-check><a href=/zh-cn/overview/reference/integrations/grafana/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceintegrationsgrafana><span>Grafana</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceintegrationsskywalking-li><input type=checkbox id=m-zh-cnoverviewreferenceintegrationsskywalking-check>
<label for=m-zh-cnoverviewreferenceintegrationsskywalking-check><a href=/zh-cn/overview/reference/integrations/skywalking/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceintegrationsskywalking><span>Skywalking</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceintegrationszipkin-li><input type=checkbox id=m-zh-cnoverviewreferenceintegrationszipkin-check>
<label for=m-zh-cnoverviewreferenceintegrationszipkin-check><a href=/zh-cn/overview/reference/integrations/zipkin/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceintegrationszipkin><span>Zipkin</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceintegrationsnacos-li><input type=checkbox id=m-zh-cnoverviewreferenceintegrationsnacos-check>
<label for=m-zh-cnoverviewreferenceintegrationsnacos-check><a href=/zh-cn/overview/reference/integrations/nacos/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceintegrationsnacos><span>Nacos</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceintegrationshigress-li><input type=checkbox id=m-zh-cnoverviewreferenceintegrationshigress-check>
<label for=m-zh-cnoverviewreferenceintegrationshigress-check><a href=/zh-cn/overview/reference/integrations/higress/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceintegrationshigress><span>Higress</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceintegrationszookeeper-li><input type=checkbox id=m-zh-cnoverviewreferenceintegrationszookeeper-check>
<label for=m-zh-cnoverviewreferenceintegrationszookeeper-check><a href=/zh-cn/overview/reference/integrations/zookeeper/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceintegrationszookeeper><span>Zookeeper</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferenceproposals-li><input type=checkbox id=m-zh-cnoverviewreferenceproposals-check>
<label for=m-zh-cnoverviewreferenceproposals-check><a href=/zh-cn/overview/reference/proposals/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferenceproposals><span>提案</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceproposalsprotocol-http-li><input type=checkbox id=m-zh-cnoverviewreferenceproposalsprotocol-http-check>
<label for=m-zh-cnoverviewreferenceproposalsprotocol-http-check><a href=/zh-cn/overview/reference/proposals/protocol-http/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceproposalsprotocol-http><span>Rest 协议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceproposalsregistry-config-meta-li><input type=checkbox id=m-zh-cnoverviewreferenceproposalsregistry-config-meta-check>
<label for=m-zh-cnoverviewreferenceproposalsregistry-config-meta-check><a href=/zh-cn/overview/reference/proposals/registry-config-meta/ title=注册中心、配置中心和元数据中心 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceproposalsregistry-config-meta><span>注册&配置&元数据中心</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceproposalsadmin-li><input type=checkbox id=m-zh-cnoverviewreferenceproposalsadmin-check>
<label for=m-zh-cnoverviewreferenceproposalsadmin-check><a href=/zh-cn/overview/reference/proposals/admin/ title="Dubbo Admin 控制面总体架构设计" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceproposalsadmin><span>Admin 架构设计</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceproposalsmetrics-li><input type=checkbox id=m-zh-cnoverviewreferenceproposalsmetrics-check>
<label for=m-zh-cnoverviewreferenceproposalsmetrics-check><a href=/zh-cn/overview/reference/proposals/metrics/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceproposalsmetrics><span>指标埋点</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceproposalsheuristic-flow-control-li><input type=checkbox id=m-zh-cnoverviewreferenceproposalsheuristic-flow-control-check>
<label for=m-zh-cnoverviewreferenceproposalsheuristic-flow-control-check><a href=/zh-cn/overview/reference/proposals/heuristic-flow-control/ title=自适应负载均衡与限流 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceproposalsheuristic-flow-control><span>服务柔性</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceproposalsservice-discovery-li><input type=checkbox id=m-zh-cnoverviewreferenceproposalsservice-discovery-check>
<label for=m-zh-cnoverviewreferenceproposalsservice-discovery-check><a href=/zh-cn/overview/reference/proposals/service-discovery/ title="Dubbo3 应用级服务发现设计" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceproposalsservice-discovery><span>应用级服务发现</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceproposalssupport-more-content-types-li><input type=checkbox id=m-zh-cnoverviewreferenceproposalssupport-more-content-types-check>
<label for=m-zh-cnoverviewreferenceproposalssupport-more-content-types-check><a href=/zh-cn/overview/reference/proposals/support-more-content-types/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceproposalssupport-more-content-types><span>Triple协议Http标准能力增强-多Content-Type支持</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferenceprotocols-li><input type=checkbox id=m-zh-cnoverviewreferenceprotocols-check>
<label for=m-zh-cnoverviewreferenceprotocols-check><a href=/zh-cn/overview/reference/protocols/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferenceprotocols><span>协议规范</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceprotocolstriple-spec-li><input type=checkbox id=m-zh-cnoverviewreferenceprotocolstriple-spec-check>
<label for=m-zh-cnoverviewreferenceprotocolstriple-spec-check><a href=/zh-cn/overview/reference/protocols/triple-spec/ title="Triple 协议设计理念与规范" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceprotocolstriple-spec><span>Triple 协议规范</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceprotocolstriple-li><input type=checkbox id=m-zh-cnoverviewreferenceprotocolstriple-check>
<label for=m-zh-cnoverviewreferenceprotocolstriple-check><a href=/zh-cn/overview/reference/protocols/triple/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceprotocolstriple><span>Triple 协议优势与目标</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceprotocolstcp-li><input type=checkbox id=m-zh-cnoverviewreferenceprotocolstcp-check>
<label for=m-zh-cnoverviewreferenceprotocolstcp-check><a href=/zh-cn/overview/reference/protocols/tcp/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceprotocolstcp><span>Dubbo2 协议规范</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceprotocolshttp-li><input type=checkbox id=m-zh-cnoverviewreferenceprotocolshttp-check>
<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP 协议规范</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferenceerlang-sdk-li><input type=checkbox id=m-zh-cnoverviewreferenceerlang-sdk-check>
<label for=m-zh-cnoverviewreferenceerlang-sdk-check><a href=/zh-cn/overview/reference/erlang-sdk/ title="Erlang SDK 手册" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferenceerlang-sdk><span>Erlang SDK</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceerlang-sdkquick-start-li><input type=checkbox id=m-zh-cnoverviewreferenceerlang-sdkquick-start-check>
<label for=m-zh-cnoverviewreferenceerlang-sdkquick-start-check><a href=/zh-cn/overview/reference/erlang-sdk/quick-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceerlang-sdkquick-start><span>快速开始</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceerlang-sdkreference-li><input type=checkbox id=m-zh-cnoverviewreferenceerlang-sdkreference-check>
<label for=m-zh-cnoverviewreferenceerlang-sdkreference-check><a href=/zh-cn/overview/reference/erlang-sdk/reference/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceerlang-sdkreference><span>消费者配置</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceerlang-sdkservice-li><input type=checkbox id=m-zh-cnoverviewreferenceerlang-sdkservice-check>
<label for=m-zh-cnoverviewreferenceerlang-sdkservice-check><a href=/zh-cn/overview/reference/erlang-sdk/service/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceerlang-sdkservice><span>提供者配置</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferenceerlang-sdkserialization-li><input type=checkbox id=m-zh-cnoverviewreferenceerlang-sdkserialization-check>
<label for=m-zh-cnoverviewreferenceerlang-sdkserialization-check><a href=/zh-cn/overview/reference/erlang-sdk/serialization/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferenceerlang-sdkserialization><span>序列化配置项</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferencepixiu-li><input type=checkbox id=m-zh-cnoverviewreferencepixiu-check>
<label for=m-zh-cnoverviewreferencepixiu-check><a href=/zh-cn/overview/reference/pixiu/ title="Dubbo Go Pixiu 简介" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferencepixiu><span>Pixiu gateway</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferencepixiuoverview-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuoverview-check>
<label for=m-zh-cnoverviewreferencepixiuoverview-check><a href=/zh-cn/overview/reference/pixiu/overview/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferencepixiuoverview><span>入门概述</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuoverviewwhat-is-pixiu-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuoverviewwhat-is-pixiu-check>
<label for=m-zh-cnoverviewreferencepixiuoverviewwhat-is-pixiu-check><a href=/zh-cn/overview/reference/pixiu/overview/what-is-pixiu/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuoverviewwhat-is-pixiu><span>Pixiu 是什么</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuoverviewterminology-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuoverviewterminology-check>
<label for=m-zh-cnoverviewreferencepixiuoverviewterminology-check><a href=/zh-cn/overview/reference/pixiu/overview/terminology/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuoverviewterminology><span>Pixiu 术语</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuoverviewfaq-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuoverviewfaq-check>
<label for=m-zh-cnoverviewreferencepixiuoverviewfaq-check><a href=/zh-cn/overview/reference/pixiu/overview/faq/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuoverviewfaq><span>Pixiu 常见问题</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferencepixiuuser-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuser-check>
<label for=m-zh-cnoverviewreferencepixiuuser-check><a href=/zh-cn/overview/reference/pixiu/user/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferencepixiuuser><span>用户文档</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuuserquickstart-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserquickstart-check>
<label for=m-zh-cnoverviewreferencepixiuuserquickstart-check><a href=/zh-cn/overview/reference/pixiu/user/quickstart/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuuserquickstart><span>快速开始</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuuserconfigurations-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserconfigurations-check>
<label for=m-zh-cnoverviewreferencepixiuuserconfigurations-check><a href=/zh-cn/overview/reference/pixiu/user/configurations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuuserconfigurations><span>启动和配置</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuuserdeployment-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserdeployment-check>
<label for=m-zh-cnoverviewreferencepixiuuserdeployment-check><a href=/zh-cn/overview/reference/pixiu/user/deployment/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuuserdeployment><span>部署操作</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferencepixiuuserlistener-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserlistener-check>
<label for=m-zh-cnoverviewreferencepixiuuserlistener-check><a href=/zh-cn/overview/reference/pixiu/user/listener/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferencepixiuuserlistener><span>Listener 介绍</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuuserlistenerhttp-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserlistenerhttp-check>
<label for=m-zh-cnoverviewreferencepixiuuserlistenerhttp-check><a href=/zh-cn/overview/reference/pixiu/user/listener/http/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuuserlistenerhttp><span>Http Listener 介绍</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuuserlistenerhttp2-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserlistenerhttp2-check>
<label for=m-zh-cnoverviewreferencepixiuuserlistenerhttp2-check><a href=/zh-cn/overview/reference/pixiu/user/listener/http2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuuserlistenerhttp2><span>Http2 Listener 介绍</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuuserlistenertcp-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserlistenertcp-check>
<label for=m-zh-cnoverviewreferencepixiuuserlistenertcp-check><a href=/zh-cn/overview/reference/pixiu/user/listener/tcp/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuuserlistenertcp><span>TCP Listener 介绍</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuuserlistenertriple-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserlistenertriple-check>
<label for=m-zh-cnoverviewreferencepixiuuserlistenertriple-check><a href=/zh-cn/overview/reference/pixiu/user/listener/triple/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuuserlistenertriple><span>Triple Listener 介绍</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferencepixiuusernetworkfilter-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuusernetworkfilter-check>
<label for=m-zh-cnoverviewreferencepixiuusernetworkfilter-check><a href=/zh-cn/overview/reference/pixiu/user/networkfilter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferencepixiuusernetworkfilter><span>Network Filter 介绍</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuusernetworkfilterhttp-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuusernetworkfilterhttp-check>
<label for=m-zh-cnoverviewreferencepixiuusernetworkfilterhttp-check><a href=/zh-cn/overview/reference/pixiu/user/networkfilter/http/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuusernetworkfilterhttp><span>Http NetWorkFilter 介绍</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuusernetworkfiltergrpc-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuusernetworkfiltergrpc-check>
<label for=m-zh-cnoverviewreferencepixiuusernetworkfiltergrpc-check><a href=/zh-cn/overview/reference/pixiu/user/networkfilter/grpc/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuusernetworkfiltergrpc><span>Grpc NetWorkFilter 介绍</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuusernetworkfilterdubbo-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuusernetworkfilterdubbo-check>
<label for=m-zh-cnoverviewreferencepixiuusernetworkfilterdubbo-check><a href=/zh-cn/overview/reference/pixiu/user/networkfilter/dubbo/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuusernetworkfilterdubbo><span>Dubbo NetWorkFilter 介绍</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferencepixiuuseradapter-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuseradapter-check>
<label for=m-zh-cnoverviewreferencepixiuuseradapter-check><a href=/zh-cn/overview/reference/pixiu/user/adapter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferencepixiuuseradapter><span>Adapter 介绍</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuuseradapterdubbo-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuseradapterdubbo-check>
<label for=m-zh-cnoverviewreferencepixiuuseradapterdubbo-check><a href=/zh-cn/overview/reference/pixiu/user/adapter/dubbo/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuuseradapterdubbo><span>Dubbo 集群中心 Adapter</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuuseradapterspringcloud-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuseradapterspringcloud-check>
<label for=m-zh-cnoverviewreferencepixiuuseradapterspringcloud-check><a href=/zh-cn/overview/reference/pixiu/user/adapter/springcloud/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuuseradapterspringcloud><span>Spring Cloud 集群中心 Adapter</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferencepixiuuserhttpfilter-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserhttpfilter-check>
<label for=m-zh-cnoverviewreferencepixiuuserhttpfilter-check><a href=/zh-cn/overview/reference/pixiu/user/httpfilter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferencepixiuuserhttpfilter><span>Http Filter 介绍</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuuserhttpfilterdubbo-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserhttpfilterdubbo-check>
<label for=m-zh-cnoverviewreferencepixiuuserhttpfilterdubbo-check><a href=/zh-cn/overview/reference/pixiu/user/httpfilter/dubbo/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuuserhttpfilterdubbo><span>Dubbo HttpFilter 介绍</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuuserhttpfilterratelimit-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserhttpfilterratelimit-check>
<label for=m-zh-cnoverviewreferencepixiuuserhttpfilterratelimit-check><a href=/zh-cn/overview/reference/pixiu/user/httpfilter/ratelimit/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuuserhttpfilterratelimit><span>RateLimiter 介绍</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuuserhttpfilterhystrix-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserhttpfilterhystrix-check>
<label for=m-zh-cnoverviewreferencepixiuuserhttpfilterhystrix-check><a href=/zh-cn/overview/reference/pixiu/user/httpfilter/hystrix/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuuserhttpfilterhystrix><span>断路器介绍</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferencepixiuusersamples-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuusersamples-check>
<label for=m-zh-cnoverviewreferencepixiuusersamples-check><a href=/zh-cn/overview/reference/pixiu/user/samples/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferencepixiuusersamples><span>案例介绍</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuusersampleshttp_proxy-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuusersampleshttp_proxy-check>
<label for=m-zh-cnoverviewreferencepixiuusersampleshttp_proxy-check><a href=/zh-cn/overview/reference/pixiu/user/samples/http_proxy/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuusersampleshttp_proxy><span>Http Proxy 案例介绍</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuusersampleshttp_to_dubbo-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuusersampleshttp_to_dubbo-check>
<label for=m-zh-cnoverviewreferencepixiuusersampleshttp_to_dubbo-check><a href=/zh-cn/overview/reference/pixiu/user/samples/http_to_dubbo/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuusersampleshttp_to_dubbo><span>Http to Dubbo 案例介绍</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuusersampleshttps-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuusersampleshttps-check>
<label for=m-zh-cnoverviewreferencepixiuusersampleshttps-check><a href=/zh-cn/overview/reference/pixiu/user/samples/https/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuusersampleshttps><span>Https 案例介绍</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferencepixiuuserquality-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserquality-check>
<label for=m-zh-cnoverviewreferencepixiuuserquality-check><a href=/zh-cn/overview/reference/pixiu/user/quality/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferencepixiuuserquality><span>质量指标</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuuserqualitystability-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserqualitystability-check>
<label for=m-zh-cnoverviewreferencepixiuuserqualitystability-check><a href=/zh-cn/overview/reference/pixiu/user/quality/stability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuuserqualitystability><span>稳定性</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuuserqualityperformance-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserqualityperformance-check>
<label for=m-zh-cnoverviewreferencepixiuuserqualityperformance-check><a href=/zh-cn/overview/reference/pixiu/user/quality/performance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuuserqualityperformance><span>性能</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferencepixiuuserappendix-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserappendix-check>
<label for=m-zh-cnoverviewreferencepixiuuserappendix-check><a href=/zh-cn/overview/reference/pixiu/user/appendix/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferencepixiuuserappendix><span>附录</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiuuserappendixhttp-to-dubbo-default-stragety-li><input type=checkbox id=m-zh-cnoverviewreferencepixiuuserappendixhttp-to-dubbo-default-stragety-check>
<label for=m-zh-cnoverviewreferencepixiuuserappendixhttp-to-dubbo-default-stragety-check><a href=/zh-cn/overview/reference/pixiu/user/appendix/http-to-dubbo-default-stragety/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiuuserappendixhttp-to-dubbo-default-stragety><span>HTTP to Dubbo 默认转换协议</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewreferencepixiudev-li><input type=checkbox id=m-zh-cnoverviewreferencepixiudev-check>
<label for=m-zh-cnoverviewreferencepixiudev-check><a href=/zh-cn/overview/reference/pixiu/dev/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewreferencepixiudev><span>开发者指南</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiudevfilter-extension-li><input type=checkbox id=m-zh-cnoverviewreferencepixiudevfilter-extension-check>
<label for=m-zh-cnoverviewreferencepixiudevfilter-extension-check><a href=/zh-cn/overview/reference/pixiu/dev/filter-extension/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiudevfilter-extension><span>Pixiu Filter体系介绍</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiudevdubbo-pilot-li><input type=checkbox id=m-zh-cnoverviewreferencepixiudevdubbo-pilot-check>
<label for=m-zh-cnoverviewreferencepixiudevdubbo-pilot-check><a href=/zh-cn/overview/reference/pixiu/dev/dubbo-pilot/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiudevdubbo-pilot><span>dubbo-pilot Control Plane 部署</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewreferencepixiudevtrie-li><input type=checkbox id=m-zh-cnoverviewreferencepixiudevtrie-check>
<label for=m-zh-cnoverviewreferencepixiudevtrie-check><a href=/zh-cn/overview/reference/pixiu/dev/trie/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewreferencepixiudevtrie><span>Trie 前缀树介绍</span></a></label></li></ul></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnoverviewnotices-li><input type=checkbox id=m-zh-cnoverviewnotices-check>
<label for=m-zh-cnoverviewnotices-check><a href=/zh-cn/overview/notices/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnoverviewnotices><span>安全公告</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewnoticesserialization-li><input type=checkbox id=m-zh-cnoverviewnoticesserialization-check>
<label for=m-zh-cnoverviewnoticesserialization-check><a href=/zh-cn/overview/notices/serialization/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewnoticesserialization><span>序列化安全</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewnoticesprotocol-li><input type=checkbox id=m-zh-cnoverviewnoticesprotocol-check>
<label for=m-zh-cnoverviewnoticesprotocol-check><a href=/zh-cn/overview/notices/protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewnoticesprotocol><span>RPC 协议安全</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewnoticesregistry-li><input type=checkbox id=m-zh-cnoverviewnoticesregistry-check>
<label for=m-zh-cnoverviewnoticesregistry-check><a href=/zh-cn/overview/notices/registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewnoticesregistry><span>注册中心安全</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewnoticesadmin-li><input type=checkbox id=m-zh-cnoverviewnoticesadmin-check>
<label for=m-zh-cnoverviewnoticesadmin-check><a href=/zh-cn/overview/notices/admin/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewnoticesadmin><span>Dubbo Admin 安全</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnoverviewnoticeslog4j-li><input type=checkbox id=m-zh-cnoverviewnoticeslog4j-check>
<label for=m-zh-cnoverviewnoticeslog4j-check><a href=/zh-cn/overview/notices/log4j/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnoverviewnoticeslog4j><span>Log4j 漏洞影响</span></a></label></li></ul></li></ul></li></ul></nav></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/zh-cn/overview/>文档</a></li><li class=breadcrumb-item><a href=/zh-cn/overview/mannual/>用户手册</a></li><li class=breadcrumb-item><a href=/zh-cn/overview/mannual/java-sdk/>Java SDK</a></li><li class=breadcrumb-item><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/>参考手册</a></li><li class=breadcrumb-item><a href=/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/>源码架构</a></li><li class="breadcrumb-item active" aria-current=page>扩展点开发指南</li></ol></nav><div class=td-content><h1>扩展点开发指南</h1><div class=lead>本文介绍了 Dubbo SPI 的原理和实现细节</div><header class=article-meta></header><h2 id=1-dubbo-spi-扩展简介>1. Dubbo SPI 扩展简介</h2><p>Dubbo 中的扩展机制与 <a href=https://www.baeldung.com/java-spi target=_blank>JDK 标准的 SPI 扩展点</a> 原理类似。Dubbo 对其做了一定的改造与加强:</p><ul><li>JDK 标准的 SPI 会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源。</li><li>如果扩展点加载失败,JDK SPI 没给出详细信息,不方便定位问题,Dubbo SPI 在失败时记录真正的失败原因,并打印出来</li><li>增加 <a href=#23-ioc-%E6%9C%BA%E5%88%B6>IOC</a><a href=#24-aop-%E6%9C%BA%E5%88%B6>AOP</a> 能力</li><li>增加排序能力</li><li>增加条件激活能力</li><li>提供了一系列更灵活的 API,如<a href=./#21-%E6%8C%89%E5%90%8D%E7%A7%B0%E8%8E%B7%E5%8F%96%E6%8C%87%E5%AE%9A%E6%89%A9%E5%B1%95%E7%B1%BB>获取所有 SPI 扩展实现</a><a href=./#211-%E8%8E%B7%E5%8F%96%E6%89%80%E6%9C%89%E6%8B%93%E5%B1%95%E7%B1%BB>根据名称查询某个扩展实现</a>、根据类型查询扩展实现、查询匹配条件的扩展实现等。</li></ul><h3 id=11-spi定义>1.1 SPI定义</h3><p>Dubbo 中的 SPI 插件是标准的 Java Interface 定义,并且必须包含 <code>@org.apache.dubbo.common.extension.SPI</code> 注解:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>@SPI</span>(value <span style=color:#719e07>=</span> <span style=color:#2aa198>&#34;dubbo&#34;</span>, scope <span style=color:#719e07>=</span> ExtensionScope.FRAMEWORK)
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>Protocol</span> {
</span></span><span style=display:flex><span> <span style=color:#586e75>// ...</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p><code>@SPI</code> 注解的定义如下:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>@Documented</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>@Retention</span>(RetentionPolicy.RUNTIME)
</span></span><span style=display:flex><span><span style=color:#268bd2>@Target</span>({ElementType.TYPE})
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>@interface</span> SPI {
</span></span><span style=display:flex><span> <span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * default extension name
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span> String <span style=color:#268bd2>value</span>() <span style=color:#719e07>default</span> <span style=color:#2aa198>&#34;&#34;</span>;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * scope of SPI, default value is application scope.
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span> ExtensionScope <span style=color:#268bd2>scope</span>() <span style=color:#719e07>default</span> ExtensionScope.APPLICATION;
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=12-spi加载流程>1.2 SPI加载流程</h3><p>Dubbo 加载扩展的整个流程如下:</p><p><img src=/imgs/v3/concepts/extension-load.png alt=//imgs/v3/concepts/extension-load.png></p><p>主要步骤为 4 个:</p><ul><li>读取并解析配置文件</li><li>缓存所有扩展实现</li><li>基于用户执行的扩展名,实例化对应的扩展实现</li><li>进行扩展实例属性的 IOC 注入以及实例化扩展的包装类,实现 AOP 特性</li></ul><h2 id=2-dubbo-spi-源码分析>2. Dubbo SPI 源码分析</h2><h3 id=21-按名称获取指定扩展类>2.1 按名称获取指定扩展类</h3><p>Dubbo 中,SPI 加载固定扩展类的入口是 ExtensionLoader 的 getExtension 方法,下面我们对拓展类对象的获取过程进行详细的分析。</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>public</span> T <span style=color:#268bd2>getExtension</span>(String name) {
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (name <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>||</span> name.length() <span style=color:#719e07>==</span> 0)
</span></span><span style=display:flex><span> <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> IllegalArgumentException(<span style=color:#2aa198>&#34;Extension name == null&#34;</span>);
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (<span style=color:#2aa198>&#34;true&#34;</span>.equals(name)) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 获取默认的拓展实现类</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> getDefaultExtension();
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#586e75>// Holder,顾名思义,用于持有目标对象</span>
</span></span><span style=display:flex><span> Holder<span style=color:#719e07>&lt;</span>Object<span style=color:#719e07>&gt;</span> holder <span style=color:#719e07>=</span> cachedInstances.get(name);
</span></span><span style=display:flex><span> <span style=color:#586e75>// 这段逻辑保证了只有一个线程能够创建 Holder 对象</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (holder <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> cachedInstances.putIfAbsent(name, <span style=color:#719e07>new</span> Holder<span style=color:#719e07>&lt;</span>Object<span style=color:#719e07>&gt;</span>());
</span></span><span style=display:flex><span> holder <span style=color:#719e07>=</span> cachedInstances.get(name);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> Object instance <span style=color:#719e07>=</span> holder.get();
</span></span><span style=display:flex><span> <span style=color:#586e75>// 双重检查</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (instance <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>synchronized</span> (holder) {
</span></span><span style=display:flex><span> instance <span style=color:#719e07>=</span> holder.get();
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (instance <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 创建拓展实例</span>
</span></span><span style=display:flex><span> instance <span style=color:#719e07>=</span> createExtension(name);
</span></span><span style=display:flex><span> <span style=color:#586e75>// 设置实例到 holder 中</span>
</span></span><span style=display:flex><span> holder.set(instance);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> (T) instance;
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>上面代码的逻辑比较简单,首先检查缓存,缓存未命中则创建拓展对象。下面我们来看一下创建拓展对象的过程是怎样的。</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>private</span> T <span style=color:#268bd2>createExtension</span>(String name, <span style=color:#dc322f>boolean</span> wrap) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 从配置文件中加载所有的拓展类,可得到“配置项名称”到“配置类”的映射关系表</span>
</span></span><span style=display:flex><span> Class<span style=color:#719e07>&lt;?&gt;</span> clazz <span style=color:#719e07>=</span> getExtensionClasses().get(name);
</span></span><span style=display:flex><span> <span style=color:#586e75>// 如果没有该接口的扩展,或者该接口的实现类不允许重复但实际上重复了,直接抛出异常</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (clazz <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>||</span> unacceptableExceptions.contains(name)) {
</span></span><span style=display:flex><span> <span style=color:#719e07>throw</span> findException(name);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#719e07>try</span> {
</span></span><span style=display:flex><span> T instance <span style=color:#719e07>=</span> (T) EXTENSION_INSTANCES.get(clazz);
</span></span><span style=display:flex><span> <span style=color:#586e75>// 这段代码保证了扩展类只会被构造一次,也就是单例的.</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (instance <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> EXTENSION_INSTANCES.putIfAbsent(clazz, clazz.getDeclaredConstructor().newInstance());
</span></span><span style=display:flex><span> instance <span style=color:#719e07>=</span> (T) EXTENSION_INSTANCES.get(clazz);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#586e75>// 向实例中注入依赖</span>
</span></span><span style=display:flex><span> injectExtension(instance);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 如果启用包装的话,则自动为进行包装.</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 比如我基于 Protocol 定义了 DubboProtocol 的扩展,但实际上在 Dubbo 中不是直接使用的 DubboProtocol, 而是其包装类</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// ProtocolListenerWrapper</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (wrap) {
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> List<span style=color:#719e07>&lt;</span>Class<span style=color:#719e07>&lt;?&gt;&gt;</span> wrapperClassesList <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ArrayList<span style=color:#719e07>&lt;&gt;</span>();
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (cachedWrapperClasses <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> wrapperClassesList.addAll(cachedWrapperClasses);
</span></span><span style=display:flex><span> wrapperClassesList.sort(WrapperComparator.COMPARATOR);
</span></span><span style=display:flex><span> Collections.reverse(wrapperClassesList);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 循环创建 Wrapper 实例</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (CollectionUtils.isNotEmpty(wrapperClassesList)) {
</span></span><span style=display:flex><span> <span style=color:#719e07>for</span> (Class<span style=color:#719e07>&lt;?&gt;</span> wrapperClass : wrapperClassesList) {
</span></span><span style=display:flex><span> Wrapper wrapper <span style=color:#719e07>=</span> wrapperClass.getAnnotation(Wrapper.class);
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (wrapper <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>||</span> (ArrayUtils.contains(wrapper.matches(), name) <span style=color:#719e07>&amp;&amp;</span> <span style=color:#719e07>!</span>ArrayUtils.contains(wrapper.mismatches(), name))) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 将当前 instance 作为参数传给 Wrapper 的构造方法,并通过反射创建 Wrapper 实例。</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 然后向 Wrapper 实例中注入依赖,最后将 Wrapper 实例再次赋值给 instance 变量</span>
</span></span><span style=display:flex><span> instance <span style=color:#719e07>=</span> injectExtension((T) wrapperClass.getConstructor(type).newInstance(instance));
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#586e75>// 初始化</span>
</span></span><span style=display:flex><span> initExtension(instance);
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> instance;
</span></span><span style=display:flex><span> } <span style=color:#719e07>catch</span> (Throwable t) {
</span></span><span style=display:flex><span> <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> IllegalStateException(<span style=color:#2aa198>&#34;Extension instance (name: &#34;</span> <span style=color:#719e07>+</span> name <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;, class: &#34;</span> <span style=color:#719e07>+</span>
</span></span><span style=display:flex><span> type <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;) couldn&#39;t be instantiated: &#34;</span> <span style=color:#719e07>+</span> t.getMessage(), t);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>createExtension 方法的逻辑稍复杂一下,包含了如下的步骤:</p><ol><li>通过 getExtensionClasses 获取所有的拓展类</li><li>通过反射创建拓展对象</li><li>向拓展对象中注入依赖</li><li>将拓展对象包裹在相应的 Wrapper 对象中</li><li>初始化拓展对象</li></ol><p>以上步骤中,第一个步骤是加载拓展类的关键,第三和第四个步骤是 Dubbo IOC 与 AOP 的具体实现。在接下来的章节中,将会重点分析 getExtensionClasses 方法的逻辑,以及简单介绍 Dubbo IOC 的具体实现。</p><h4 id=211-获取所有拓展类>2.1.1 获取所有拓展类</h4><p>我们在通过名称获取拓展类之前,首先需要根据配置文件解析出拓展项名称到拓展类的映射关系表(Map&lt;名称, 拓展类>),之后再根据拓展项名称从映射关系表中取出相应的拓展类即可。相关过程的代码分析如下:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>private</span> Map<span style=color:#719e07>&lt;</span>String, Class<span style=color:#719e07>&lt;?&gt;&gt;</span> getExtensionClasses() {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 从缓存中获取已加载的拓展类</span>
</span></span><span style=display:flex><span> Map<span style=color:#719e07>&lt;</span>String, Class<span style=color:#719e07>&lt;?&gt;&gt;</span> classes <span style=color:#719e07>=</span> cachedClasses.get();
</span></span><span style=display:flex><span> <span style=color:#586e75>// 双重检查</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (classes <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>synchronized</span> (cachedClasses) {
</span></span><span style=display:flex><span> classes <span style=color:#719e07>=</span> cachedClasses.get();
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (classes <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 加载拓展类</span>
</span></span><span style=display:flex><span> classes <span style=color:#719e07>=</span> loadExtensionClasses();
</span></span><span style=display:flex><span> cachedClasses.set(classes);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> classes;
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>这里也是先检查缓存,若缓存未命中,则通过 synchronized 加锁。加锁后再次检查缓存,并判空。此时如果 classes 仍为 null,则通过 loadExtensionClasses 加载拓展类。下面分析 loadExtensionClasses 方法的逻辑。</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>private</span> Map<span style=color:#719e07>&lt;</span>String, Class<span style=color:#719e07>&lt;?&gt;&gt;</span> loadExtensionClasses() {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 缓存默认的 SPI 扩展名</span>
</span></span><span style=display:flex><span> cacheDefaultExtensionName();
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> Map<span style=color:#719e07>&lt;</span>String, Class<span style=color:#719e07>&lt;?&gt;&gt;</span> extensionClasses <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> HashMap<span style=color:#719e07>&lt;&gt;</span>();
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 基于策略来加载指定文件夹下的文件</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 目前有四种策略,分别读取 META-INF/services/ META-INF/dubbo/ META-INF/dubbo/internal/ META-INF/dubbo/external/ 这四个目录下的配置文件</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>for</span> (LoadingStrategy strategy : strategies) {
</span></span><span style=display:flex><span> loadDirectory(extensionClasses, strategy.directory(), type.getName(), strategy.preferExtensionClassLoader(), strategy.overridden(), strategy.excludedPackages());
</span></span><span style=display:flex><span> loadDirectory(extensionClasses, strategy.directory(), type.getName().replace(<span style=color:#2aa198>&#34;org.apache&#34;</span>, <span style=color:#2aa198>&#34;com.alibaba&#34;</span>), strategy.preferExtensionClassLoader(), strategy.overridden(), strategy.excludedPackages());
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> extensionClasses;
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>loadExtensionClasses 方法总共做了两件事情,一是对 SPI 注解进行解析,二是调用 loadDirectory 方法加载指定文件夹配置文件。SPI 注解解析过程比较简单,无需多说。下面我们来看一下 loadDirectory 做了哪些事情。</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>private</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>loadDirectory</span>(Map<span style=color:#719e07>&lt;</span>String, Class<span style=color:#719e07>&lt;?&gt;&gt;</span> extensionClasses, String dir, String type,
</span></span><span style=display:flex><span> <span style=color:#dc322f>boolean</span> extensionLoaderClassLoaderFirst, <span style=color:#dc322f>boolean</span> overridden, String... excludedPackages) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// fileName = 文件夹路径 + type 全限定名 </span>
</span></span><span style=display:flex><span> String fileName <span style=color:#719e07>=</span> dir <span style=color:#719e07>+</span> type;
</span></span><span style=display:flex><span> <span style=color:#719e07>try</span> {
</span></span><span style=display:flex><span> Enumeration<span style=color:#719e07>&lt;</span>java.net.URL<span style=color:#719e07>&gt;</span> urls <span style=color:#719e07>=</span> <span style=color:#cb4b16>null</span>;
</span></span><span style=display:flex><span> ClassLoader classLoader <span style=color:#719e07>=</span> findClassLoader();
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// try to load from ExtensionLoader&#39;s ClassLoader first</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (extensionLoaderClassLoaderFirst) {
</span></span><span style=display:flex><span> ClassLoader extensionLoaderClassLoader <span style=color:#719e07>=</span> ExtensionLoader.class.getClassLoader();
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (ClassLoader.getSystemClassLoader() <span style=color:#719e07>!=</span> extensionLoaderClassLoader) {
</span></span><span style=display:flex><span> urls <span style=color:#719e07>=</span> extensionLoaderClassLoader.getResources(fileName);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#586e75>// 根据文件名加载所有的同名文件</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (urls <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>||</span> <span style=color:#719e07>!</span>urls.hasMoreElements()) {
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (classLoader <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> urls <span style=color:#719e07>=</span> classLoader.getResources(fileName);
</span></span><span style=display:flex><span> } <span style=color:#719e07>else</span> {
</span></span><span style=display:flex><span> urls <span style=color:#719e07>=</span> ClassLoader.getSystemResources(fileName);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (urls <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#719e07>while</span> (urls.hasMoreElements()) {
</span></span><span style=display:flex><span> java.net.URL resourceURL <span style=color:#719e07>=</span> urls.nextElement();
</span></span><span style=display:flex><span> <span style=color:#586e75>// 加载资源</span>
</span></span><span style=display:flex><span> loadResource(extensionClasses, classLoader, resourceURL, overridden, excludedPackages);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> } <span style=color:#719e07>catch</span> (Throwable t) {
</span></span><span style=display:flex><span> logger.error(<span style=color:#2aa198>&#34;Exception occurred when loading extension class (interface: &#34;</span> <span style=color:#719e07>+</span>
</span></span><span style=display:flex><span> type <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;, description file: &#34;</span> <span style=color:#719e07>+</span> fileName <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;).&#34;</span>, t);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>loadDirectory 方法先通过 classLoader 获取所有资源链接,然后再通过 loadResource 方法加载资源。我们继续跟下去,看一下 loadResource 方法的实现。</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>private</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>loadResource</span>(Map<span style=color:#719e07>&lt;</span>String, Class<span style=color:#719e07>&lt;?&gt;&gt;</span> extensionClasses, ClassLoader classLoader,
</span></span><span style=display:flex><span> java.net.URL resourceURL, <span style=color:#dc322f>boolean</span> overridden, String... excludedPackages) {
</span></span><span style=display:flex><span> <span style=color:#719e07>try</span> {
</span></span><span style=display:flex><span> <span style=color:#719e07>try</span> (BufferedReader reader <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> BufferedReader(<span style=color:#719e07>new</span> InputStreamReader(resourceURL.openStream(), StandardCharsets.UTF_8))) {
</span></span><span style=display:flex><span> String line;
</span></span><span style=display:flex><span> String clazz <span style=color:#719e07>=</span> <span style=color:#cb4b16>null</span>;
</span></span><span style=display:flex><span> <span style=color:#586e75>// 按行读取配置内容</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>while</span> ((line <span style=color:#719e07>=</span> reader.readLine()) <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 定位 # 字符</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>final</span> <span style=color:#dc322f>int</span> ci <span style=color:#719e07>=</span> line.indexOf(<span style=color:#2aa198>&#39;#&#39;</span>);
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (ci <span style=color:#719e07>&gt;=</span> 0) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 截取 # 之前的字符串,# 之后的内容为注释,需要忽略</span>
</span></span><span style=display:flex><span> line <span style=color:#719e07>=</span> line.substring(0, ci);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> line <span style=color:#719e07>=</span> line.trim();
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (line.length() <span style=color:#719e07>&gt;</span> 0) {
</span></span><span style=display:flex><span> <span style=color:#719e07>try</span> {
</span></span><span style=display:flex><span> String name <span style=color:#719e07>=</span> <span style=color:#cb4b16>null</span>;
</span></span><span style=display:flex><span> <span style=color:#586e75>// 以等于号 = 为界,截取键与值</span>
</span></span><span style=display:flex><span> <span style=color:#dc322f>int</span> i <span style=color:#719e07>=</span> line.indexOf(<span style=color:#2aa198>&#39;=&#39;</span>);
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (i <span style=color:#719e07>&gt;</span> 0) {
</span></span><span style=display:flex><span> name <span style=color:#719e07>=</span> line.substring(0, i).trim();
</span></span><span style=display:flex><span> clazz <span style=color:#719e07>=</span> line.substring(i <span style=color:#719e07>+</span> 1).trim();
</span></span><span style=display:flex><span> } <span style=color:#719e07>else</span> {
</span></span><span style=display:flex><span> clazz <span style=color:#719e07>=</span> line;
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#586e75>// 加载类,并通过 loadClass 方法对类进行缓存</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (StringUtils.isNotEmpty(clazz) <span style=color:#719e07>&amp;&amp;</span> <span style=color:#719e07>!</span>isExcluded(clazz, excludedPackages)) {
</span></span><span style=display:flex><span> loadClass(extensionClasses, resourceURL, Class.forName(clazz, <span style=color:#cb4b16>true</span>, classLoader), name, overridden);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> } <span style=color:#719e07>catch</span> (Throwable t) {
</span></span><span style=display:flex><span> IllegalStateException e <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> IllegalStateException(<span style=color:#2aa198>&#34;Failed to load extension class (interface: &#34;</span> <span style=color:#719e07>+</span> type <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;, class line: &#34;</span> <span style=color:#719e07>+</span> line <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;) in &#34;</span> <span style=color:#719e07>+</span> resourceURL <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;, cause: &#34;</span> <span style=color:#719e07>+</span> t.getMessage(), t);
</span></span><span style=display:flex><span> exceptions.put(line, e);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> } <span style=color:#719e07>catch</span> (Throwable t) {
</span></span><span style=display:flex><span> logger.error(<span style=color:#2aa198>&#34;Exception occurred when loading extension class (interface: &#34;</span> <span style=color:#719e07>+</span>
</span></span><span style=display:flex><span> type <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;, class file: &#34;</span> <span style=color:#719e07>+</span> resourceURL <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;) in &#34;</span> <span style=color:#719e07>+</span> resourceURL, t);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>loadResource 方法用于读取和解析配置文件,并通过反射加载类,最后调用 loadClass 方法进行其他操作。loadClass 方法用于主要用于操作缓存,该方法的逻辑如下:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>private</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>loadClass</span>(Map<span style=color:#719e07>&lt;</span>String, Class<span style=color:#719e07>&lt;?&gt;&gt;</span> extensionClasses, java.net.URL resourceURL, Class<span style=color:#719e07>&lt;?&gt;</span> clazz, String name,
</span></span><span style=display:flex><span> <span style=color:#dc322f>boolean</span> overridden) <span style=color:#268bd2>throws</span> NoSuchMethodException {
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (<span style=color:#719e07>!</span>type.isAssignableFrom(clazz)) {
</span></span><span style=display:flex><span> <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> IllegalStateException(<span style=color:#2aa198>&#34;Error occurred when loading extension class (interface: &#34;</span> <span style=color:#719e07>+</span>
</span></span><span style=display:flex><span> type <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;, class line: &#34;</span> <span style=color:#719e07>+</span> clazz.getName() <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;), class &#34;</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>+</span> clazz.getName() <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34; is not subtype of interface.&#34;</span>);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#586e75>// 检测目标类上是否有 Adaptive 注解</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (clazz.isAnnotationPresent(Adaptive.class)) {
</span></span><span style=display:flex><span> cacheAdaptiveClass(clazz, overridden);
</span></span><span style=display:flex><span> } <span style=color:#719e07>else</span> <span style=color:#719e07>if</span> (isWrapperClass(clazz)) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 缓存包装类</span>
</span></span><span style=display:flex><span> cacheWrapperClass(clazz);
</span></span><span style=display:flex><span> } <span style=color:#719e07>else</span> {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 进入到这里,表明只是该类只是一个普通的拓展类</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 检测 clazz 是否有默认的构造方法,如果没有,则抛出异常</span>
</span></span><span style=display:flex><span> clazz.getConstructor();
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (StringUtils.isEmpty(name)) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 如果 name 为空,则尝试从 Extension 注解中获取 name,或使用小写的类名作为 name</span>
</span></span><span style=display:flex><span> name <span style=color:#719e07>=</span> findAnnotationName(clazz);
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (name.length() <span style=color:#719e07>==</span> 0) {
</span></span><span style=display:flex><span> <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> IllegalStateException(<span style=color:#2aa198>&#34;No such extension name for the class &#34;</span> <span style=color:#719e07>+</span> clazz.getName() <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34; in the config &#34;</span> <span style=color:#719e07>+</span> resourceURL);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> String<span style=color:#719e07>[]</span> names <span style=color:#719e07>=</span> NAME_SEPARATOR.split(name);
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (ArrayUtils.isNotEmpty(names)) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 如果类上有 Activate 注解,则使用 names 数组的第一个元素作为键,</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 存储 name 到 Activate 注解对象的映射关系</span>
</span></span><span style=display:flex><span> cacheActivateClass(clazz, names<span style=color:#719e07>[</span>0<span style=color:#719e07>]</span>);
</span></span><span style=display:flex><span> <span style=color:#719e07>for</span> (String n : names) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 存储 Class 到名称的映射关系</span>
</span></span><span style=display:flex><span> cacheName(clazz, n);
</span></span><span style=display:flex><span> <span style=color:#586e75>// 存储 name 到 Class 的映射关系.</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 如果存在同一个扩展名对应多个实现类,基于 override 参数是否允许覆盖,如果不允许,则抛出异常.</span>
</span></span><span style=display:flex><span> saveInExtensionClass(extensionClasses, clazz, n, overridden);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>如上,loadClass 方法操作了不同的缓存,比如 cachedAdaptiveClass、cachedWrapperClasses 和 cachedNames 等等。除此之外,该方法没有其他什么逻辑了。</p><p>到此,关于缓存类加载的过程就分析完了。整个过程没什么特别复杂的地方,大家按部就班的分析即可,不懂的地方可以调试一下。</p><h3 id=22-加载自适应扩展类>2.2 加载自适应扩展类</h3><p>先说明下自适应扩展类的使用场景。比如我们有需求,在调用某一个方法时,基于参数选择调用到不同的实现类,这和工厂方法有些类似,基于不同的参数,构造出不同的实例对象。在 Dubbo 中实现的思路和这个差不多,不过 Dubbo 的实现更加灵活,它的实现和策略模式有些类似。每一种扩展类相当于一种策略,基于 URL 消息总线,将参数传递给 ExtensionLoader,通过 ExtensionLoader 基于参数加载对应的扩展类,实现运行时动态调用到目标实例上。</p><p>自适应扩展类的含义是说,基于参数,在运行时动态选择到具体的目标类,然后执行。</p><p>在 Dubbo 中,很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等。有时,有些拓展并不想在框架启动阶段被加载,而是希望在拓展方法被调用时,根据运行时参数进行加载。这听起来有些矛盾。拓展未被加载,那么拓展方法就无法被调用(静态方法除外)。拓展方法未被调用,拓展就无法被加载。对于这个矛盾的问题,Dubbo 通过自适应拓展机制很好的解决了。自适应拓展机制的实现逻辑比较复杂,首先 Dubbo 会为拓展接口生成具有代理功能的代码。然后通过 javassist 或 jdk 编译这段代码,得到 Class 类。最后再通过反射创建代理类,整个过程比较复杂。</p><p>加载自适应扩展类的入口是 ExtensionLoader 的 getAdaptiveExtension 方法。</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>public</span> T <span style=color:#268bd2>getAdaptiveExtension</span>() {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 从缓存中获取自适应拓展</span>
</span></span><span style=display:flex><span> Object instance <span style=color:#719e07>=</span> cachedAdaptiveInstance.get();
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (instance <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 如果存在异常,则直接抛出</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (createAdaptiveInstanceError <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> IllegalStateException(<span style=color:#2aa198>&#34;Failed to create adaptive instance: &#34;</span> <span style=color:#719e07>+</span>
</span></span><span style=display:flex><span> createAdaptiveInstanceError.toString(),
</span></span><span style=display:flex><span> createAdaptiveInstanceError);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>synchronized</span> (cachedAdaptiveInstance) {
</span></span><span style=display:flex><span> instance <span style=color:#719e07>=</span> cachedAdaptiveInstance.get();
</span></span><span style=display:flex><span> <span style=color:#586e75>// double check</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (instance <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#719e07>try</span> {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 创建自适应拓展</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 这里分为两种情况:一种是存在 Adaptive 类,另一个是需要生成 Adaptive 类</span>
</span></span><span style=display:flex><span> instance <span style=color:#719e07>=</span> createAdaptiveExtension();
</span></span><span style=display:flex><span> cachedAdaptiveInstance.set(instance);
</span></span><span style=display:flex><span> } <span style=color:#719e07>catch</span> (Throwable t) {
</span></span><span style=display:flex><span> createAdaptiveInstanceError <span style=color:#719e07>=</span> t;
</span></span><span style=display:flex><span> <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> IllegalStateException(<span style=color:#2aa198>&#34;Failed to create adaptive instance: &#34;</span> <span style=color:#719e07>+</span> t.toString(), t);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> (T) instance;
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>getAdaptiveExtension 方法首先会检查缓存,缓存未命中,则调用 createAdaptiveExtension 方法创建自适应拓展。下面,我们看一下 createAdaptiveExtension 方法的代码。</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>private</span> T <span style=color:#268bd2>createAdaptiveExtension</span>() {
</span></span><span style=display:flex><span> <span style=color:#719e07>try</span> {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 获取自适应拓展类,并通过反射实例化</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> injectExtension((T) getAdaptiveExtensionClass().newInstance());
</span></span><span style=display:flex><span> } <span style=color:#719e07>catch</span> (Exception e) {
</span></span><span style=display:flex><span> <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> IllegalStateException(<span style=color:#2aa198>&#34;Can not create adaptive extension ...&#34;</span>);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>createAdaptiveExtension 方法的代码比较少,但却包含了三个逻辑,分别如下:</p><ol><li>调用 getAdaptiveExtensionClass 方法获取自适应拓展 Class 对象</li><li>通过反射进行实例化</li><li>调用 injectExtension 方法向拓展实例中注入依赖</li></ol><p>前两个逻辑比较好理解,第三个逻辑用于向自适应拓展对象中注入依赖。这个逻辑看似多余,但有存在的必要,这里简单说明一下。前面说过,Dubbo 中有两种类型的自适应拓展,一种是手工编码的,一种是自动生成的。手工编码的自适应拓展中可能存在着一些依赖,而自动生成的 Adaptive 拓展则不会依赖其他类。这里调用 injectExtension 方法的目的是为手工编码的自适应拓展注入依赖,这一点需要大家注意一下。关于 injectExtension 方法,前文已经分析过了,这里不再赘述。接下来,分析 getAdaptiveExtensionClass 方法的逻辑。</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>private</span> Class<span style=color:#719e07>&lt;?&gt;</span> getAdaptiveExtensionClass() {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 通过 SPI 获取所有的拓展类</span>
</span></span><span style=display:flex><span> getExtensionClasses();
</span></span><span style=display:flex><span> <span style=color:#586e75>// 检查缓存,若缓存不为空,则直接返回缓存</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (cachedAdaptiveClass <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> cachedAdaptiveClass;
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#586e75>// 创建自适应拓展类</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> cachedAdaptiveClass <span style=color:#719e07>=</span> createAdaptiveExtensionClass();
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>getAdaptiveExtensionClass 方法同样包含了三个逻辑,如下:</p><ol><li>调用 getExtensionClasses 获取所有的拓展类</li><li>检查缓存,若缓存不为空,则返回缓存</li><li>若缓存为空,则调用 createAdaptiveExtensionClass 创建自适应拓展类</li></ol><p>这三个逻辑看起来平淡无奇,似乎没有多讲的必要。但是这些平淡无奇的代码中隐藏了着一些细节,需要说明一下。首先从第一个逻辑说起,getExtensionClasses 这个方法用于获取某个接口的所有实现类。比如该方法可以获取 Protocol 接口的 DubboProtocol、HttpProtocol、InjvmProtocol 等实现类。在获取实现类的过程中,如果某个实现类被 Adaptive 注解修饰了,那么该类就会被赋值给 cachedAdaptiveClass 变量。此时,上面步骤中的第二步条件成立(缓存不为空),直接返回 cachedAdaptiveClass 即可。如果所有的实现类均未被 Adaptive 注解修饰,那么执行第三步逻辑,创建自适应拓展类。相关代码如下:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>private</span> Class<span style=color:#719e07>&lt;?&gt;</span> createAdaptiveExtensionClass() {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 构建自适应拓展代码</span>
</span></span><span style=display:flex><span> String code <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> AdaptiveClassCodeGenerator(type, cachedDefaultName).generate();
</span></span><span style=display:flex><span> ClassLoader classLoader <span style=color:#719e07>=</span> findClassLoader();
</span></span><span style=display:flex><span> <span style=color:#586e75>// 获取编译器实现类</span>
</span></span><span style=display:flex><span> org.apache.dubbo.common.compiler.Compiler compiler <span style=color:#719e07>=</span> ExtensionLoader.getExtensionLoader(org.apache.dubbo.common.compiler.Compiler.class).getAdaptiveExtension();
</span></span><span style=display:flex><span> <span style=color:#586e75>// 编译代码,生成 Class</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> compiler.compile(code, classLoader);
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>createAdaptiveExtensionClass 方法用于生成自适应拓展类,该方法首先会生成自适应拓展类的源码,然后通过 Compiler 实例(Dubbo 默认使用 javassist 作为编译器)编译源码,得到代理类 Class 实例。接下来,我们把重点放在代理类代码生成的逻辑上,其他逻辑大家自行分析。</p><h4 id=221-自适应拓展类代码生成>2.2.1 自适应拓展类代码生成</h4><p>AdaptiveClassCodeGenerator#generate 方法生成扩展类代码</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>public</span> String <span style=color:#268bd2>generate</span>() {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 如果该接口中没有方法被 @Adaptive 注解修饰,直接抛出异常</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (<span style=color:#719e07>!</span>hasAdaptiveMethod()) {
</span></span><span style=display:flex><span> <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> IllegalStateException(<span style=color:#2aa198>&#34;No adaptive method exist on extension &#34;</span> <span style=color:#719e07>+</span> type.getName() <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;, refuse to create the adaptive class!&#34;</span>);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> StringBuilder code <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> StringBuilder();
</span></span><span style=display:flex><span> <span style=color:#586e75>// 生成包名、import、方法等.</span>
</span></span><span style=display:flex><span> code.append(generatePackageInfo());
</span></span><span style=display:flex><span> code.append(generateImports());
</span></span><span style=display:flex><span> code.append(generateClassDeclaration());
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> Method<span style=color:#719e07>[]</span> methods <span style=color:#719e07>=</span> type.getMethods();
</span></span><span style=display:flex><span> <span style=color:#719e07>for</span> (Method method : methods) {
</span></span><span style=display:flex><span> code.append(generateMethod(method));
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> code.append(<span style=color:#2aa198>&#34;}&#34;</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (logger.isDebugEnabled()) {
</span></span><span style=display:flex><span> logger.debug(code.toString());
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> code.toString();
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h4 id=222-生成方法>2.2.2 生成方法</h4><p>上面代码中,生成方法的逻辑是最关键的,我们详细分析下。</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>private</span> String <span style=color:#268bd2>generateMethod</span>(Method method) {
</span></span><span style=display:flex><span> String methodReturnType <span style=color:#719e07>=</span> method.getReturnType().getCanonicalName();
</span></span><span style=display:flex><span> String methodName <span style=color:#719e07>=</span> method.getName();
</span></span><span style=display:flex><span> <span style=color:#586e75>// 生成方法内容</span>
</span></span><span style=display:flex><span> String methodContent <span style=color:#719e07>=</span> generateMethodContent(method);
</span></span><span style=display:flex><span> String methodArgs <span style=color:#719e07>=</span> generateMethodArguments(method);
</span></span><span style=display:flex><span> String methodThrows <span style=color:#719e07>=</span> generateMethodThrows(method);
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> String.format(CODE_METHOD_DECLARATION, methodReturnType, methodName, methodArgs, methodThrows, methodContent);
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>generateMethodContent 分析</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>private</span> String <span style=color:#268bd2>generateMethodContent</span>(Method method) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 该方法上必须有 @Adaptive 注解修饰</span>
</span></span><span style=display:flex><span> Adaptive adaptiveAnnotation <span style=color:#719e07>=</span> method.getAnnotation(Adaptive.class);
</span></span><span style=display:flex><span> StringBuilder code <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> StringBuilder(512);
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (adaptiveAnnotation <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 没有 @Adaptive 注解修饰,生成异常信息</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> generateUnsupported(method);
</span></span><span style=display:flex><span> } <span style=color:#719e07>else</span> {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 获取 URL 在参数列表上的索引</span>
</span></span><span style=display:flex><span> <span style=color:#dc322f>int</span> urlTypeIndex <span style=color:#719e07>=</span> getUrlTypeIndex(method);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (urlTypeIndex <span style=color:#719e07>!=</span> <span style=color:#719e07>-</span>1) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 如果参数列表上存在 URL,生成对 URL 进行空检查</span>
</span></span><span style=display:flex><span> code.append(generateUrlNullCheck(urlTypeIndex));
</span></span><span style=display:flex><span> } <span style=color:#719e07>else</span> {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 如果参数列表不存在 URL 类型的参数,那么就看参数列表上参数对象中是否包含 getUrl 方法</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 有的话,生成 URL 空检查</span>
</span></span><span style=display:flex><span> code.append(generateUrlAssignmentIndirectly(method));
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#586e75>// 解析 Adaptive 注解上的 value 属性</span>
</span></span><span style=display:flex><span> String<span style=color:#719e07>[]</span> value <span style=color:#719e07>=</span> getMethodAdaptiveValue(adaptiveAnnotation);
</span></span><span style=display:flex><span> <span style=color:#586e75>// 如果参数列表上有 Invocation 类型的参数,生成空检查并获取 methodName.</span>
</span></span><span style=display:flex><span> <span style=color:#dc322f>boolean</span> hasInvocation <span style=color:#719e07>=</span> hasInvocationArgument(method);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> code.append(generateInvocationArgumentNullCheck(method));
</span></span><span style=display:flex><span> <span style=color:#586e75>// 这段逻辑主要就是为了生成 extName(也就是扩展名)</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 分为多种情况:</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 1.defaultExtName 是否存在</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 2.参数中是否存在 invocation 类型参数</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 3.是否是为 protocol 生成代理</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 为什么要对 protocol 单独考虑了?因为 URL 中有获取 protocol 值的方法</span>
</span></span><span style=display:flex><span> code.append(generateExtNameAssignment(value, hasInvocation));
</span></span><span style=display:flex><span> <span style=color:#586e75>// check extName == null?</span>
</span></span><span style=display:flex><span> code.append(generateExtNameNullCheck(value));
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 生成获取扩展(使用 ExtensionLoader.getExtension 方法)</span>
</span></span><span style=display:flex><span> code.append(generateExtensionAssignment());
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 生成返回语句</span>
</span></span><span style=display:flex><span> code.append(generateReturnAndInvocation(method));
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> code.toString();
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>上面那段逻辑主要做了如下几件事:
1.检查方法上是否 Adaptive 注解修饰
2.为方法生成代码的时候,参数列表上要有 URL(或参数对象中有 URL)
3.使用 ExtensionLoader.getExtension 获取扩展
4.执行对应的方法</p><h4 id=223-附一个动态生成代码后的例子>2.2.3 附一个动态生成代码后的例子</h4><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#719e07>package</span> org.apache.dubbo.common.extension.adaptive;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.apache.dubbo.common.extension.ExtensionLoader;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>HasAdaptiveExt$Adaptive</span> <span style=color:#268bd2>implements</span> org.apache.dubbo.common.extension.adaptive.HasAdaptiveExt {
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> java.lang.String <span style=color:#268bd2>echo</span>(org.apache.dubbo.common.URL arg0,
</span></span><span style=display:flex><span> java.lang.String arg1) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// URL 空校验</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (arg0 <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> IllegalArgumentException(<span style=color:#2aa198>&#34;url == null&#34;</span>);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> org.apache.dubbo.common.URL url <span style=color:#719e07>=</span> arg0;
</span></span><span style=display:flex><span> <span style=color:#586e75>// 获取扩展名</span>
</span></span><span style=display:flex><span> String extName <span style=color:#719e07>=</span> url.getParameter(<span style=color:#2aa198>&#34;has.adaptive.ext&#34;</span>, <span style=color:#2aa198>&#34;adaptive&#34;</span>);
</span></span><span style=display:flex><span> <span style=color:#586e75>// 扩展名空校验</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (extName <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> IllegalStateException(
</span></span><span style=display:flex><span> <span style=color:#2aa198>&#34;Failed to get extension (org.apache.dubbo.common.extension.adaptive.HasAdaptiveExt) name from url (&#34;</span> <span style=color:#719e07>+</span>
</span></span><span style=display:flex><span> url.toString() <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;) use keys([has.adaptive.ext])&#34;</span>);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#586e75>// 获取扩展</span>
</span></span><span style=display:flex><span> org.apache.dubbo.common.extension.adaptive.HasAdaptiveExt extension <span style=color:#719e07>=</span> (org.apache.dubbo.common.extension.adaptive.HasAdaptiveExt) ExtensionLoader.getExtensionLoader(org.apache.dubbo.common.extension.adaptive.HasAdaptiveExt.class)
</span></span><span style=display:flex><span> .getExtension(extName);
</span></span><span style=display:flex><span> <span style=color:#586e75>// 执行对应的方法</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> extension.echo(arg0, arg1);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=23-ioc-机制>2.3 IOC 机制</h3><p>Dubbo IOC 是通过 setter 方法注入依赖。Dubbo 首先会通过反射获取到实例的所有方法,然后再遍历方法列表,检测方法名是否具有 setter 方法特征。若有,则通过 ObjectFactory 获取依赖对象,最后通过反射调用 setter 方法将依赖设置到目标对象中。整个过程对应的代码如下:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>private</span> T <span style=color:#268bd2>injectExtension</span>(T instance) {
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (objectFactory <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> instance;
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#719e07>try</span> {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 遍历目标类的所有方法</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>for</span> (Method method : instance.getClass().getMethods()) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 检测方法是否以 set 开头,且方法仅有一个参数,且方法访问级别为 public</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (<span style=color:#719e07>!</span>isSetter(method)) {
</span></span><span style=display:flex><span> <span style=color:#719e07>continue</span>;
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * 检测是否有 DisableInject 注解修饰.
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (method.getAnnotation(DisableInject.class) <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#719e07>continue</span>;
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * 检测是否实现了ScopeModelAware、ExtensionAccessorAware类,如果实现则不注入
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (method.getDeclaringClass() <span style=color:#719e07>==</span> ScopeModelAware.class) {
</span></span><span style=display:flex><span> <span style=color:#719e07>continue</span>;
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (instance <span style=color:#719e07>instanceof</span> ScopeModelAware <span style=color:#719e07>||</span> instance <span style=color:#719e07>instanceof</span> ExtensionAccessorAware) {
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (ignoredInjectMethodsDesc.contains(ReflectUtils.getDesc(method))) {
</span></span><span style=display:flex><span> <span style=color:#719e07>continue</span>;
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 基本类型不注入</span>
</span></span><span style=display:flex><span> Class<span style=color:#719e07>&lt;?&gt;</span> pt <span style=color:#719e07>=</span> method.getParameterTypes()<span style=color:#719e07>[</span>0<span style=color:#719e07>]</span>;
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (ReflectUtils.isPrimitives(pt)) {
</span></span><span style=display:flex><span> <span style=color:#719e07>continue</span>;
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#719e07>try</span> {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 获取属性名,比如 setName 方法对应属性名 name</span>
</span></span><span style=display:flex><span> String property <span style=color:#719e07>=</span> getSetterProperty(method);
</span></span><span style=display:flex><span> <span style=color:#586e75>// 从 ObjectFactory 中获取依赖对象</span>
</span></span><span style=display:flex><span> Object object <span style=color:#719e07>=</span> objectFactory.getExtension(pt, property);
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (object <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 注入</span>
</span></span><span style=display:flex><span> method.invoke(instance, object);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> } <span style=color:#719e07>catch</span> (Exception e) {
</span></span><span style=display:flex><span> logger.error(<span style=color:#2aa198>&#34;Failed to inject via method &#34;</span> <span style=color:#719e07>+</span> method.getName()
</span></span><span style=display:flex><span> <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34; of interface &#34;</span> <span style=color:#719e07>+</span> type.getName() <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;: &#34;</span> <span style=color:#719e07>+</span> e.getMessage(), e);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> } <span style=color:#719e07>catch</span> (Exception e) {
</span></span><span style=display:flex><span> logger.error(e.getMessage(), e);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> instance;
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>在上面代码中,objectFactory 变量的类型为 AdaptiveExtensionFactory,AdaptiveExtensionFactory 内部维护了一个 ExtensionFactory 列表,用于存储其他类型的 ExtensionFactory。Dubbo 目前提供了两种 ExtensionFactory,分别是 SpiExtensionFactory 和 SpringExtensionFactory。前者用于创建自适应的拓展,后者是用于从 Spring 的 IOC 容器中获取所需的拓展。这两个类的类的代码不是很复杂,这里就不一一分析了。</p><p>Dubbo IOC 目前仅支持 setter 方式注入,总的来说,逻辑比较简单易懂。</p><h3 id=24-aop-机制>2.4 AOP 机制</h3><p>Dubbo AOP 机制采用 wrapper 设计模式实现,要成为一个 AOP wrapper 类,必须同时满足以下几个条件:</p><ol><li>wrapper 类必须实现 SPI 接口,如以下示例中的 <code>class QosProtocolWrapper implements Protocol</code></li><li>构造器 constructor 必须包含一个相同的 SPI 参数,如以下示例中 <code>QosProtocolWrapper(Protocol protocol)</code></li><li>wrapper 类必须和普通的 SPI 实现一样写入配置文件,如以下示例 <code>resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol</code></li></ol><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>QosProtocolWrapper</span> <span style=color:#268bd2>implements</span> Protocol, ScopeModelAware {
</span></span><span style=display:flex><span> <span style=color:#268bd2>private</span> <span style=color:#268bd2>final</span> Protocol protocol;
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> <span style=color:#268bd2>QosProtocolWrapper</span>(Protocol protocol) {
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (protocol <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> IllegalArgumentException(<span style=color:#2aa198>&#34;protocol == null&#34;</span>);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#719e07>this</span>.protocol <span style=color:#719e07>=</span> protocol;
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>写入配置文件 <code>resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol</code></p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-properties data-lang=properties><span style=display:flex><span>qos<span style=color:#719e07>=</span><span style=color:#2aa198>org.apache.dubbo.qos.protocol.QosProtocolWrapper</span>
</span></span></code></pre></div><p>在通过 <code>getExtension(name)</code> 尝试获取并加载 SPI 扩展实例时,Dubbo 框架会判断所有满足以上 3 个条件的 wrapper 类实现,并将 wrapper 类按顺序包在实例外面,从而达到 AOP 拦截的效果。</p><p>以下是 wrapper 判断与加载的实现逻辑,你还可以使用 @Wrapper 注解来控制 wrapper 类的激活条件:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>private</span> T <span style=color:#268bd2>createExtension</span>(String name, <span style=color:#dc322f>boolean</span> wrap) {
</span></span><span style=display:flex><span> Class<span style=color:#719e07>&lt;?&gt;</span> clazz <span style=color:#719e07>=</span> getExtensionClasses().get(name);
</span></span><span style=display:flex><span> T instance <span style=color:#719e07>=</span> (T) extensionInstances.get(clazz);
</span></span><span style=display:flex><span> <span style=color:#586e75>// ...</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (wrap) { <span style=color:#586e75>// 如果调用方告知需要 AOP,即 wrap=true</span>
</span></span><span style=display:flex><span> List<span style=color:#719e07>&lt;</span>Class<span style=color:#719e07>&lt;?&gt;&gt;</span> wrapperClassesList <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ArrayList<span style=color:#719e07>&lt;&gt;</span>();
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (cachedWrapperClasses <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> wrapperClassesList.addAll(cachedWrapperClasses);
</span></span><span style=display:flex><span> wrapperClassesList.sort(WrapperComparator.COMPARATOR);
</span></span><span style=display:flex><span> Collections.reverse(wrapperClassesList);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (CollectionUtils.isNotEmpty(wrapperClassesList)) {
</span></span><span style=display:flex><span> <span style=color:#719e07>for</span> (Class<span style=color:#719e07>&lt;?&gt;</span> wrapperClass : wrapperClassesList) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 通过 @Wrapper 注解判断当前 wrapper 类是否要生效</span>
</span></span><span style=display:flex><span> Wrapper wrapper <span style=color:#719e07>=</span> wrapperClass.getAnnotation(Wrapper.class);
</span></span><span style=display:flex><span> <span style=color:#dc322f>boolean</span> match <span style=color:#719e07>=</span> (wrapper <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span>)
</span></span><span style=display:flex><span> <span style=color:#719e07>||</span> ((ArrayUtils.isEmpty(wrapper.matches())
</span></span><span style=display:flex><span> <span style=color:#719e07>||</span> ArrayUtils.contains(wrapper.matches(), name))
</span></span><span style=display:flex><span> <span style=color:#719e07>&amp;&amp;</span> <span style=color:#719e07>!</span>ArrayUtils.contains(wrapper.mismatches(), name));
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (match) {
</span></span><span style=display:flex><span> instance <span style=color:#719e07>=</span> injectExtension(
</span></span><span style=display:flex><span> (T) wrapperClass.getConstructor(type).newInstance(instance));
</span></span><span style=display:flex><span> instance <span style=color:#719e07>=</span> postProcessAfterInitialization(instance, name);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=25-activate激活条件>2.5 Activate激活条件</h3><p>可以使用 <code>@org.apache.dubbo.common.extension.Activate</code> 来控制 SPI 扩展实现在什么场景下加载生效。相比于任何场景下都生效,能精确的控制扩展实现的生效条件会让实现变得更灵活。</p><p>以下是一些使用场景示例:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#586e75>// 不加 @Activate 注解,getActivateExtension() 时不会加载,其他 getExtension() 方法仍可正常加载</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>MetricsProviderFilter</span> <span style=color:#268bd2>implements</span> Filter{}
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#586e75>// 不加任何参数,表示在 getActivateExtension() 时无条件自动返回</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>@Activate</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>MetricsProviderFilter</span> <span style=color:#268bd2>implements</span> Filter{}
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#586e75>// group 支持 consumer、provider 两个固定值,getActivateExtension() 调用加载扩展点时自动过滤</span>
</span></span><span style=display:flex><span><span style=color:#586e75>// provider 表示在提供者端会被加载;consumer 表示在消费者端会被加载</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>@Activate</span>(group<span style=color:#719e07>=</span><span style=color:#2aa198>&#34;provider&#34;</span>)
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>MetricsProviderFilter</span> <span style=color:#268bd2>implements</span> Filter{}
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#586e75>// URL 参数中有 cache 这个 key 时,调用 getActivateExtension() 才会加载</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>@Activate</span>(value<span style=color:#719e07>=</span><span style=color:#2aa198>&#34;cache&#34;</span>)
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>MetricsProviderFilter</span> <span style=color:#268bd2>implements</span> Filter{}
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#586e75>// URL 参数中有 cache 这个 key 并且值为 test 时,调用 getActivateExtension() 才会加载</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>@Activate</span>(value<span style=color:#719e07>=</span><span style=color:#2aa198>&#34;cache:test&#34;</span>)
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>MetricsProviderFilter</span> <span style=color:#268bd2>implements</span> Filter{}
</span></span></code></pre></div><p>以下是 <code>@Activate</code> 注解的具体定义:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * Activate. This annotation is useful for automatically activate certain extensions with the given criteria,
</span></span></span><span style=display:flex><span><span style=color:#586e75> * for examples: &lt;code&gt;@Activate&lt;/code&gt; can be used to load certain &lt;code&gt;Filter&lt;/code&gt; extension when there are
</span></span></span><span style=display:flex><span><span style=color:#586e75> * multiple implementations.
</span></span></span><span style=display:flex><span><span style=color:#586e75> * &lt;ol&gt;
</span></span></span><span style=display:flex><span><span style=color:#586e75> * &lt;li&gt;{@link Activate#group()} specifies group criteria. Framework SPI defines the valid group values.
</span></span></span><span style=display:flex><span><span style=color:#586e75> * &lt;li&gt;{@link Activate#value()} specifies parameter key in {@link URL} criteria.
</span></span></span><span style=display:flex><span><span style=color:#586e75> * &lt;/ol&gt;
</span></span></span><span style=display:flex><span><span style=color:#586e75> * SPI provider can call {@link ExtensionLoader#getActivateExtension(URL, String, String)} to find out all activated
</span></span></span><span style=display:flex><span><span style=color:#586e75> * extensions with the given criteria.
</span></span></span><span style=display:flex><span><span style=color:#586e75> *
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>@Documented</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>@Retention</span>(RetentionPolicy.RUNTIME)
</span></span><span style=display:flex><span><span style=color:#268bd2>@Target</span>({ElementType.TYPE, ElementType.METHOD})
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>@interface</span> Activate {
</span></span><span style=display:flex><span> <span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * Activate the current extension when one of the groups matches. The group passed into
</span></span></span><span style=display:flex><span><span style=color:#586e75> * {@link ExtensionLoader#getActivateExtension(URL, String, String)} will be used for matching.
</span></span></span><span style=display:flex><span><span style=color:#586e75> *
</span></span></span><span style=display:flex><span><span style=color:#586e75> * @return group names to match
</span></span></span><span style=display:flex><span><span style=color:#586e75> * @see ExtensionLoader#getActivateExtension(URL, String, String)
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span> String<span style=color:#719e07>[]</span> <span style=color:#268bd2>group</span>() <span style=color:#719e07>default</span> {};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * Activate the current extension when the specified keys appear in the URL&#39;s parameters.
</span></span></span><span style=display:flex><span><span style=color:#586e75> * &lt;p&gt;
</span></span></span><span style=display:flex><span><span style=color:#586e75> * For example, given &lt;code&gt;@Activate(&#34;cache, validation&#34;)&lt;/code&gt;, the current extension will be return only when
</span></span></span><span style=display:flex><span><span style=color:#586e75> * there&#39;s either &lt;code&gt;cache&lt;/code&gt; or &lt;code&gt;validation&lt;/code&gt; key appeared in the URL&#39;s parameters.
</span></span></span><span style=display:flex><span><span style=color:#586e75> * &lt;/p&gt;
</span></span></span><span style=display:flex><span><span style=color:#586e75> *
</span></span></span><span style=display:flex><span><span style=color:#586e75> * @return URL parameter keys
</span></span></span><span style=display:flex><span><span style=color:#586e75> * @see ExtensionLoader#getActivateExtension(URL, String)
</span></span></span><span style=display:flex><span><span style=color:#586e75> * @see ExtensionLoader#getActivateExtension(URL, String, String)
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span> String<span style=color:#719e07>[]</span> <span style=color:#268bd2>value</span>() <span style=color:#719e07>default</span> {};
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * Absolute ordering info, optional
</span></span></span><span style=display:flex><span><span style=color:#586e75> *
</span></span></span><span style=display:flex><span><span style=color:#586e75> * Ascending order, smaller values will be in the front o the list.
</span></span></span><span style=display:flex><span><span style=color:#586e75> *
</span></span></span><span style=display:flex><span><span style=color:#586e75> * @return absolute ordering info
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span> <span style=color:#dc322f>int</span> <span style=color:#268bd2>order</span>() <span style=color:#719e07>default</span> 0;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * Activate loadClass when the current extension when the specified className all match
</span></span></span><span style=display:flex><span><span style=color:#586e75> * @return className names to all match
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span> String<span style=color:#719e07>[]</span> <span style=color:#268bd2>onClass</span>() <span style=color:#719e07>default</span> {};
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=26-扩展点排序>2.6 扩展点排序</h3><p>排序同样使用 <code>@Activate</code> 注解设置,以下是使用示例,<code>order</code> 值越小加载优先级越高。</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>@Activate</span>(order<span style=color:#719e07>=</span>100)
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>FilterImpl1</span> <span style=color:#268bd2>implements</span> Filter{}
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>@Activate</span>(order<span style=color:#719e07>=</span>200)
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>FilterImpl2</span> <span style=color:#268bd2>implements</span> Filter{}
</span></span></code></pre></div><h2 id=3-dubbo-spi-扩展示例>3. Dubbo SPI 扩展示例</h2><h3 id=31--加载固定扩展类>3.1 加载固定扩展类</h3><h4 id=311-编写-spi-接口及实现类>3.1.1 编写 SPI 接口及实现类</h4><p>不管是 Java SPI,还是 Dubbo 中实现的 SPI,都需要编写接口。不过 Dubbo 中的接口需要被 @SPI 注解修饰。</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>@SPI</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>DemoSpi</span> {
</span></span><span style=display:flex><span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>say</span>();
</span></span><span style=display:flex><span>}
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoSpiImpl</span> <span style=color:#268bd2>implements</span> DemoSpi {
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>say</span>() {
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h4 id=312-将实现类放在特定目录下>3.1.2 将实现类放在特定目录下</h4><p>从上面的代码可知,dubbo 在加载扩展类的时候,会从四个目录中读取。我们在 META-INF/dubbo 目录下新建一个以 DemoSpi 接口名为文件名的文件,内容如下:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text><span style=display:flex><span>demoSpiImpl = com.xxx.xxx.DemoSpiImpl(为 DemoSpi 接口实现类的全类名)
</span></span></code></pre></div><h4 id=313-使用>3.1.3 使用</h4><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DubboSPITest</span> {
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>@Test</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>sayHello</span>() <span style=color:#268bd2>throws</span> Exception {
</span></span><span style=display:flex><span> ExtensionLoader<span style=color:#719e07>&lt;</span>DemoSpi<span style=color:#719e07>&gt;</span> extensionLoader <span style=color:#719e07>=</span>
</span></span><span style=display:flex><span> ExtensionLoader.getExtensionLoader(DemoSpi.class);
</span></span><span style=display:flex><span> DemoSpi dmeoSpi <span style=color:#719e07>=</span> extensionLoader.getExtension(<span style=color:#2aa198>&#34;demoSpiImpl&#34;</span>);
</span></span><span style=display:flex><span> optimusPrime.sayHello();
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=32-加载自适应扩展类>3.2 加载自适应扩展类</h3><p>这个以 Protocol 为例进行说明</p><h4 id=321-protocol-接口抽取部分核心方法>3.2.1 Protocol 接口(抽取部分核心方法)</h4><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>@SPI</span>(<span style=color:#2aa198>&#34;dubbo&#34;</span>)
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>Protocol</span> {
</span></span><span style=display:flex><span> <span style=color:#268bd2>@Adaptive</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>&lt;</span>T<span style=color:#719e07>&gt;</span> Exporter<span style=color:#719e07>&lt;</span>T<span style=color:#719e07>&gt;</span> <span style=color:#268bd2>export</span>(Invoker<span style=color:#719e07>&lt;</span>T<span style=color:#719e07>&gt;</span> invoker) <span style=color:#268bd2>throws</span> RpcException;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>@Adaptive</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>&lt;</span>T<span style=color:#719e07>&gt;</span> Invoker<span style=color:#719e07>&lt;</span>T<span style=color:#719e07>&gt;</span> <span style=color:#268bd2>refer</span>(Class<span style=color:#719e07>&lt;</span>T<span style=color:#719e07>&gt;</span> type, URL url) <span style=color:#268bd2>throws</span> RpcException;
</span></span><span style=display:flex><span>}
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DubboProtocol</span> <span style=color:#268bd2>extends</span> AbstractProtocol {
</span></span><span style=display:flex><span> ......
</span></span><span style=display:flex><span> <span style=color:#268bd2>@Override</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> <span style=color:#719e07>&lt;</span>T<span style=color:#719e07>&gt;</span> Invoker<span style=color:#719e07>&lt;</span>T<span style=color:#719e07>&gt;</span> <span style=color:#268bd2>refer</span>(Class<span style=color:#719e07>&lt;</span>T<span style=color:#719e07>&gt;</span> type, URL url) <span style=color:#268bd2>throws</span> RpcException {
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> protocolBindingRefer(type, url);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>@Override</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> <span style=color:#719e07>&lt;</span>T<span style=color:#719e07>&gt;</span> Exporter<span style=color:#719e07>&lt;</span>T<span style=color:#719e07>&gt;</span> <span style=color:#268bd2>export</span>(Invoker<span style=color:#719e07>&lt;</span>T<span style=color:#719e07>&gt;</span> invoker) <span style=color:#268bd2>throws</span> RpcException {
</span></span><span style=display:flex><span> ......
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> exporter;
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h4 id=322-将实现类放在特定目录下>3.2.2 将实现类放在特定目录下</h4><p>在 dubbo 中,该配置路径 META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text><span style=display:flex><span>dubbo=org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol
</span></span></code></pre></div><p>需要说明一点的是,在 dubbo 中,并不是直接使用 DubboProtocol 的,而是使用的是其包装类。</p><h4 id=323-使用>3.2.3 使用</h4><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DubboAdaptiveTest</span> {
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>@Test</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>sayHello</span>() <span style=color:#268bd2>throws</span> Exception {
</span></span><span style=display:flex><span> URL url <span style=color:#719e07>=</span> URL.valueOf(<span style=color:#2aa198>&#34;dubbo://localhost/test&#34;</span>);
</span></span><span style=display:flex><span> Protocol adaptiveProtocol <span style=color:#719e07>=</span> ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();
</span></span><span style=display:flex><span> adaptiveProtocol.refer(type, url);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><div id=pre-footer><h2>反馈</h2><p class=feedback--prompt>此页是否对您有帮助?</p><button class="btn btn-primary mb-4 feedback--yes"></button>
<button class="btn btn-primary mb-4 feedback--no"></button></div><script>const yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled"),no.disabled=!0,no.classList.add("feedback--button__disabled")};yes.addEventListener("click",()=>{sendFeedback(1),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")}),no.addEventListener("click",()=>{sendFeedback(0),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")})</script><div class=td-page-meta__lastmod>最后修改 March 19, 2024: <a href=https://github.com/apache/dubbo-website/commit/ebc331d21fa5f74f9de5b842afeda5584b068f54>update doc (#2941) (ebc331d21fa)</a></div></div></main><div class="d-none d-xl-block col-xl-2 td-toc d-print-none"><div class="td-page-meta ml-2 pb-1 pt-2 mb-0"><a href=https://github.com/apache/dubbo-website/edit/master/content/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/dubbo-spi.md target=_blank><i class="fa fa-edit fa-fw"></i> 编辑此页</a>
<a href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/mannual/java-sdk/reference-manual/architecture/dubbo-spi.md?filename=change-me.md&amp;value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the+page+%28weight+controls+how+its+ordered+amongst+other+pages+in+the+same+directory%3B+lowest+number+first%29.%0A%2A+Add+a+good+commit+message+at+the+bottom+of+the+page+%28%3C80+characters%3B+use+the+extended+description+field+for+more+detail%29.%0A%2A+Create+a+new+branch+so+you+can+preview+your+new+file+and+request+a+review+via+Pull+Request.%0A" target=_blank><i class="fa fa-edit fa-fw"></i> 创建子页面</a>
<a href="https://github.com/apache/dubbo-website/issues/new?title=%e6%89%a9%e5%b1%95%e7%82%b9%e5%bc%80%e5%8f%91%e6%8c%87%e5%8d%97" target=_blank><i class="fab fa-github fa-fw"></i> 登记问题</a>
<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i> 提交项目问题</a></div><nav id=TableOfContents><ul><li><a href=#1-dubbo-spi-扩展简介>1. Dubbo SPI 扩展简介</a><ul><li><a href=#11-spi定义>1.1 SPI定义</a></li><li><a href=#12-spi加载流程>1.2 SPI加载流程</a></li></ul></li><li><a href=#2-dubbo-spi-源码分析>2. Dubbo SPI 源码分析</a><ul><li><a href=#21-按名称获取指定扩展类>2.1 按名称获取指定扩展类</a></li><li><a href=#22-加载自适应扩展类>2.2 加载自适应扩展类</a></li><li><a href=#23-ioc-机制>2.3 IOC 机制</a></li><li><a href=#24-aop-机制>2.4 AOP 机制</a></li><li><a href=#25-activate激活条件>2.5 Activate激活条件</a></li><li><a href=#26-扩展点排序>2.6 扩展点排序</a></li></ul></li><li><a href=#3-dubbo-spi-扩展示例>3. Dubbo SPI 扩展示例</a><ul><li><a href=#31--加载固定扩展类>3.1 加载固定扩展类</a></li><li><a href=#32-加载自适应扩展类>3.2 加载自适应扩展类</a></li></ul></li></ul></nav></div></div></div></div><footer><div class=footer-container><div class=footer-container-left><div class=footer-container-left-title>关注我们</div><div class=footer-container-left-des>请通过以下任一或多个渠道关注社区动态,与社区开发者保持密切沟通。</div><div><button class="contact-btn qr-container" onmouseover='showQRCode("wechat-qr")' onmouseout='hideQRCode("wechat-qr")'>微信<div class=qr-code id=wechat-qr style=display:none><img src=https://img.alicdn.com/imgextra/i2/O1CN010ygTmZ1tp9a2Zii3b_!!6000000005950-0-tps-258-258.jpg alt="WeChat QR Code"></div></button>
<button class="contact-btn qr-container" onmouseover='showQRCode("dingding-qr")' onmouseout='hideQRCode("dingding-qr")'>钉钉<div class=qr-code id=dingding-qr style=display:none><img src=https://img.alicdn.com/imgextra/i4/O1CN01buuadT274Lj33QZWQ_!!6000000007743-0-tps-1170-1477.jpg alt="DingTalk QR Code"></div></button>
<button class=contact-btn><a href=https://github.com/apache/dubbo/>GITHUB</a></button></div></div><div class=footer-container-right><ul><li>文档</li><li><a href=/zh-cn/overview/home/>概览</a></li><li><a href=/zh-cn/overview/quickstart/>快速开始</a></li><li><a href=/zh-cn/contact/contributor/software-donation-guide_dev/>开发者指南</a></li></ul><ul><li>资源</li><li><a href=/zh-cn/contact/>社区</a></li></ul></div></div><div style="width:85.125rem;height:0;border:1px solid #dddee4;margin-bottom:32px"></div><div class=footer-registration>© 2024 The Apache Software Foundation. Apache Dubbo, Dubbo, Apache, the Apache feather logo, and the Apache Dubbo
project logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States
and other countries. 保留所有权利</div></footer><style>footer{display:flex;align-items:center;flex-direction:column}.footer-container{background-color:#ebecef;width:100%;height:100%;border-radius:16px;padding-left:20px;padding-right:20px;padding-top:36px;padding-bottom:36px;display:inline-block;margin-bottom:40px;@media only screen and (min-width:1100px){display: flex; height: 289px; width: 85.125rem; padding-left: 40px; padding-right: 0px;}}.footer-container-left{width:100%;@media only screen and (min-width:1100px){width: 672px;}}.footer-container-left-title{font-size:16px;line-height:24px;color:#2e3038;margin-bottom:16px;@media only screen and (min-width:768px){font-size: 28px; line-height: 36px;}}.footer-container-left-des{font-size:12px;line-height:24px;color:#a3a6b3;margin-bottom:20px;@media only screen and (min-width:768px){margin-bottom: 96px; font-size: 16px;}}.contact-btn{width:auto;min-width:100px;height:40px;padding:0 10px;border-radius:24px;background:#f4f4f6;font-size:12px;font-weight:500;line-height:16px;color:#818598;border:none;margin-right:4px;margin-bottom:20px;@media only screen and (min-width:768px){margin-right: 22px; margin-bottom: 0px;}}.contact-btn a{color:#818598;text-decoration:none}.footer-container-right{display:flex;margin-left:0;margin-top:20px;@media only screen and (min-width:1100px){margin-left: 154px; margin-top: 0px;}}.footer-container-right>ul{list-style-type:none;margin-right:100px;padding-left:0}.footer-container-right ul li{font-size:12px;font-weight:400;line-height:20px;color:#2e3038;margin-bottom:16px;@media only screen and (min-width:768px){font-size: 14px;}}.footer-container-right ul li a{color:#2e3038;text-decoration:none}.footer-container-right ul li:first-child{color:#a3a6b3;font-size:12px;line-height:16px;margin-bottom:20px;@media only screen and (min-width:768px){margin-bottom: 49px;}}.footer-registration{width:920px;font-size:14px;line-height:24px;text-align:center;color:#a3a6b3;margin-bottom:32px}.qr-container{position:relative}.qr-code{position:absolute;background:#fff;border:1px solid #dddee4;padding:10px;border-radius:8px;z-index:10;bottom:40px;left:-10px}.qr-code img{width:100px;height:100px}</style><script>function showQRCode(e){document.getElementById(e).style.display="block"}function hideQRCode(e){document.getElementById(e).style.display="none"}</script><script src=/js/popper.min.js integrity=sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49 crossorigin=anonymous></script><script src=/js/bootstrap.min.js integrity=sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy crossorigin=anonymous></script><script>(function(e,t,n,s){e[s]=e[s]||[];var a=t.getElementsByTagName(n)[0],i=t.createElement(n);i.async=!0,i.id="beacon-aplus",i.setAttribute("exparams","userid=&aplus&sidx=aplusSidex&ckx=aplusCkx"),i.src="//g.alicdn.com/alilog/mlog/aplus_v2.js",i.crossorigin="anonymous",a.parentNode.insertBefore(i,a)})(window,document,"script","aplus_queue"),function(e){var t=e.createElement("script");t.type="text/javascript",t.async=!0,t.src="//g.alicdn.com/aes/??tracker/3.3.4/index.js,tracker-plugin-pv/3.0.5/index.js,tracker-plugin-event/3.0.0/index.js,tracker-plugin-autolog/3.0.3/index.js,tracker-plugin-survey/3.0.3/index.js,tracker-plugin-jserror/3.0.3/index.js,tracker-plugin-resourceError/3.0.3/index.js",t.onload=function(){window.AES_CONFIG=window.AES_CONFIG||{env:"prod"},window.aes=new AES({pid:"zN245h",user_type:6}),window.AESPluginAutologConfig={exposure:"auto"},window.AEMPluginInstances=[aes.use(AESPluginPV,window.AESPluginPVConfig||{enableHistory:!0}),aes.use(AESPluginEvent,window.AESPluginEventConfig||{}),aes.use(AESPluginSurvey,window.AESPluginEventConfig||{}),aes.use(AESPluginAutolog,window.AESPluginAutologConfig||{}),aes.use(AESPluginJSError,window.AESPluginJSError||{}),aes.use(AESPluginResourceError,window.AESPluginResourceError||{})]},setTimeout(function(){e.getElementsByTagName("body")[0].appendChild(t)},800)}(document)</script><script src=/js/main.min.6808fdbee24cd5a505bf4d4917e8143cd76ebd5107d560151e0032c52c3b1d16.js integrity="sha256-aAj9vuJM1aUFv01JF+gUPNduvVEH1WAVHgAyxSw7HRY=" crossorigin=anonymous></script><script>(function(e,t,n,s){e[s]=e[s]||[];var a=t.getElementsByTagName(n)[0],i=t.createElement(n);i.async=!0,i.id="beacon-aplus",i.setAttribute("exparams","userid=&aplus&sidx=aplusSidex&ckx=aplusCkx"),i.src="//g.alicdn.com/alilog/mlog/aplus_v2.js",i.crossorigin="anonymous",a.parentNode.insertBefore(i,a)})(window,document,"script","aplus_queue"),function(e){var t=e.createElement("script");t.type="text/javascript",t.async=!0,t.src="//g.alicdn.com/aes/??tracker/3.3.4/index.js,tracker-plugin-pv/3.0.5/index.js,tracker-plugin-event/3.0.0/index.js,tracker-plugin-autolog/3.0.3/index.js,tracker-plugin-survey/3.0.3/index.js,tracker-plugin-jserror/3.0.3/index.js,tracker-plugin-resourceError/3.0.3/index.js",t.onload=function(){window.AES_CONFIG=window.AES_CONFIG||{env:"prod"},window.aes=new AES({pid:"zN245h",user_type:6}),window.AESPluginAutologConfig={exposure:"auto"},window.AEMPluginInstances=[aes.use(AESPluginPV,window.AESPluginPVConfig||{enableHistory:!0}),aes.use(AESPluginEvent,window.AESPluginEventConfig||{}),aes.use(AESPluginSurvey,window.AESPluginEventConfig||{}),aes.use(AESPluginAutolog,window.AESPluginAutologConfig||{}),aes.use(AESPluginJSError,window.AESPluginJSError||{}),aes.use(AESPluginResourceError,window.AESPluginResourceError||{})]},setTimeout(function(){e.getElementsByTagName("body")[0].appendChild(t)},800)}(document)</script><script src=https://cdn.jsdelivr.net/npm/@docsearch/js@3></script><script>docsearch({appId:"L5F4T9F0I1",apiKey:"364ae307e1da9d02b2335675e9db1eb1",indexName:"apache_dubbo",container:"#docsearch",debug:!1}),docsearch({appId:"L5F4T9F0I1",apiKey:"364ae307e1da9d02b2335675e9db1eb1",indexName:"apache_dubbo",container:"#docsearch_zh_home",debug:!1})</script></body></html>