blob: 74d5dc43f5df6d911bdd64dae08981aa02398886 [file] [log] [blame]
<!doctype html><html lang=en class=no-js><head><meta name=ROBOTS content="INDEX, FOLLOW"><link rel=canonical href=https://cn.dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/spi/description/dubbo-spi/><script>var _hmt=_hmt||[];(function(){var e,t=document.createElement("script");t.src="https://hm.baidu.com/hm.js?3b78f49ba47181e4d998a66b689446e9",e=document.getElementsByTagName("script")[0],e.parentNode.insertBefore(t,e)})()</script><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta http-equiv=Content-Security-Policy content="frame-src *"><meta name=generator content="Hugo 0.122.0"><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>Extension Point Development Guide | Apache Dubbo</title><meta property="og:title" content="Extension Point Development Guide">
<meta property="og:description" content="This article introduces the principle and implementation details of Dubbo SPI"><meta property="og:type" content="article"><meta property="og:url" content="https://cn.dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/spi/description/dubbo-spi/"><meta property="article:section" content="docs3-v2"><meta property="article:modified_time" content="2023-01-02T18:18:49+08:00"><meta itemprop=name content="Extension Point Development Guide"><meta itemprop=description content="This article introduces the principle and implementation details of Dubbo SPI"><meta itemprop=dateModified content="2023-01-02T18:18:49+08:00"><meta itemprop=wordCount content="4337"><meta itemprop=keywords content><meta name=twitter:card content="summary"><meta name=twitter:title content="Extension Point Development Guide"><meta name=twitter:description content="This article introduces the principle and implementation details of Dubbo SPI"><script async src="https://www.googletagmanager.com/gtag/js?id=G-NM6FFMT51J"></script><script>var doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-NM6FFMT51J",{anonymize_ip:!1})}</script><link rel=preload href=/scss/main.min.f77e221bcdbe0cadb996060fe82063c747b60c229a1f8bbf0ee529adbadd84fa.css as=style><link href=/scss/main.min.f77e221bcdbe0cadb996060fe82063c747b60c229a1f8bbf0ee529adbadd84fa.css rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin=anonymous></script><meta name=theme-color content="#326ce5"><link rel=stylesheet href=/css/feature-states.css><meta name=description content="This article introduces the principle and implementation details of Dubbo SPI"><meta property="og:description" content="This article introduces the principle and implementation details of Dubbo SPI"><meta name=twitter:description content="This article introduces the principle and implementation details of Dubbo SPI"><meta property="og:url" content="https://cn.dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/spi/description/dubbo-spi/"><meta property="og:title" content="Extension Point Development Guide"><meta name=twitter:title content="Extension Point Development Guide"><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-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a class=navbar-brand href=/en/><span class=navbar-logo></span><span class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="td-navbar-nav-scroll ml-md-auto" id=main_navbar><ul class="navbar-nav mt-2 mt-lg-0"><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/overview/><span>Overview</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class="nav-link active" href=/en/docs3-v2/><span class=active>SDK Manual</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/blog/><span>Blog</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/download/><span>Download</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=https://start.dubbo.apache.org/bootstrap.html target=_blank><span>Initializer</span><i class='fas fa-external-link-alt'></i></a></li><li class="nav-item dropdown d-lg-block"><a class="nav-link dropdown-toggle" href=# id=navbarDropdownMenuLink role=button data-toggle=dropdown aria-haspopup=true aria-expanded=false>English</a><div class="dropdown-menu dropdown-menu-right" aria-labelledby=navbarDropdownMenuLink><a class=dropdown-item href=/zh-cn/>中文</a></div></li><li class="nav-item dropdown d-lg-block"><div class="nav-item d-none d-lg-block"></div></li></ul></div></nav><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-endocs3-v2java-sdkreference-manualspidescriptiondubbo-spi").addClass("active"),$("#td-section-nav #m-endocs3-v2java-sdkreference-manualspidescriptiondubbo-spi-li span").addClass("td-sidebar-nav-active-item"),$("#td-section-nav #m-endocs3-v2java-sdkreference-manualspidescriptiondubbo-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-endocs3-v2java-sdkreference-manualspidescriptiondubbo-spi-li").siblings("li").addClass("show"),$("#td-section-nav #m-endocs3-v2java-sdkreference-manualspidescriptiondubbo-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"><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-endocs3-v2-li><ul class=ul-1><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdk-li><input type=checkbox id=m-endocs3-v2java-sdk-check>
<label for=m-endocs3-v2java-sdk-check><a href=/en/docs3-v2/java-sdk/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdk><span>Java</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkquick-start-li><input type=checkbox id=m-endocs3-v2java-sdkquick-start-check>
<label for=m-endocs3-v2java-sdkquick-start-check><a href=/en/docs3-v2/java-sdk/quick-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkquick-start><span>Quick Start</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkquick-startbrief-li><input type=checkbox id=m-endocs3-v2java-sdkquick-startbrief-check>
<label for=m-endocs3-v2java-sdkquick-startbrief-check><a href=/en/docs3-v2/java-sdk/quick-start/brief/ title="1 - Rapidly deploy a microservice application" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkquick-startbrief><span>Quickly deploy a microservice application</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkquick-startapi-li><input type=checkbox id=m-endocs3-v2java-sdkquick-startapi-check>
<label for=m-endocs3-v2java-sdkquick-startapi-check><a href=/en/docs3-v2/java-sdk/quick-start/api/ title="2 - Develop microservice applications based on Dubbo API" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkquick-startapi><span>Develop microservice applications based on Dubbo API</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkquick-startspring-boot-li><input type=checkbox id=m-endocs3-v2java-sdkquick-startspring-boot-check>
<label for=m-endocs3-v2java-sdkquick-startspring-boot-check><a href=/en/docs3-v2/java-sdk/quick-start/spring-boot/ title="3 - Dubbo x Spring Boot to develop microservice applications" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkquick-startspring-boot><span>Dubbo x Spring Boot to develop microservice applications</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkquick-startspring-xml-li><input type=checkbox id=m-endocs3-v2java-sdkquick-startspring-xml-check>
<label for=m-endocs3-v2java-sdkquick-startspring-xml-check><a href=/en/docs3-v2/java-sdk/quick-start/spring-xml/ title="4 - Dubbo x Spring XML to develop microservice applications" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkquick-startspring-xml><span>Dubbo x Spring XML to develop microservice applications</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkquick-startidl-li><input type=checkbox id=m-endocs3-v2java-sdkquick-startidl-check>
<label for=m-endocs3-v2java-sdkquick-startidl-check><a href=/en/docs3-v2/java-sdk/quick-start/idl/ title="IDL defines cross-language services" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkquick-startidl><span>IDL Defines</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkconcepts-and-architecture-li><input type=checkbox id=m-endocs3-v2java-sdkconcepts-and-architecture-check>
<label for=m-endocs3-v2java-sdkconcepts-and-architecture-check><a href=/en/docs3-v2/java-sdk/concepts-and-architecture/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkconcepts-and-architecture><span>Concepts and Architecture</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkconcepts-and-architectureoverall-architecture-li><input type=checkbox id=m-endocs3-v2java-sdkconcepts-and-architectureoverall-architecture-check>
<label for=m-endocs3-v2java-sdkconcepts-and-architectureoverall-architecture-check><a href=/en/docs3-v2/java-sdk/concepts-and-architecture/overall-architecture/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkconcepts-and-architectureoverall-architecture><span>Overall Architecture</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkconcepts-and-architecturecode-architecture-li><input type=checkbox id=m-endocs3-v2java-sdkconcepts-and-architecturecode-architecture-check>
<label for=m-endocs3-v2java-sdkconcepts-and-architecturecode-architecture-check><a href=/en/docs3-v2/java-sdk/concepts-and-architecture/code-architecture/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkconcepts-and-architecturecode-architecture><span>Code Architecture</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkconcepts-and-architectureservice-discovery-li><input type=checkbox id=m-endocs3-v2java-sdkconcepts-and-architectureservice-discovery-check>
<label for=m-endocs3-v2java-sdkconcepts-and-architectureservice-discovery-check><a href=/en/docs3-v2/java-sdk/concepts-and-architecture/service-discovery/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkconcepts-and-architectureservice-discovery><span>Service Discovery</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkconcepts-and-architectureservice-invocation-li><input type=checkbox id=m-endocs3-v2java-sdkconcepts-and-architectureservice-invocation-check>
<label for=m-endocs3-v2java-sdkconcepts-and-architectureservice-invocation-check><a href=/en/docs3-v2/java-sdk/concepts-and-architecture/service-invocation/ title="Service Call Extension Point" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkconcepts-and-architectureservice-invocation><span>Service Call</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkconcepts-and-architecturemesh-li><input type=checkbox id=m-endocs3-v2java-sdkconcepts-and-architecturemesh-check>
<label for=m-endocs3-v2java-sdkconcepts-and-architecturemesh-check><a href=/en/docs3-v2/java-sdk/concepts-and-architecture/mesh/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkconcepts-and-architecturemesh><span>Dubbo Mesh</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkconcepts-and-architecturetriple-li><input type=checkbox id=m-endocs3-v2java-sdkconcepts-and-architecturetriple-check>
<label for=m-endocs3-v2java-sdkconcepts-and-architecturetriple-check><a href=/en/docs3-v2/java-sdk/concepts-and-architecture/triple/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkconcepts-and-architecturetriple><span>Triple Protocol</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkadvanced-features-and-usage-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usage-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usage-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkadvanced-features-and-usage><span>Advanced Features</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservice-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservice-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservice-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/ title="Configuration Framework and Service Behavior" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkadvanced-features-and-usageservice><span>Framework and Services</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicepreflight-check-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicepreflight-check-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicepreflight-check-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/preflight-check/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicepreflight-check><span>Check at startup</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicetransaction-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicetransaction-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicetransaction-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction/ title="Distributed Transactions" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicetransaction><span>Distributed Transaction</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicegroup-merger-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicegroup-merger-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicegroup-merger-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/group-merger/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicegroup-merger><span>Group Aggregation</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceport-unification-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceport-unification-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageserviceport-unification-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/port-unification/ title="Port Protocol Multiplexing" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceport-unification><span>Port protocol multiplexing</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicereactive-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicereactive-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicereactive-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/reactive/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicereactive><span>Reactive Programming</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicemulti-versions-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicemulti-versions-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicemulti-versions-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/multi-versions/ title="Service Version" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicemulti-versions><span>Service version</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicefault-tolerent-strategy-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicefault-tolerent-strategy-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicefault-tolerent-strategy-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/fault-tolerent-strategy/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicefault-tolerent-strategy><span>Cluster Fault Tolerance</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceparameter-validation-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceparameter-validation-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageserviceparameter-validation-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/parameter-validation/ title="Parameter Validation" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceparameter-validation><span>Parameter verification</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceservice-group-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceservice-group-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageserviceservice-group-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/service-group/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceservice-group><span>Service Group</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceasync-call-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceasync-call-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageserviceasync-call-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/async-call/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceasync-call><span>Asynchronous call</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceservice-downgrade-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceservice-downgrade-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageserviceservice-downgrade-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/service-downgrade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceservice-downgrade><span>Service Downgrade</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicegeneric-reference-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicegeneric-reference-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicegeneric-reference-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/generic-reference/ title="Generalization call (client generalization)" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicegeneric-reference><span>Generalized call</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicestreaming-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicestreaming-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicestreaming-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/streaming/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicestreaming><span>Stream Communication</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceisolation-executor-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceisolation-executor-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageserviceisolation-executor-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/isolation-executor/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceisolation-executor><span>Thread Pool Isolation</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceattachment-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceattachment-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageserviceattachment-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/attachment/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceattachment><span>Call link to pass implicit parameters</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceexplicit-target-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceexplicit-target-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageserviceexplicit-target-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/explicit-target/ title="Direct Connection Provider" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceexplicit-target><span>Direct Link Provider</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicespecify-ip-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicespecify-ip-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicespecify-ip-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/specify-ip/ title="Dynamic IP call" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicespecify-ip><span>Dynamic IP call at runtime</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceconsistent-hash-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceconsistent-hash-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageserviceconsistent-hash-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/consistent-hash/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceconsistent-hash><span>Consistent Hash Site Selection</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicecontext-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicecontext-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicecontext-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/context/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicecontext><span>RPC call context</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicesubscribe-only-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicesubscribe-only-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicesubscribe-only-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/subscribe-only/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicesubscribe-only><span>Subscription Only</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceevents-notify-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceevents-notify-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageserviceevents-notify-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/events-notify/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceevents-notify><span>Call trigger event notification</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicemulti-protocols-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicemulti-protocols-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicemulti-protocols-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/multi-protocols/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicemulti-protocols><span>Multi-protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicecallback-parameter-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicecallback-parameter-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicecallback-parameter-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/callback-parameter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicecallback-parameter><span>The server makes a callback to the client</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicelocal-mock-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicelocal-mock-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicelocal-mock-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/local-mock/ title="Local Masquerade" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicelocal-mock><span>Local camouflage</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicemulti-registry-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicemulti-registry-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicemulti-registry-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/multi-registry/ title="Multiple Registries" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicemulti-registry><span>Multiple Registration Centers</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicelocal-stub-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicelocal-stub-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicelocal-stub-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/local-stub/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicelocal-stub><span>Local Stub</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceecho-service-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceecho-service-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageserviceecho-service-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/echo-service/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceecho-service><span>Echo Test</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceaccesslog-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceaccesslog-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageserviceaccesslog-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/accesslog/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceaccesslog><span>Call Information Record</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicegeneric-service-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicegeneric-service-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicegeneric-service-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/generic-service/ title="Achieving generalization (server-side generalization)" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicegeneric-service><span>Generalized call</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceasync-execute-on-provider-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceasync-execute-on-provider-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageserviceasync-execute-on-provider-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/async-execute-on-provider/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceasync-execute-on-provider><span>Asynchronous execution</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicelocal-call-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicelocal-call-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicelocal-call-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/local-call/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicelocal-call><span>Local call</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicedelay-publish-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicedelay-publish-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicedelay-publish-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/delay-publish/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicedelay-publish><span>Delayed Exposure</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceregistry-only-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceregistry-only-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageserviceregistry-only-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/registry-only/ title="Sign Up Only" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageserviceregistry-only><span>Sign up only</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicedistributed-transaction-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageservicedistributed-transaction-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageservicedistributed-transaction-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/service/distributed-transaction/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageservicedistributed-transaction><span>Distributed transaction support</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageobservability-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageobservability-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageobservability-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/observability/ title="Observability of Dubbo" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkadvanced-features-and-usageobservability><span>Observability</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitymeter-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitymeter-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitymeter-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/observability/meter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitymeter><span>Meter</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitytracing-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitytracing-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitytracing-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/observability/tracing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitytracing><span>Tracing</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitylogging-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitylogging-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitylogging-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/observability/logging/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitylogging><span>Logging</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilityhealth-information-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilityhealth-information-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilityhealth-information-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/observability/health-information/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilityhealth-information><span>Health Information</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitykubernetes-probes-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitykubernetes-probes-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitykubernetes-probes-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/observability/kubernetes-probes/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitykubernetes-probes><span>Kubernetes Probes</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitydoc-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitydoc-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitydoc-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/observability/doc/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageobservabilitydoc><span>Document case</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagetraffic-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagetraffic-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagetraffic-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/traffic/ title="Traffic Governance Rules" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkadvanced-features-and-usagetraffic><span>Traffic Governance</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficrouting-rule-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficrouting-rule-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficrouting-rule-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/traffic/routing-rule/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficrouting-rule><span>Routing Rules</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficconfig-rule-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficconfig-rule-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficconfig-rule-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/traffic/config-rule/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficconfig-rule><span>Configuration Rules</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-style-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-style-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-style-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-style><span>Mesh Routing Rules</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styledynamic-rule-deployment-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styledynamic-rule-deployment-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styledynamic-rule-deployment-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/dynamic-rule-deployment/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styledynamic-rule-deployment><span>Dynamic Routing</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styleweight-rule-deployment-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styleweight-rule-deployment-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styleweight-rule-deployment-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/weight-rule-deployment/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styleweight-rule-deployment><span>Weight Routing</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styledemo-rule-deployment-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styledemo-rule-deployment-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styledemo-rule-deployment-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/demo-rule-deployment/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styledemo-rule-deployment><span>Use Case</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styleblue-green-deployment-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styleblue-green-deployment-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styleblue-green-deployment-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/blue-green-deployment/ title="Blue-Green Deployment" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styleblue-green-deployment><span>Blue-green deployment</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styleab-testing-deployment-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styleab-testing-deployment-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styleab-testing-deployment-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/ab-testing-deployment/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styleab-testing-deployment><span>Ab Test</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-stylevirtualservice-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-stylevirtualservice-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-stylevirtualservice-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/virtualservice/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-stylevirtualservice><span>VirtualService</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-stylecanary-deployment-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-stylecanary-deployment-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-stylecanary-deployment-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/canary-deployment/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-stylecanary-deployment><span>Canary</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styledestination-rule-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styledestination-rule-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styledestination-rule-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/destination-rule/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usagetrafficmesh-styledestination-rule><span>DestinationRule</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformance-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformance-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformance-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/ title="Diagnostics and Tuning" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformance><span>Diagnostics</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceprofiler-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceprofiler-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceprofiler-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/profiler/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceprofiler><span>Request time-consuming sampling</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancethreading-model-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancethreading-model-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformancethreading-model-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/threading-model/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancethreading-model><span>Threading Model</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancethreading-modelprovider-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancethreading-modelprovider-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformancethreading-modelprovider-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/threading-model/provider/ title="Server Thread Model" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancethreading-modelprovider><span>Server-side threading model</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancethreading-modelconsumer-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancethreading-modelconsumer-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformancethreading-modelconsumer-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/threading-model/consumer/ title="Consumer Thread Model" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancethreading-modelconsumer><span>Consumer thread model</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancerouter-snapshot-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancerouter-snapshot-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformancerouter-snapshot-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/router-snapshot/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancerouter-snapshot><span>Routing Status Collection</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancereference-config-cache-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancereference-config-cache-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformancereference-config-cache-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/reference-config-cache/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancereference-config-cache><span>Service Reference Configuration Object Cache</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceloadbalance-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceloadbalance-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceloadbalance-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/loadbalance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceloadbalance><span>Load Balancing</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancesimplify-registry-data-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancesimplify-registry-data-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformancesimplify-registry-data-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/simplify-registry-data/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancesimplify-registry-data><span>Registration Information Simplified</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceresult-cache-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceresult-cache-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceresult-cache-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/result-cache/ title="Call Result Cache" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceresult-cache><span>Call result cache</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceconcurrency-control-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceconcurrency-control-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceconcurrency-control-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/concurrency-control/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceconcurrency-control><span>Concurrency Control</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceconfig-connections-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceconfig-connections-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceconfig-connections-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/config-connections/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceconfig-connections><span>Connection Control</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancelazy-connect-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancelazy-connect-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformancelazy-connect-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/lazy-connect/ title="Delayed Connection" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancelazy-connect><span>Delayed connection</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancestickiness-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancestickiness-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformancestickiness-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/stickiness/ title="Stick Connection" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancestickiness><span>Stick connection</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancesupport-graalvm-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancesupport-graalvm-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformancesupport-graalvm-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/support-graalvm/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancesupport-graalvm><span>Support Graal VM</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancedump-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancedump-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformancedump-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/dump/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformancedump><span>Export thread stack</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceserialization-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceserialization-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceserialization-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/performance/serialization/ title="Kryo and FST Serialization" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageperformanceserialization><span>Kryo and FST serialization</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagesecurity-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagesecurity-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagesecurity-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/security/ title="Improve service security" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkadvanced-features-and-usagesecurity><span>Improve Security</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagesecurityclass-check-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagesecurityclass-check-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagesecurityclass-check-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/security/class-check/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usagesecurityclass-check><span>Dubbo Class Inspection Mechanism</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagesecuritytls-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagesecuritytls-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagesecuritytls-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/security/tls/ title="TLS Support" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usagesecuritytls><span>TLS support</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagesecuritytoken-authorization-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagesecuritytoken-authorization-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagesecuritytoken-authorization-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/security/token-authorization/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usagesecuritytoken-authorization><span>Access Control</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usagesecurityauth-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usagesecurityauth-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usagesecurityauth-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/security/auth/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usagesecurityauth><span>Service Authentication</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageothers-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageothers-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageothers-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/others/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkadvanced-features-and-usageothers><span>Others</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageothersservice-container-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageothersservice-container-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageothersservice-container-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/others/service-container/ title="Custom Service Container" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageothersservice-container><span>Custom service container</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageothersgraceful-shutdown-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageothersgraceful-shutdown-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageothersgraceful-shutdown-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/others/graceful-shutdown/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageothersgraceful-shutdown><span>Graceful shutdown</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageothersset-host-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageothersset-host-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageothersset-host-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/others/set-host/ title="Host Address Custom Exposure" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageothersset-host><span>Host address custom exposure</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageotherslogger-management-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageotherslogger-management-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageotherslogger-management-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/others/logger-management/ title="Log Framework Adaptation and Runtime Management" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageotherslogger-management><span>Log framework adaptation and runtime management</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageothersdubbo-kubernetes-probe-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageothersdubbo-kubernetes-probe-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageothersdubbo-kubernetes-probe-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/others/dubbo-kubernetes-probe/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageothersdubbo-kubernetes-probe><span>Kubernetes Probe</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageothersdocker-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageothersdocker-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageothersdocker-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/others/docker/ title="Dubbo deploy to Docker environment" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageothersdocker><span>Docker Deploy</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkadvanced-features-and-usageotherslogger-howto-li><input type=checkbox id=m-endocs3-v2java-sdkadvanced-features-and-usageotherslogger-howto-check>
<label for=m-endocs3-v2java-sdkadvanced-features-and-usageotherslogger-howto-check><a href=/en/docs3-v2/java-sdk/advanced-features-and-usage/others/logger-howto/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkadvanced-features-and-usageotherslogger-howto><span>Logging Framework Configuration and Usage</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkreference-manual-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manual-check>
<label for=m-endocs3-v2java-sdkreference-manual-check><a href=/en/docs3-v2/java-sdk/reference-manual/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manual><span>Reference Manual</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkreference-manualconfig-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualconfig-check>
<label for=m-endocs3-v2java-sdkreference-manualconfig-check><a href=/en/docs3-v2/java-sdk/reference-manual/config/ title="Configuration Manual" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualconfig><span>Configuration instructions</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualconfigoverview-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualconfigoverview-check>
<label for=m-endocs3-v2java-sdkreference-manualconfigoverview-check><a href=/en/docs3-v2/java-sdk/reference-manual/config/overview/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualconfigoverview><span>Configuration Overview</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualconfigapi-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualconfigapi-check>
<label for=m-endocs3-v2java-sdkreference-manualconfigapi-check><a href=/en/docs3-v2/java-sdk/reference-manual/config/api/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualconfigapi><span>API Configuration</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualconfigannotation-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualconfigannotation-check>
<label for=m-endocs3-v2java-sdkreference-manualconfigannotation-check><a href=/en/docs3-v2/java-sdk/reference-manual/config/annotation/ title="Annotation configuration" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualconfigannotation><span>Annotation Configuration</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualconfigxml-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualconfigxml-check>
<label for=m-endocs3-v2java-sdkreference-manualconfigxml-check><a href=/en/docs3-v2/java-sdk/reference-manual/config/xml/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualconfigxml><span>XML Configuration</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualconfigprinciple-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualconfigprinciple-check>
<label for=m-endocs3-v2java-sdkreference-manualconfigprinciple-check><a href=/en/docs3-v2/java-sdk/reference-manual/config/principle/ title="How Configuration Works" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualconfigprinciple><span>How configuration works</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualconfigproperties-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualconfigproperties-check>
<label for=m-endocs3-v2java-sdkreference-manualconfigproperties-check><a href=/en/docs3-v2/java-sdk/reference-manual/config/properties/ title="Configuration Item Reference Manual" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualconfigproperties><span>Configuration Item Manual</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkreference-manualqos-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualqos-check>
<label for=m-endocs3-v2java-sdkreference-manualqos-check><a href=/en/docs3-v2/java-sdk/reference-manual/qos/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualqos><span>QOS Operation Manual</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualqosoverview-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualqosoverview-check>
<label for=m-endocs3-v2java-sdkreference-manualqosoverview-check><a href=/en/docs3-v2/java-sdk/reference-manual/qos/overview/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualqosoverview><span>QOS Overview</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualqoscommand-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualqoscommand-check>
<label for=m-endocs3-v2java-sdkreference-manualqoscommand-check><a href=/en/docs3-v2/java-sdk/reference-manual/qos/command/ title="Basic Command Manual" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualqoscommand><span>Basic command manual</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualqosservice-management-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualqosservice-management-check>
<label for=m-endocs3-v2java-sdkreference-manualqosservice-management-check><a href=/en/docs3-v2/java-sdk/reference-manual/qos/service-management/ title="Service Management Commands" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualqosservice-management><span>Service Management Command</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualqosprobe-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualqosprobe-check>
<label for=m-endocs3-v2java-sdkreference-manualqosprobe-check><a href=/en/docs3-v2/java-sdk/reference-manual/qos/probe/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualqosprobe><span>Frame State Command</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualqoslogger-management-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualqoslogger-management-check>
<label for=m-endocs3-v2java-sdkreference-manualqoslogger-management-check><a href=/en/docs3-v2/java-sdk/reference-manual/qos/logger-management/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualqoslogger-management><span>Logging framework runtime management</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualqosprofiler-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualqosprofiler-check>
<label for=m-endocs3-v2java-sdkreference-manualqosprofiler-check><a href=/en/docs3-v2/java-sdk/reference-manual/qos/profiler/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualqosprofiler><span>Performance Sampling Command</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualqosrouter-snapshot-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualqosrouter-snapshot-check>
<label for=m-endocs3-v2java-sdkreference-manualqosrouter-snapshot-check><a href=/en/docs3-v2/java-sdk/reference-manual/qos/router-snapshot/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualqosrouter-snapshot><span>Routing Status Command</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualqossecurity-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualqossecurity-check>
<label for=m-endocs3-v2java-sdkreference-manualqossecurity-check><a href=/en/docs3-v2/java-sdk/reference-manual/qos/security/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualqossecurity><span>Serialization Security Audit</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkreference-manualprotocol-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocol-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocol-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/ title="RPC protocol" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualprotocol><span>RPC Protocol</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocoloverview-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocoloverview-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocoloverview-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/overview/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocoloverview><span>Protocol Overview</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocoldubbo-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocoldubbo-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocoldubbo-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/dubbo/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocoldubbo><span>Dubbo protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkreference-manualprotocoltriple-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocoltriple-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocoltriple-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/triple/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualprotocoltriple><span>Triple Protocol</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocoltripleoverview-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocoltripleoverview-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocoltripleoverview-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/triple/overview/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocoltripleoverview><span>Protocol Overview</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocoltripleguide-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocoltripleguide-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocoltripleguide-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/triple/guide/ title="Instructions for Use" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocoltripleguide><span>Instructions for use</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocoltriplepojo-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocoltriplepojo-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocoltriplepojo-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/triple/pojo/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocoltriplepojo><span>POJO way to use Triple</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocoltripleidl-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocoltripleidl-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocoltripleidl-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/triple/idl/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocoltripleidl><span>Using Triple in IDL</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocoltriplemigration-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocoltriplemigration-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocoltriplemigration-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/triple/migration/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocoltriplemigration><span>Dubbo2 Protocol Migration</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocoltriplestreaming-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocoltriplestreaming-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocoltriplestreaming-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/triple/streaming/ title="Streaming Communication" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocoltriplestreaming><span>Streaming communication</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocolrest-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocolrest-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocolrest-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/rest/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocolrest><span>Rest protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocolgrpc-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocolgrpc-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocolgrpc-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/grpc/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocolgrpc><span>gRPC Protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocolhttp-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocolhttp-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocolhttp-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/http/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocolhttp><span>HTTP protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocolthrift-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocolthrift-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocolthrift-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/thrift/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocolthrift><span>Thrift protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocolrmi-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocolrmi-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocolrmi-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/rmi/ title="Rmi agreement" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocolrmi><span>Rmi Agreement</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocolredis-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocolredis-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocolredis-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/redis/ title="Redis protocol" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocolredis><span>Redis Protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocolhessian-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocolhessian-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocolhessian-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/hessian/ title="Hessian Agreement" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocolhessian><span>Hessian Protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocolwebservice-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocolwebservice-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocolwebservice-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/webservice/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocolwebservice><span>Webservice protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualprotocolmemcached-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualprotocolmemcached-check>
<label for=m-endocs3-v2java-sdkreference-manualprotocolmemcached-check><a href=/en/docs3-v2/java-sdk/reference-manual/protocol/memcached/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualprotocolmemcached><span>Memcached protocol</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkreference-manualregistry-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualregistry-check>
<label for=m-endocs3-v2java-sdkreference-manualregistry-check><a href=/en/docs3-v2/java-sdk/reference-manual/registry/ title="Registration Center Description" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualregistry><span>Description of Registration Center</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualregistryoverview-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualregistryoverview-check>
<label for=m-endocs3-v2java-sdkreference-manualregistryoverview-check><a href=/en/docs3-v2/java-sdk/reference-manual/registry/overview/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualregistryoverview><span>Overview</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualregistryzookeeper-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualregistryzookeeper-check>
<label for=m-endocs3-v2java-sdkreference-manualregistryzookeeper-check><a href=/en/docs3-v2/java-sdk/reference-manual/registry/zookeeper/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualregistryzookeeper><span>Zookeeper</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualregistrynacos-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualregistrynacos-check>
<label for=m-endocs3-v2java-sdkreference-manualregistrynacos-check><a href=/en/docs3-v2/java-sdk/reference-manual/registry/nacos/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualregistrynacos><span>Nacos</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualregistrymulticast-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualregistrymulticast-check>
<label for=m-endocs3-v2java-sdkreference-manualregistrymulticast-check><a href=/en/docs3-v2/java-sdk/reference-manual/registry/multicast/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualregistrymulticast><span>Multicast</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualregistryredis-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualregistryredis-check>
<label for=m-endocs3-v2java-sdkreference-manualregistryredis-check><a href=/en/docs3-v2/java-sdk/reference-manual/registry/redis/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualregistryredis><span>Redis</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualregistrymultiple-registry-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualregistrymultiple-registry-check>
<label for=m-endocs3-v2java-sdkreference-manualregistrymultiple-registry-check><a href=/en/docs3-v2/java-sdk/reference-manual/registry/multiple-registry/ title="Multiple Registries" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualregistrymultiple-registry><span>Multiple Registration Centers</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualregistrysimple-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualregistrysimple-check>
<label for=m-endocs3-v2java-sdkreference-manualregistrysimple-check><a href=/en/docs3-v2/java-sdk/reference-manual/registry/simple/ title="Simple Registry" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualregistrysimple><span>Simple</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkreference-manualmetadata-center-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualmetadata-center-check>
<label for=m-endocs3-v2java-sdkreference-manualmetadata-center-check><a href=/en/docs3-v2/java-sdk/reference-manual/metadata-center/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualmetadata-center><span>Metadata Center</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualmetadata-centeroverview-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualmetadata-centeroverview-check>
<label for=m-endocs3-v2java-sdkreference-manualmetadata-centeroverview-check><a href=/en/docs3-v2/java-sdk/reference-manual/metadata-center/overview/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualmetadata-centeroverview><span>Overview of Metadata Center</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualmetadata-centernacos-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualmetadata-centernacos-check>
<label for=m-endocs3-v2java-sdkreference-manualmetadata-centernacos-check><a href=/en/docs3-v2/java-sdk/reference-manual/metadata-center/nacos/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualmetadata-centernacos><span>Nacos</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualmetadata-centerzookeeper-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualmetadata-centerzookeeper-check>
<label for=m-endocs3-v2java-sdkreference-manualmetadata-centerzookeeper-check><a href=/en/docs3-v2/java-sdk/reference-manual/metadata-center/zookeeper/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualmetadata-centerzookeeper><span>Zookeeper</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualmetadata-centerredis-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualmetadata-centerredis-check>
<label for=m-endocs3-v2java-sdkreference-manualmetadata-centerredis-check><a href=/en/docs3-v2/java-sdk/reference-manual/metadata-center/redis/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualmetadata-centerredis><span>Redis</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkreference-manualconfig-center-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualconfig-center-check>
<label for=m-endocs3-v2java-sdkreference-manualconfig-center-check><a href=/en/docs3-v2/java-sdk/reference-manual/config-center/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualconfig-center><span>Configuration Center</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualconfig-centerzookeeper-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualconfig-centerzookeeper-check>
<label for=m-endocs3-v2java-sdkreference-manualconfig-centerzookeeper-check><a href=/en/docs3-v2/java-sdk/reference-manual/config-center/zookeeper/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualconfig-centerzookeeper><span>Zookeeper</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualconfig-centernacos-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualconfig-centernacos-check>
<label for=m-endocs3-v2java-sdkreference-manualconfig-centernacos-check><a href=/en/docs3-v2/java-sdk/reference-manual/config-center/nacos/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualconfig-centernacos><span>Nacos</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualconfig-centerapollo-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualconfig-centerapollo-check>
<label for=m-endocs3-v2java-sdkreference-manualconfig-centerapollo-check><a href=/en/docs3-v2/java-sdk/reference-manual/config-center/apollo/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualconfig-centerapollo><span>Apollo</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkreference-manualmesh-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualmesh-check>
<label for=m-endocs3-v2java-sdkreference-manualmesh-check><a href=/en/docs3-v2/java-sdk/reference-manual/mesh/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualmesh><span>Mesh Manual</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualmeshmesh-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualmeshmesh-check>
<label for=m-endocs3-v2java-sdkreference-manualmeshmesh-check><a href=/en/docs3-v2/java-sdk/reference-manual/mesh/mesh/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualmeshmesh><span>Debug Reference Documentation</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkreference-manualperformance-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualperformance-check>
<label for=m-endocs3-v2java-sdkreference-manualperformance-check><a href=/en/docs3-v2/java-sdk/reference-manual/performance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualperformance><span>Performance Reference Manual</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualperformancebenchmarking-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualperformancebenchmarking-check>
<label for=m-endocs3-v2java-sdkreference-manualperformancebenchmarking-check><a href=/en/docs3-v2/java-sdk/reference-manual/performance/benchmarking/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualperformancebenchmarking><span>Application-Level Service Discovery Benchmark</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualperformancerpc-benchmarking-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualperformancerpc-benchmarking-check>
<label for=m-endocs3-v2java-sdkreference-manualperformancerpc-benchmarking-check><a href=/en/docs3-v2/java-sdk/reference-manual/performance/rpc-benchmarking/ title="RPC Protocol Triple&amp;Dubbo Benchmark" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualperformancerpc-benchmarking><span>RPC Benchmark</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkreference-manualspi-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspi-check>
<label for=m-endocs3-v2java-sdkreference-manualspi-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualspi><span>SPI Extension Manual</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspioverview-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspioverview-check>
<label for=m-endocs3-v2java-sdkreference-manualspioverview-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/overview/ title="Dubbo SPI Overview" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspioverview><span>Dubbo SPI overview</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkreference-manualspidescription-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescription-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescription-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkreference-manualspidescription><span>Dubbo SPI extension implementation description</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionprotocol-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionprotocol-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionprotocol-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionprotocol><span>Protocol Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionfilter-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionfilter-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionfilter-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/filter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionfilter><span>Call Intercept Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptioninvoker-listener-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptioninvoker-listener-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptioninvoker-listener-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/invoker-listener/ title="Reference Listener Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptioninvoker-listener><span>Reference listener extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionexporter-listener-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionexporter-listener-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionexporter-listener-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/exporter-listener/ title="Expose Listener Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionexporter-listener><span>Expose listener extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptioncluster-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptioncluster-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptioncluster-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/cluster/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptioncluster><span>Cluster Expansion</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionrouter-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionrouter-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionrouter-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/router/ title="Route Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionrouter><span>Routing Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionload-balance-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionload-balance-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionload-balance-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/load-balance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionload-balance><span>Load Balancing Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionmerger-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionmerger-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionmerger-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/merger/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionmerger><span>Merge result extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionregistry-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionregistry-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionregistry-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionregistry><span>Registry Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionmonitor-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionmonitor-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionmonitor-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/monitor/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionmonitor><span>Monitoring Center Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionextension-factory-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionextension-factory-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionextension-factory-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/extension-factory/ title="Extension Point Load Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionextension-factory><span>Extension point load extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionproxy-factory-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionproxy-factory-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionproxy-factory-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/proxy-factory/ title="Dynamic Proxy Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionproxy-factory><span>Dynamic proxy extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionreadiness-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionreadiness-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionreadiness-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/readiness/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionreadiness><span>Readiness Probe</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionstartup-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionstartup-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionstartup-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/startup/ title="Startup Startup Probe" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionstartup><span>Start Probe</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionliveness-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionliveness-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionliveness-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/liveness/ title="Liveness Survival Probe" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionliveness><span>Survival Probe</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptioncompiler-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptioncompiler-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptioncompiler-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/compiler/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptioncompiler><span>Compiler Extensions</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionconfig-center-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionconfig-center-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionconfig-center-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/config-center/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionconfig-center><span>Configuration Center Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionmetadata-report-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionmetadata-report-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionmetadata-report-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/metadata-report/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionmetadata-report><span>Metadata Center Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptiondispatcher-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptiondispatcher-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptiondispatcher-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/dispatcher/ title="Message Dispatch Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptiondispatcher><span>Message dispatch extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionthreadpool-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionthreadpool-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionthreadpool-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/threadpool/ title="Thread Pool Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionthreadpool><span>Thread pool extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionserialize-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionserialize-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionserialize-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/serialize/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionserialize><span>Serialization Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionremoting-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionremoting-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionremoting-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/remoting/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionremoting><span>Network Transport Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionexchanger-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionexchanger-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionexchanger-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/exchanger/ title="Information Exchange Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionexchanger><span>Information exchange extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionnetworker-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionnetworker-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionnetworker-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/networker/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionnetworker><span>Network Expansion</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionpage-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionpage-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionpage-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/page/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionpage><span>Peer-to-peer network node builder extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptiontelnet-handler-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptiontelnet-handler-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptiontelnet-handler-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/telnet-handler/ title="Telnet Command Extensions" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptiontelnet-handler><span>Telnet command extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionstatus-checker-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionstatus-checker-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionstatus-checker-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/status-checker/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionstatus-checker><span>Status Check Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptioncontainer-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptioncontainer-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptioncontainer-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/container/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptioncontainer><span>Container Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptioncache-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptioncache-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptioncache-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/cache/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptioncache><span>Cache Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionvalidation-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionvalidation-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionvalidation-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/validation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionvalidation><span>Authentication Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionlogger-adapter-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionlogger-adapter-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionlogger-adapter-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/logger-adapter/ title="Log Adaptation Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionlogger-adapter><span>Log adaptation extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptionqos-permission-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptionqos-permission-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptionqos-permission-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/qos-permission/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptionqos-permission><span>QoS Anonymous Access Verification Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkreference-manualspidescriptiondubbo-spi-li><input type=checkbox id=m-endocs3-v2java-sdkreference-manualspidescriptiondubbo-spi-check>
<label for=m-endocs3-v2java-sdkreference-manualspidescriptiondubbo-spi-check><a href=/en/docs3-v2/java-sdk/reference-manual/spi/description/dubbo-spi/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkreference-manualspidescriptiondubbo-spi><span>Extension Point Development Guide</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-endocs3-v2java-sdkupgrades-and-compatibility-li><input type=checkbox id=m-endocs3-v2java-sdkupgrades-and-compatibility-check>
<label for=m-endocs3-v2java-sdkupgrades-and-compatibility-check><a href=/en/docs3-v2/java-sdk/upgrades-and-compatibility/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkupgrades-and-compatibility><span>Upgrade Compatibility</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkupgrades-and-compatibility2x-to-3x-compatibility-guide-li><input type=checkbox id=m-endocs3-v2java-sdkupgrades-and-compatibility2x-to-3x-compatibility-guide-check>
<label for=m-endocs3-v2java-sdkupgrades-and-compatibility2x-to-3x-compatibility-guide-check><a href=/en/docs3-v2/java-sdk/upgrades-and-compatibility/2.x-to-3.x-compatibility-guide/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkupgrades-and-compatibility2x-to-3x-compatibility-guide><span>2.x to 3.x Operation Guide</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkupgrades-and-compatibilitymigration-triple-li><input type=checkbox id=m-endocs3-v2java-sdkupgrades-and-compatibilitymigration-triple-check>
<label for=m-endocs3-v2java-sdkupgrades-and-compatibilitymigration-triple-check><a href=/en/docs3-v2/java-sdk/upgrades-and-compatibility/migration-triple/ title="Guide to Migrating Dubbo Protocol to Triple Protocol" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkupgrades-and-compatibilitymigration-triple><span>Guide to migrating Dubbo protocol to Triple protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkupgrades-and-compatibility31-to-32-compatibility-guide-li><input type=checkbox id=m-endocs3-v2java-sdkupgrades-and-compatibility31-to-32-compatibility-guide-check>
<label for=m-endocs3-v2java-sdkupgrades-and-compatibility31-to-32-compatibility-guide-check><a href=/en/docs3-v2/java-sdk/upgrades-and-compatibility/3.1-to-3.2-compatibility-guide/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkupgrades-and-compatibility31-to-32-compatibility-guide><span>3.1 upgrade to 3.2</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discovery-li><input type=checkbox id=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discovery-check>
<label for=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discovery-check><a href=/en/docs3-v2/java-sdk/upgrades-and-compatibility/service-discovery/ title="Application Level Service Discovery" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discovery><span>Application-Level Service Discovery</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discoveryservice-discovery-samples-li><input type=checkbox id=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discoveryservice-discovery-samples-check>
<label for=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discoveryservice-discovery-samples-check><a href=/en/docs3-v2/java-sdk/upgrades-and-compatibility/service-discovery/service-discovery-samples/ title="Application-Level Service Discovery Migration Example" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discoveryservice-discovery-samples><span>Application-level service discovery migration example</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discoverymigration-service-discovery-li><input type=checkbox id=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discoverymigration-service-discovery-check>
<label for=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discoverymigration-service-discovery-check><a href=/en/docs3-v2/java-sdk/upgrades-and-compatibility/service-discovery/migration-service-discovery/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discoverymigration-service-discovery><span>Guidelines for migrating interface-level service discovery to application-level service discovery</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discoveryservice-discovery-rule-li><input type=checkbox id=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discoveryservice-discovery-rule-check>
<label for=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discoveryservice-discovery-rule-check><a href=/en/docs3-v2/java-sdk/upgrades-and-compatibility/service-discovery/service-discovery-rule/ title="Application-level Service Discovery Address Migration Rules Description" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkupgrades-and-compatibilityservice-discoveryservice-discovery-rule><span>Application-level service discovery address migration rules</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkupgrades-and-compatibilityserialization-upgrade-li><input type=checkbox id=m-endocs3-v2java-sdkupgrades-and-compatibilityserialization-upgrade-check>
<label for=m-endocs3-v2java-sdkupgrades-and-compatibilityserialization-upgrade-check><a href=/en/docs3-v2/java-sdk/upgrades-and-compatibility/serialization-upgrade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkupgrades-and-compatibilityserialization-upgrade><span>Serialization Protocol Upgrade Guide</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkupgrades-and-compatibilityprotobufinterface-li><input type=checkbox id=m-endocs3-v2java-sdkupgrades-and-compatibilityprotobufinterface-check>
<label for=m-endocs3-v2java-sdkupgrades-and-compatibilityprotobufinterface-check><a href=/en/docs3-v2/java-sdk/upgrades-and-compatibility/protobufinterface/ title="Comparison of Protobuf and Interface" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkupgrades-and-compatibilityprotobufinterface><span>Protobuf vs Interface</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkupgrades-and-compatibility30-to-31-compatibility-guide-li><input type=checkbox id=m-endocs3-v2java-sdkupgrades-and-compatibility30-to-31-compatibility-guide-check>
<label for=m-endocs3-v2java-sdkupgrades-and-compatibility30-to-31-compatibility-guide-check><a href=/en/docs3-v2/java-sdk/upgrades-and-compatibility/3.0-to-3.1-compatibility-guide/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkupgrades-and-compatibility30-to-31-compatibility-guide><span>3.0 to 3.1 Operation Guide</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkfaq-li><input type=checkbox id=m-endocs3-v2java-sdkfaq-check>
<label for=m-endocs3-v2java-sdkfaq-check><a href=/en/docs3-v2/java-sdk/faq/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkfaq><span>FAQ</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkfaq0-li><input type=checkbox id=m-endocs3-v2java-sdkfaq0-check>
<label for=m-endocs3-v2java-sdkfaq0-check><a href=/en/docs3-v2/java-sdk/faq/0/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkfaq0><span>0 - Common</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq01-li><input type=checkbox id=m-endocs3-v2java-sdkfaq01-check>
<label for=m-endocs3-v2java-sdkfaq01-check><a href=/en/docs3-v2/java-sdk/faq/0/1/ title="0-1 - thread pool resource exhausted" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq01><span>0-1 - thread pool resources exhausted</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq02-li><input type=checkbox id=m-endocs3-v2java-sdkfaq02-check>
<label for=m-endocs3-v2java-sdkfaq02-check><a href=/en/docs3-v2/java-sdk/faq/0/2/ title="0-2 - Illegal property value" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq02><span>0-2 - Illegal attribute value</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq03-li><input type=checkbox id=m-endocs3-v2java-sdkfaq03-check>
<label for=m-endocs3-v2java-sdkfaq03-check><a href=/en/docs3-v2/java-sdk/faq/0/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq03><span>0-3 - Unable to access cache path</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq04-li><input type=checkbox id=m-endocs3-v2java-sdkfaq04-check>
<label for=m-endocs3-v2java-sdkfaq04-check><a href=/en/docs3-v2/java-sdk/faq/0/4/ title="0-4 - cache entry exceeded" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq04><span>0-4 - Cache entry limit exceeded</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq05-li><input type=checkbox id=m-endocs3-v2java-sdkfaq05-check>
<label for=m-endocs3-v2java-sdkfaq05-check><a href=/en/docs3-v2/java-sdk/faq/0/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq05><span>0-5 - Cache file size exceeded</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq06-li><input type=checkbox id=m-endocs3-v2java-sdkfaq06-check>
<label for=m-endocs3-v2java-sdkfaq06-check><a href=/en/docs3-v2/java-sdk/faq/0/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq06><span>0-6 - Thread interruption exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq07-li><input type=checkbox id=m-endocs3-v2java-sdkfaq07-check>
<label for=m-endocs3-v2java-sdkfaq07-check><a href=/en/docs3-v2/java-sdk/faq/0/7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq07><span>0-7 - Reflection class not found</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq08-li><input type=checkbox id=m-endocs3-v2java-sdkfaq08-check>
<label for=m-endocs3-v2java-sdkfaq08-check><a href=/en/docs3-v2/java-sdk/faq/0/8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq08><span>0-8 - reflection failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq09-li><input type=checkbox id=m-endocs3-v2java-sdkfaq09-check>
<label for=m-endocs3-v2java-sdkfaq09-check><a href=/en/docs3-v2/java-sdk/faq/0/9/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq09><span>0-9 - Failed to notify event</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq010-li><input type=checkbox id=m-endocs3-v2java-sdkfaq010-check>
<label for=m-endocs3-v2java-sdkfaq010-check><a href=/en/docs3-v2/java-sdk/faq/0/10/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq010><span>0-10 - The current call is no longer supported</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq011-li><input type=checkbox id=m-endocs3-v2java-sdkfaq011-check>
<label for=m-endocs3-v2java-sdkfaq011-check><a href=/en/docs3-v2/java-sdk/faq/0/11/ title="0-11 - Service stop failed" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq011><span>0-11 - Service stop failure</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq012-li><input type=checkbox id=m-endocs3-v2java-sdkfaq012-check>
<label for=m-endocs3-v2java-sdkfaq012-check><a href=/en/docs3-v2/java-sdk/faq/0/12/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq012><span>0-12 - Unknown exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq013-li><input type=checkbox id=m-endocs3-v2java-sdkfaq013-check>
<label for=m-endocs3-v2java-sdkfaq013-check><a href=/en/docs3-v2/java-sdk/faq/0/13/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq013><span>0-13 - An exception occurred in the metrics collector</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq014-li><input type=checkbox id=m-endocs3-v2java-sdkfaq014-check>
<label for=m-endocs3-v2java-sdkfaq014-check><a href=/en/docs3-v2/java-sdk/faq/0/14/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq014><span>0-14 - Monitoring exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq015-li><input type=checkbox id=m-endocs3-v2java-sdkfaq015-check>
<label for=m-endocs3-v2java-sdkfaq015-check><a href=/en/docs3-v2/java-sdk/faq/0/15/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq015><span>0-15 - An exception occurred while loading the extension class</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq016-li><input type=checkbox id=m-endocs3-v2java-sdkfaq016-check>
<label for=m-endocs3-v2java-sdkfaq016-check><a href=/en/docs3-v2/java-sdk/faq/0/16/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq016><span>0-16 - No actuators available</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq017-li><input type=checkbox id=m-endocs3-v2java-sdkfaq017-check>
<label for=m-endocs3-v2java-sdkfaq017-check><a href=/en/docs3-v2/java-sdk/faq/0/17/ title="0-17 - Actuator encountered an unknown exception while shutting down" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq017><span>0-17 - An unknown exception occurred while the actuator was shutting down</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq018-li><input type=checkbox id=m-endocs3-v2java-sdkfaq018-check>
<label for=m-endocs3-v2java-sdkfaq018-check><a href=/en/docs3-v2/java-sdk/faq/0/18/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq018><span>0-18 - thread pool executor is misused</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq019-li><input type=checkbox id=m-endocs3-v2java-sdkfaq019-check>
<label for=m-endocs3-v2java-sdkfaq019-check><a href=/en/docs3-v2/java-sdk/faq/0/19/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq019><span>0-19 - An exception occurred while processing the task</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq020-li><input type=checkbox id=m-endocs3-v2java-sdkfaq020-check>
<label for=m-endocs3-v2java-sdkfaq020-check><a href=/en/docs3-v2/java-sdk/faq/0/20/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq020><span>0-20 - An exception occurred while storing stack information</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq021-li><input type=checkbox id=m-endocs3-v2java-sdkfaq021-check>
<label for=m-endocs3-v2java-sdkfaq021-check><a href=/en/docs3-v2/java-sdk/faq/0/21/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq021><span>0-21 - Too many instances built</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq022-li><input type=checkbox id=m-endocs3-v2java-sdkfaq022-check>
<label for=m-endocs3-v2java-sdkfaq022-check><a href=/en/docs3-v2/java-sdk/faq/0/22/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq022><span>0-22 - I/O stream exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq023-li><input type=checkbox id=m-endocs3-v2java-sdkfaq023-check>
<label for=m-endocs3-v2java-sdkfaq023-check><a href=/en/docs3-v2/java-sdk/faq/0/23/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq023><span>0-23 - Serialized data conversion exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq024-li><input type=checkbox id=m-endocs3-v2java-sdkfaq024-check>
<label for=m-endocs3-v2java-sdkfaq024-check><a href=/en/docs3-v2/java-sdk/faq/0/24/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq024><span>0-24 - Override field value exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq025-li><input type=checkbox id=m-endocs3-v2java-sdkfaq025-check>
<label for=m-endocs3-v2java-sdkfaq025-check><a href=/en/docs3-v2/java-sdk/faq/0/25/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq025><span>0-25 - Error loading map</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq026-li><input type=checkbox id=m-endocs3-v2java-sdkfaq026-check>
<label for=m-endocs3-v2java-sdkfaq026-check><a href=/en/docs3-v2/java-sdk/faq/0/26/ title="0-26 - Warning message when metadata is published to the service" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq026><span>0-26 - Warning message when metadata publishing service</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq027-li><input type=checkbox id=m-endocs3-v2java-sdkfaq027-check>
<label for=m-endocs3-v2java-sdkfaq027-check><a href=/en/docs3-v2/java-sdk/faq/0/27/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq027><span>0-27 - Thread pool isolation configuration exception</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkfaq1-li><input type=checkbox id=m-endocs3-v2java-sdkfaq1-check>
<label for=m-endocs3-v2java-sdkfaq1-check><a href=/en/docs3-v2/java-sdk/faq/1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkfaq1><span>1 - Registry</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq11-li><input type=checkbox id=m-endocs3-v2java-sdkfaq11-check>
<label for=m-endocs3-v2java-sdkfaq11-check><a href=/en/docs3-v2/java-sdk/faq/1/1/ title="1-1 - Address Illegal" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq11><span>1-1 - Illegal address</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq13-li><input type=checkbox id=m-endocs3-v2java-sdkfaq13-check>
<label for=m-endocs3-v2java-sdkfaq13-check><a href=/en/docs3-v2/java-sdk/faq/1/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq13><span>1-3 - URL destruction failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq14-li><input type=checkbox id=m-endocs3-v2java-sdkfaq14-check>
<label for=m-endocs3-v2java-sdkfaq14-check><a href=/en/docs3-v2/java-sdk/faq/1/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq14><span>1-4 - Empty address</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq15-li><input type=checkbox id=m-endocs3-v2java-sdkfaq15-check>
<label for=m-endocs3-v2java-sdkfaq15-check><a href=/en/docs3-v2/java-sdk/faq/1/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq15><span>1-5 - URL received without any parameters</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq16-li><input type=checkbox id=m-endocs3-v2java-sdkfaq16-check>
<label for=m-endocs3-v2java-sdkfaq16-check><a href=/en/docs3-v2/java-sdk/faq/1/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq16><span>1-6 - Error clearing URL cache</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq17-li><input type=checkbox id=m-endocs3-v2java-sdkfaq17-check>
<label for=m-endocs3-v2java-sdkfaq17-check><a href=/en/docs3-v2/java-sdk/faq/1/7/ title="1-7 - Notification registration event failed" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq17><span>1-7 - Failed to read and write registry service cache</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq18-li><input type=checkbox id=m-endocs3-v2java-sdkfaq18-check>
<label for=m-endocs3-v2java-sdkfaq18-check><a href=/en/docs3-v2/java-sdk/faq/1/8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq18><span>1-8 - Unregister (unsubscribe) address failed on destroy</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq19-li><input type=checkbox id=m-endocs3-v2java-sdkfaq19-check>
<label for=m-endocs3-v2java-sdkfaq19-check><a href=/en/docs3-v2/java-sdk/faq/1/9/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq19><span>1-9 - Failed to read and write registry service cache</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq110-li><input type=checkbox id=m-endocs3-v2java-sdkfaq110-check>
<label for=m-endocs3-v2java-sdkfaq110-check><a href=/en/docs3-v2/java-sdk/faq/1/10/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq110><span>1-10 - Failed to read and write registry service cache</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq111-li><input type=checkbox id=m-endocs3-v2java-sdkfaq111-check>
<label for=m-endocs3-v2java-sdkfaq111-check><a href=/en/docs3-v2/java-sdk/faq/1/11/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq111><span>1-11 - Registration service instance creation failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq112-li><input type=checkbox id=m-endocs3-v2java-sdkfaq112-check>
<label for=m-endocs3-v2java-sdkfaq112-check><a href=/en/docs3-v2/java-sdk/faq/1/12/ title='1-12 - Instances of "Registry Service" have been destroyed' class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq112><span>1-12 - Instances of "Registration Service" have been destroyed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq113-li><input type=checkbox id=m-endocs3-v2java-sdkfaq113-check>
<label for=m-endocs3-v2java-sdkfaq113-check><a href=/en/docs3-v2/java-sdk/faq/1/13/ title="1-13 - Failed to execute task retry" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq113><span>1-13 - Failed to execute retry task</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq114-li><input type=checkbox id=m-endocs3-v2java-sdkfaq114-check>
<label for=m-endocs3-v2java-sdkfaq114-check><a href=/en/docs3-v2/java-sdk/faq/1/14/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq114><span>1-14 - Dynamic configuration recognition failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq115-li><input type=checkbox id=m-endocs3-v2java-sdkfaq115-check>
<label for=m-endocs3-v2java-sdkfaq115-check><a href=/en/docs3-v2/java-sdk/faq/1/15/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq115><span>1-15 - Failed to destroy service</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq116-li><input type=checkbox id=m-endocs3-v2java-sdkfaq116-check>
<label for=m-endocs3-v2java-sdkfaq116-check><a href=/en/docs3-v2/java-sdk/faq/1/16/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq116><span>1-16 - There are unsupported categories</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq117-li><input type=checkbox id=m-endocs3-v2java-sdkfaq117-check>
<label for=m-endocs3-v2java-sdkfaq117-check><a href=/en/docs3-v2/java-sdk/faq/1/17/ title="1-17 - Metadata Server Failure" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq117><span>1-17 - Metadata Server failure</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq118-li><input type=checkbox id=m-endocs3-v2java-sdkfaq118-check>
<label for=m-endocs3-v2java-sdkfaq118-check><a href=/en/docs3-v2/java-sdk/faq/1/18/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq118><span>1-18 - metadata service port not provided</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq119-li><input type=checkbox id=m-endocs3-v2java-sdkfaq119-check>
<label for=m-endocs3-v2java-sdkfaq119-check><a href=/en/docs3-v2/java-sdk/faq/1/19/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq119><span>1-19 - K8S monitoring exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq120-li><input type=checkbox id=m-endocs3-v2java-sdkfaq120-check>
<label for=m-endocs3-v2java-sdkfaq120-check><a href=/en/docs3-v2/java-sdk/faq/1/20/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq120><span>1-20 - K8S Pod does not exist</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq121-li><input type=checkbox id=m-endocs3-v2java-sdkfaq121-check>
<label for=m-endocs3-v2java-sdkfaq121-check><a href=/en/docs3-v2/java-sdk/faq/1/21/ title="1-21 - K8S No Service Available" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq121><span>1-21 - No service available for K8S</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq122-li><input type=checkbox id=m-endocs3-v2java-sdkfaq122-check>
<label for=m-endocs3-v2java-sdkfaq122-check><a href=/en/docs3-v2/java-sdk/faq/1/22/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq122><span>1-22 - K8S configuration address error</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq123-li><input type=checkbox id=m-endocs3-v2java-sdkfaq123-check>
<label for=m-endocs3-v2java-sdkfaq123-check><a href=/en/docs3-v2/java-sdk/faq/1/23/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq123><span>1-23 - Unable to download files via url</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq124-li><input type=checkbox id=m-endocs3-v2java-sdkfaq124-check>
<label for=m-endocs3-v2java-sdkfaq124-check><a href=/en/docs3-v2/java-sdk/faq/1/24/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq124><span>1-24 - ZK startup exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq125-li><input type=checkbox id=m-endocs3-v2java-sdkfaq125-check>
<label for=m-endocs3-v2java-sdkfaq125-check><a href=/en/docs3-v2/java-sdk/faq/1/25/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq125><span>1-25 - ZK destruction exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq126-li><input type=checkbox id=m-endocs3-v2java-sdkfaq126-check>
<label for=m-endocs3-v2java-sdkfaq126-check><a href=/en/docs3-v2/java-sdk/faq/1/26/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq126><span>1-26 - xDS certificate generation failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq127-li><input type=checkbox id=m-endocs3-v2java-sdkfaq127-check>
<label for=m-endocs3-v2java-sdkfaq127-check><a href=/en/docs3-v2/java-sdk/faq/1/27/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq127><span>1-27 - K8S monitoring exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq128-li><input type=checkbox id=m-endocs3-v2java-sdkfaq128-check>
<label for=m-endocs3-v2java-sdkfaq128-check><a href=/en/docs3-v2/java-sdk/faq/1/28/ title="1-28 - xDS Stub Error" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq128><span>1-28 - xDS stub error</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq129-li><input type=checkbox id=m-endocs3-v2java-sdkfaq129-check>
<label for=m-endocs3-v2java-sdkfaq129-check><a href=/en/docs3-v2/java-sdk/faq/1/29/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq129><span>1-29 - xDS failed to read file</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq130-li><input type=checkbox id=m-endocs3-v2java-sdkfaq130-check>
<label for=m-endocs3-v2java-sdkfaq130-check><a href=/en/docs3-v2/java-sdk/faq/1/30/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq130><span>1-30 - xDS request failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq131-li><input type=checkbox id=m-endocs3-v2java-sdkfaq131-check>
<label for=m-endocs3-v2java-sdkfaq131-check><a href=/en/docs3-v2/java-sdk/faq/1/31/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq131><span>1-31 - xDS Response Failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq132-li><input type=checkbox id=m-endocs3-v2java-sdkfaq132-check>
<label for=m-endocs3-v2java-sdkfaq132-check><a href=/en/docs3-v2/java-sdk/faq/1/32/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq132><span>1-32 - xDS Channel initialization failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq133-li><input type=checkbox id=m-endocs3-v2java-sdkfaq133-check>
<label for=m-endocs3-v2java-sdkfaq133-check><a href=/en/docs3-v2/java-sdk/faq/1/33/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq133><span>1-33 - xDS service discovery initialization failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq134-li><input type=checkbox id=m-endocs3-v2java-sdkfaq134-check>
<label for=m-endocs3-v2java-sdkfaq134-check><a href=/en/docs3-v2/java-sdk/faq/1/34/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq134><span>1-34 - Error parsing xDS</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq135-li><input type=checkbox id=m-endocs3-v2java-sdkfaq135-check>
<label for=m-endocs3-v2java-sdkfaq135-check><a href=/en/docs3-v2/java-sdk/faq/1/35/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq135><span>1-35 - ZK Anomaly</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq136-li><input type=checkbox id=m-endocs3-v2java-sdkfaq136-check>
<label for=m-endocs3-v2java-sdkfaq136-check><a href=/en/docs3-v2/java-sdk/faq/1/36/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq136><span>1-36 - Unknown exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq137-li><input type=checkbox id=m-endocs3-v2java-sdkfaq137-check>
<label for=m-endocs3-v2java-sdkfaq137-check><a href=/en/docs3-v2/java-sdk/faq/1/37/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq137><span>1-37 - Nacos Anomaly</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq138-li><input type=checkbox id=m-endocs3-v2java-sdkfaq138-check>
<label for=m-endocs3-v2java-sdkfaq138-check><a href=/en/docs3-v2/java-sdk/faq/1/38/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq138><span>1-38 - Socket connection exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq139-li><input type=checkbox id=m-endocs3-v2java-sdkfaq139-check>
<label for=m-endocs3-v2java-sdkfaq139-check><a href=/en/docs3-v2/java-sdk/faq/1/39/ title="1-39 - Failed to fetch metadata" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq139><span>1-39 - Failed to get metadata</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq140-li><input type=checkbox id=m-endocs3-v2java-sdkfaq140-check>
<label for=m-endocs3-v2java-sdkfaq140-check><a href=/en/docs3-v2/java-sdk/faq/1/40/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq140><span>1-40 - Route waiting too long</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq141-li><input type=checkbox id=m-endocs3-v2java-sdkfaq141-check>
<label for=m-endocs3-v2java-sdkfaq141-check><a href=/en/docs3-v2/java-sdk/faq/1/41/ title="1-41 - Istio exceptions" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq141><span>1-41 - Istio exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq142-li><input type=checkbox id=m-endocs3-v2java-sdkfaq142-check>
<label for=m-endocs3-v2java-sdkfaq142-check><a href=/en/docs3-v2/java-sdk/faq/1/42/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq142><span>1-42 - Nacos has a low version service</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkfaq2-li><input type=checkbox id=m-endocs3-v2java-sdkfaq2-check>
<label for=m-endocs3-v2java-sdkfaq2-check><a href=/en/docs3-v2/java-sdk/faq/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkfaq2><span>2 - Routing</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq21-li><input type=checkbox id=m-endocs3-v2java-sdkfaq21-check>
<label for=m-endocs3-v2java-sdkfaq21-check><a href=/en/docs3-v2/java-sdk/faq/2/1/ title="2-1 - Routing execution failed" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq21><span>2-1 - Execution of routing address selection failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq211-li><input type=checkbox id=m-endocs3-v2java-sdkfaq211-check>
<label for=m-endocs3-v2java-sdkfaq211-check><a href=/en/docs3-v2/java-sdk/faq/2/11/ title="2-11 - Label Routing Rules Illegal" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq211><span>2-11 - Label routing rules are invalid</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq212-li><input type=checkbox id=m-endocs3-v2java-sdkfaq212-check>
<label for=m-endocs3-v2java-sdkfaq212-check><a href=/en/docs3-v2/java-sdk/faq/2/12/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq212><span>2-12 - Label route acquisition provider application name is empty</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq213-li><input type=checkbox id=m-endocs3-v2java-sdkfaq213-check>
<label for=m-endocs3-v2java-sdkfaq213-check><a href=/en/docs3-v2/java-sdk/faq/2/13/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq213><span>2-13 - Failed to receive and load mesh routing rules</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq215-li><input type=checkbox id=m-endocs3-v2java-sdkfaq215-check>
<label for=m-endocs3-v2java-sdkfaq215-check><a href=/en/docs3-v2/java-sdk/faq/2/15/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq215><span>2-15 - Routing rule parsing failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq214-li><input type=checkbox id=m-endocs3-v2java-sdkfaq214-check>
<label for=m-endocs3-v2java-sdkfaq214-check><a href=/en/docs3-v2/java-sdk/faq/2/14/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq214><span>2-15 - Script route execution failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq216-li><input type=checkbox id=m-endocs3-v2java-sdkfaq216-check>
<label for=m-endocs3-v2java-sdkfaq216-check><a href=/en/docs3-v2/java-sdk/faq/2/16/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq216><span>2-16 - Request retries failed multiple times</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq217-li><input type=checkbox id=m-endocs3-v2java-sdkfaq217-check>
<label for=m-endocs3-v2java-sdkfaq217-check><a href=/en/docs3-v2/java-sdk/faq/2/17/ title="2-17 - mock request failed" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq217><span>2-17 - Mock request failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq218-li><input type=checkbox id=m-endocs3-v2java-sdkfaq218-check>
<label for=m-endocs3-v2java-sdkfaq218-check><a href=/en/docs3-v2/java-sdk/faq/2/18/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq218><span>2-18 - Mesh routing rules are not monitored</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq219-li><input type=checkbox id=m-endocs3-v2java-sdkfaq219-check>
<label for=m-endocs3-v2java-sdkfaq219-check><a href=/en/docs3-v2/java-sdk/faq/2/19/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq219><span>2-19 - Asynchronous request failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq22-li><input type=checkbox id=m-endocs3-v2java-sdkfaq22-check>
<label for=m-endocs3-v2java-sdkfaq22-check><a href=/en/docs3-v2/java-sdk/faq/2/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq22><span>2-2 - No Provider available (address not found)</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq23-li><input type=checkbox id=m-endocs3-v2java-sdkfaq23-check>
<label for=m-endocs3-v2java-sdkfaq23-check><a href=/en/docs3-v2/java-sdk/faq/2/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq23><span>2-3 - Routing shutdown failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq24-li><input type=checkbox id=m-endocs3-v2java-sdkfaq24-check>
<label for=m-endocs3-v2java-sdkfaq24-check><a href=/en/docs3-v2/java-sdk/faq/2/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq24><span>2-4 - Merger interface failed to load</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq25-li><input type=checkbox id=m-endocs3-v2java-sdkfaq25-check>
<label for=m-endocs3-v2java-sdkfaq25-check><a href=/en/docs3-v2/java-sdk/faq/2/5/ title="2-5 - Filter Provider Failed" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq25><span>2-5 - Screening providers failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq26-li><input type=checkbox id=m-endocs3-v2java-sdkfaq26-check>
<label for=m-endocs3-v2java-sdkfaq26-check><a href=/en/docs3-v2/java-sdk/faq/2/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq26><span>2-6 - Conditional routing filter provider list is empty</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq27-li><input type=checkbox id=m-endocs3-v2java-sdkfaq27-check>
<label for=m-endocs3-v2java-sdkfaq27-check><a href=/en/docs3-v2/java-sdk/faq/2/7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq27><span>2-7 - Conditional routing execution exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq28-li><input type=checkbox id=m-endocs3-v2java-sdkfaq28-check>
<label for=m-endocs3-v2java-sdkfaq28-check><a href=/en/docs3-v2/java-sdk/faq/2/8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq28><span>2-8 - The provider returned an abnormal response</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq29-li><input type=checkbox id=m-endocs3-v2java-sdkfaq29-check>
<label for=m-endocs3-v2java-sdkfaq29-check><a href=/en/docs3-v2/java-sdk/faq/2/9/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq29><span>2-9 - Increase timeout check task failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq210-li><input type=checkbox id=m-endocs3-v2java-sdkfaq210-check>
<label for=m-endocs3-v2java-sdkfaq210-check><a href=/en/docs3-v2/java-sdk/faq/2/10/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq210><span>2-10 - Failed to call service provider</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq220-li><input type=checkbox id=m-endocs3-v2java-sdkfaq220-check>
<label for=m-endocs3-v2java-sdkfaq220-check><a href=/en/docs3-v2/java-sdk/faq/2/20/ title="2-20 - Failed to get grouped results merged" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq220><span>2-20 - Failed to get grouped results combined</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkfaq3-li><input type=checkbox id=m-endocs3-v2java-sdkfaq3-check>
<label for=m-endocs3-v2java-sdkfaq3-check><a href=/en/docs3-v2/java-sdk/faq/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkfaq3><span>3 - Proxy</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq31-li><input type=checkbox id=m-endocs3-v2java-sdkfaq31-check>
<label for=m-endocs3-v2java-sdkfaq31-check><a href=/en/docs3-v2/java-sdk/faq/3/1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq31><span>3-1 - Failed to convert address to Invoker</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq32-li><input type=checkbox id=m-endocs3-v2java-sdkfaq32-check>
<label for=m-endocs3-v2java-sdkfaq32-check><a href=/en/docs3-v2/java-sdk/faq/3/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq32><span>3-2 - Publish or push service failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq33-li><input type=checkbox id=m-endocs3-v2java-sdkfaq33-check>
<label for=m-endocs3-v2java-sdkfaq33-check><a href=/en/docs3-v2/java-sdk/faq/3/3/ title="3-3 - Failed to generate bytecode via Javassist" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq33><span>3-3 - Failed to generate bytecode through Javassist</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq34-li><input type=checkbox id=m-endocs3-v2java-sdkfaq34-check>
<label for=m-endocs3-v2java-sdkfaq34-check><a href=/en/docs3-v2/java-sdk/faq/3/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq34><span>3-4 - Client sending request timed out</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq35-li><input type=checkbox id=m-endocs3-v2java-sdkfaq35-check>
<label for=m-endocs3-v2java-sdkfaq35-check><a href=/en/docs3-v2/java-sdk/faq/3/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq35><span>3-5 - An exception occurred in the asynchronous response</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq36-li><input type=checkbox id=m-endocs3-v2java-sdkfaq36-check>
<label for=m-endocs3-v2java-sdkfaq36-check><a href=/en/docs3-v2/java-sdk/faq/3/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq36><span>3-6 - An exception occurred in the proxy execution service</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq37-li><input type=checkbox id=m-endocs3-v2java-sdkfaq37-check>
<label for=m-endocs3-v2java-sdkfaq37-check><a href=/en/docs3-v2/java-sdk/faq/3/7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq37><span>3-7 - Server response timed out</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq38-li><input type=checkbox id=m-endocs3-v2java-sdkfaq38-check>
<label for=m-endocs3-v2java-sdkfaq38-check><a href=/en/docs3-v2/java-sdk/faq/3/8/ title="3-8 - Proxy Failure" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq38><span>3-8 - Agent failed</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkfaq4-li><input type=checkbox id=m-endocs3-v2java-sdkfaq4-check>
<label for=m-endocs3-v2java-sdkfaq4-check><a href=/en/docs3-v2/java-sdk/faq/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkfaq4><span>4 - Protocol</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq41-li><input type=checkbox id=m-endocs3-v2java-sdkfaq41-check>
<label for=m-endocs3-v2java-sdkfaq41-check><a href=/en/docs3-v2/java-sdk/faq/4/1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq41><span>4-1 - Unsupported protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq42-li><input type=checkbox id=m-endocs3-v2java-sdkfaq42-check>
<label for=m-endocs3-v2java-sdkfaq42-check><a href=/en/docs3-v2/java-sdk/faq/4/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq42><span>4-2 - Serialization optimizer initial error</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq43-li><input type=checkbox id=m-endocs3-v2java-sdkfaq43-check>
<label for=m-endocs3-v2java-sdkfaq43-check><a href=/en/docs3-v2/java-sdk/faq/4/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq43><span>4-3 - Interface reference call failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq44-li><input type=checkbox id=m-endocs3-v2java-sdkfaq44-check>
<label for=m-endocs3-v2java-sdkfaq44-check><a href=/en/docs3-v2/java-sdk/faq/4/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq44><span>4-4 - Non-safe serialization method</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq45-li><input type=checkbox id=m-endocs3-v2java-sdkfaq45-check>
<label for=m-endocs3-v2java-sdkfaq45-check><a href=/en/docs3-v2/java-sdk/faq/4/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq45><span>4-5 - Stream closed exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq46-li><input type=checkbox id=m-endocs3-v2java-sdkfaq46-check>
<label for=m-endocs3-v2java-sdkfaq46-check><a href=/en/docs3-v2/java-sdk/faq/4/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq46><span>4-6 - Deserialization failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq47-li><input type=checkbox id=m-endocs3-v2java-sdkfaq47-check>
<label for=m-endocs3-v2java-sdkfaq47-check><a href=/en/docs3-v2/java-sdk/faq/4/7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq47><span>4-7 - An error occurred while closing the client</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq48-li><input type=checkbox id=m-endocs3-v2java-sdkfaq48-check>
<label for=m-endocs3-v2java-sdkfaq48-check><a href=/en/docs3-v2/java-sdk/faq/4/8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq48><span>4-8 - An error occurred while closing the server</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq49-li><input type=checkbox id=m-endocs3-v2java-sdkfaq49-check>
<label for=m-endocs3-v2java-sdkfaq49-check><a href=/en/docs3-v2/java-sdk/faq/4/9/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq49><span>4-9 - Parse failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq410-li><input type=checkbox id=m-endocs3-v2java-sdkfaq410-check>
<label for=m-endocs3-v2java-sdkfaq410-check><a href=/en/docs3-v2/java-sdk/faq/4/10/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq410><span>4-10 - Triple serialization result failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq411-li><input type=checkbox id=m-endocs3-v2java-sdkfaq411-check>
<label for=m-endocs3-v2java-sdkfaq411-check><a href=/en/docs3-v2/java-sdk/faq/4/11/ title="4-11 - Failed to initiate request" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq411><span>4-11 - Failed to initiate the request</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq412-li><input type=checkbox id=m-endocs3-v2java-sdkfaq412-check>
<label for=m-endocs3-v2java-sdkfaq412-check><a href=/en/docs3-v2/java-sdk/faq/4/12/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq412><span>4-12 - Failed to create Triple stream</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq413-li><input type=checkbox id=m-endocs3-v2java-sdkfaq413-check>
<label for=m-endocs3-v2java-sdkfaq413-check><a href=/en/docs3-v2/java-sdk/faq/4/13/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq413><span>4-13 - Server Timeout</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq414-li><input type=checkbox id=m-endocs3-v2java-sdkfaq414-check>
<label for=m-endocs3-v2java-sdkfaq414-check><a href=/en/docs3-v2/java-sdk/faq/4/14/ title="4-14 - Response Result Failed" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq414><span>4-14 - Response result failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq415-li><input type=checkbox id=m-endocs3-v2java-sdkfaq415-check>
<label for=m-endocs3-v2java-sdkfaq415-check><a href=/en/docs3-v2/java-sdk/faq/4/15/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq415><span>4-15 - Client Stream Listener</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq416-li><input type=checkbox id=m-endocs3-v2java-sdkfaq416-check>
<label for=m-endocs3-v2java-sdkfaq416-check><a href=/en/docs3-v2/java-sdk/faq/4/16/ title="4-16 - Service Closed" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq416><span>4-16 - Service is closed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq417-li><input type=checkbox id=m-endocs3-v2java-sdkfaq417-check>
<label for=m-endocs3-v2java-sdkfaq417-check><a href=/en/docs3-v2/java-sdk/faq/4/17/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq417><span>4-17 - Error closing all callers</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq418-li><input type=checkbox id=m-endocs3-v2java-sdkfaq418-check>
<label for=m-endocs3-v2java-sdkfaq418-check><a href=/en/docs3-v2/java-sdk/faq/4/18/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq418><span>4-18 - Unable to get service model from call</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq419-li><input type=checkbox id=m-endocs3-v2java-sdkfaq419-check>
<label for=m-endocs3-v2java-sdkfaq419-check><a href=/en/docs3-v2/java-sdk/faq/4/19/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq419><span>4-19 - Parameter values may be wrong</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq420-li><input type=checkbox id=m-endocs3-v2java-sdkfaq420-check>
<label for=m-endocs3-v2java-sdkfaq420-check><a href=/en/docs3-v2/java-sdk/faq/4/20/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq420><span>4-20 - Data decoding failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq421-li><input type=checkbox id=m-endocs3-v2java-sdkfaq421-check>
<label for=m-endocs3-v2java-sdkfaq421-check><a href=/en/docs3-v2/java-sdk/faq/4/21/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq421><span>4-21 - Insecure serialized data detected</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkfaq5-li><input type=checkbox id=m-endocs3-v2java-sdkfaq5-check>
<label for=m-endocs3-v2java-sdkfaq5-check><a href=/en/docs3-v2/java-sdk/faq/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkfaq5><span>5 - Config Center</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq51-li><input type=checkbox id=m-endocs3-v2java-sdkfaq51-check>
<label for=m-endocs3-v2java-sdkfaq51-check><a href=/en/docs3-v2/java-sdk/faq/5/1/ title="5-1 - Failed to connect to configuration center" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq51><span>5-1 - Failed to connect to the configuration center</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq52-li><input type=checkbox id=m-endocs3-v2java-sdkfaq52-check>
<label for=m-endocs3-v2java-sdkfaq52-check><a href=/en/docs3-v2/java-sdk/faq/5/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq52><span>5-2 - Failed to register/unregister shutdown hook method</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq53-li><input type=checkbox id=m-endocs3-v2java-sdkfaq53-check>
<label for=m-endocs3-v2java-sdkfaq53-check><a href=/en/docs3-v2/java-sdk/faq/5/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq53><span>5-3 - An unexpected error occurred while destroying a method call</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq54-li><input type=checkbox id=m-endocs3-v2java-sdkfaq54-check>
<label for=m-endocs3-v2java-sdkfaq54-check><a href=/en/docs3-v2/java-sdk/faq/5/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq54><span>5-4 - Method not found in service interface</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq55-li><input type=checkbox id=m-endocs3-v2java-sdkfaq55-check>
<label for=m-endocs3-v2java-sdkfaq55-check><a href=/en/docs3-v2/java-sdk/faq/5/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq55><span>5-5 - Unable to get env variables</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq56-li><input type=checkbox id=m-endocs3-v2java-sdkfaq56-check>
<label for=m-endocs3-v2java-sdkfaq56-check><a href=/en/docs3-v2/java-sdk/faq/5/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq56><span>5-6 - Attribute Conflict of Interface Type</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq57-li><input type=checkbox id=m-endocs3-v2java-sdkfaq57-check>
<label for=m-endocs3-v2java-sdkfaq57-check><a href=/en/docs3-v2/java-sdk/faq/5/7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq57><span>5-7 - An unexpected error occurred while canceling the export</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq58-li><input type=checkbox id=m-endocs3-v2java-sdkfaq58-check>
<label for=m-endocs3-v2java-sdkfaq58-check><a href=/en/docs3-v2/java-sdk/faq/5/8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq58><span>5-8 - The protocol will use a random available port</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq59-li><input type=checkbox id=m-endocs3-v2java-sdkfaq59-check>
<label for=m-endocs3-v2java-sdkfaq59-check><a href=/en/docs3-v2/java-sdk/faq/5/9/ title="5-9 - Service Configuration Export Failed" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq59><span>5-9 - Service configuration export failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq510-li><input type=checkbox id=m-endocs3-v2java-sdkfaq510-check>
<label for=m-endocs3-v2java-sdkfaq510-check><a href=/en/docs3-v2/java-sdk/faq/5/10/ title="5-10 - Registration interface application mapping failed for service" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq510><span>5-10 - Service's registration interface application mapping failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq511-li><input type=checkbox id=m-endocs3-v2java-sdkfaq511-check>
<label for=m-endocs3-v2java-sdkfaq511-check><a href=/en/docs3-v2/java-sdk/faq/5/11/ title="5-11 - Registration Instance Error" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq511><span>5-11 - Registration instance error</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq512-li><input type=checkbox id=m-endocs3-v2java-sdkfaq512-check>
<label for=m-endocs3-v2java-sdkfaq512-check><a href=/en/docs3-v2/java-sdk/faq/5/12/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq512><span>5-12 - Refresh instance and metadata errors</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq513-li><input type=checkbox id=m-endocs3-v2java-sdkfaq513-check>
<label for=m-endocs3-v2java-sdkfaq513-check><a href=/en/docs3-v2/java-sdk/faq/5/13/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq513><span>5-13 - Model cannot be destroyed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq514-li><input type=checkbox id=m-endocs3-v2java-sdkfaq514-check>
<label for=m-endocs3-v2java-sdkfaq514-check><a href=/en/docs3-v2/java-sdk/faq/5/14/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq514><span>5-14 - Model startup error</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq515-li><input type=checkbox id=m-endocs3-v2java-sdkfaq515-check>
<label for=m-endocs3-v2java-sdkfaq515-check><a href=/en/docs3-v2/java-sdk/faq/5/15/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq515><span>5-15 - Model Reference Error</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq516-li><input type=checkbox id=m-endocs3-v2java-sdkfaq516-check>
<label for=m-endocs3-v2java-sdkfaq516-check><a href=/en/docs3-v2/java-sdk/faq/5/16/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq516><span>5-16 - Unable to find any valid agreements</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq517-li><input type=checkbox id=m-endocs3-v2java-sdkfaq517-check>
<label for=m-endocs3-v2java-sdkfaq517-check><a href=/en/docs3-v2/java-sdk/faq/5/17/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq517><span>5-17 - Parameter value format error</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq518-li><input type=checkbox id=m-endocs3-v2java-sdkfaq518-check>
<label for=m-endocs3-v2java-sdkfaq518-check><a href=/en/docs3-v2/java-sdk/faq/5/18/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq518><span>5-18 - Notification registration event failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq519-li><input type=checkbox id=m-endocs3-v2java-sdkfaq519-check>
<label for=m-endocs3-v2java-sdkfaq519-check><a href=/en/docs3-v2/java-sdk/faq/5/19/ title="5-19 - Embedded ZooKeeper running abnormally" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq519><span>5-19 - The embedded ZooKeeper runs abnormally</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq520-li><input type=checkbox id=m-endocs3-v2java-sdkfaq520-check>
<label for=m-endocs3-v2java-sdkfaq520-check><a href=/en/docs3-v2/java-sdk/faq/5/20/ title="5-20 - Error occurred while stopping dubbo module" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq520><span>5-20 - An error occurred while stopping the dubbo module</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq521-li><input type=checkbox id=m-endocs3-v2java-sdkfaq521-check>
<label for=m-endocs3-v2java-sdkfaq521-check><a href=/en/docs3-v2/java-sdk/faq/5/21/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq521><span>5-21 - An exception occurred when the service was destroyed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq522-li><input type=checkbox id=m-endocs3-v2java-sdkfaq522-check>
<label for=m-endocs3-v2java-sdkfaq522-check><a href=/en/docs3-v2/java-sdk/faq/5/22/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq522><span>5-22 - An error occurred while initializing the registry</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq523-li><input type=checkbox id=m-endocs3-v2java-sdkfaq523-check>
<label for=m-endocs3-v2java-sdkfaq523-check><a href=/en/docs3-v2/java-sdk/faq/5/23/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq523><span>5-23 - Waiting for export/reference service exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq524-li><input type=checkbox id=m-endocs3-v2java-sdkfaq524-check>
<label for=m-endocs3-v2java-sdkfaq524-check><a href=/en/docs3-v2/java-sdk/faq/5/24/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq524><span>5-24 - An exception occurred while asynchronously waiting for the reference service</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq525-li><input type=checkbox id=m-endocs3-v2java-sdkfaq525-check>
<label for=m-endocs3-v2java-sdkfaq525-check><a href=/en/docs3-v2/java-sdk/faq/5/25/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq525><span>5-25 - Undefined exception from custom implementation</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq526-li><input type=checkbox id=m-endocs3-v2java-sdkfaq526-check>
<label for=m-endocs3-v2java-sdkfaq526-check><a href=/en/docs3-v2/java-sdk/faq/5/26/ title="5-26 - Metadata Exported" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq526><span>5-26 - Metadata exported</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq527-li><input type=checkbox id=m-endocs3-v2java-sdkfaq527-check>
<label for=m-endocs3-v2java-sdkfaq527-check><a href=/en/docs3-v2/java-sdk/faq/5/27/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq527><span>5-27 - Inner class API is misused</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq528-li><input type=checkbox id=m-endocs3-v2java-sdkfaq528-check>
<label for=m-endocs3-v2java-sdkfaq528-check><a href=/en/docs3-v2/java-sdk/faq/5/28/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq528><span>5-28 - No available annotation found</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq529-li><input type=checkbox id=m-endocs3-v2java-sdkfaq529-check>
<label for=m-endocs3-v2java-sdkfaq529-check><a href=/en/docs3-v2/java-sdk/faq/5/29/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq529><span>5-29 - Scan package not configured</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq530-li><input type=checkbox id=m-endocs3-v2java-sdkfaq530-check>
<label for=m-endocs3-v2java-sdkfaq530-check><a href=/en/docs3-v2/java-sdk/faq/5/30/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq530><span>5-30 - Duplicate bean definition</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq531-li><input type=checkbox id=m-endocs3-v2java-sdkfaq531-check>
<label for=m-endocs3-v2java-sdkfaq531-check><a href=/en/docs3-v2/java-sdk/faq/5/31/ title="5-31 - Status Check Error" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq531><span>5-31 - Status check error</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq532-li><input type=checkbox id=m-endocs3-v2java-sdkfaq532-check>
<label for=m-endocs3-v2java-sdkfaq532-check><a href=/en/docs3-v2/java-sdk/faq/5/32/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq532><span>5-32 - Apollo disconnected with an error</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq533-li><input type=checkbox id=m-endocs3-v2java-sdkfaq533-check>
<label for=m-endocs3-v2java-sdkfaq533-check><a href=/en/docs3-v2/java-sdk/faq/5/33/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq533><span>5-33 - An exception occurred in the Apollo configuration update event</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq534-li><input type=checkbox id=m-endocs3-v2java-sdkfaq534-check>
<label for=m-endocs3-v2java-sdkfaq534-check><a href=/en/docs3-v2/java-sdk/faq/5/34/ title="5-34 - NACOS Error" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq534><span>5-34 - NACOS went wrong</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq535-li><input type=checkbox id=m-endocs3-v2java-sdkfaq535-check>
<label for=m-endocs3-v2java-sdkfaq535-check><a href=/en/docs3-v2/java-sdk/faq/5/35/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq535><span>5-35 - Container initialization failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq536-li><input type=checkbox id=m-endocs3-v2java-sdkfaq536-check>
<label for=m-endocs3-v2java-sdkfaq536-check><a href=/en/docs3-v2/java-sdk/faq/5/36/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq536><span>5-36 - An error occurred during filter validation</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq537-li><input type=checkbox id=m-endocs3-v2java-sdkfaq537-check>
<label for=m-endocs3-v2java-sdkfaq537-check><a href=/en/docs3-v2/java-sdk/faq/5/37/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq537><span>5-37 - An error occurred in the processing of dynamic configuration monitoring</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq538-li><input type=checkbox id=m-endocs3-v2java-sdkfaq538-check>
<label for=m-endocs3-v2java-sdkfaq538-check><a href=/en/docs3-v2/java-sdk/faq/5/38/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq538><span>5-38 - Configuration parameter undefined</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq539-li><input type=checkbox id=m-endocs3-v2java-sdkfaq539-check>
<label for=m-endocs3-v2java-sdkfaq539-check><a href=/en/docs3-v2/java-sdk/faq/5/39/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq539><span>5-39 - An error occurred in the Dubbo configuration bean initializer</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq540-li><input type=checkbox id=m-endocs3-v2java-sdkfaq540-check>
<label for=m-endocs3-v2java-sdkfaq540-check><a href=/en/docs3-v2/java-sdk/faq/5/40/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq540><span>5-40 - Dubbo configuration bean not found</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq541-li><input type=checkbox id=m-endocs3-v2java-sdkfaq541-check>
<label for=m-endocs3-v2java-sdkfaq541-check><a href=/en/docs3-v2/java-sdk/faq/5/41/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq541><span>5-41 - Failed to read SSL certificate</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq542-li><input type=checkbox id=m-endocs3-v2java-sdkfaq542-check>
<label for=m-endocs3-v2java-sdkfaq542-check><a href=/en/docs3-v2/java-sdk/faq/5/42/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq542><span>5-42 - Dubbo certificate issuance failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq543-li><input type=checkbox id=m-endocs3-v2java-sdkfaq543-check>
<label for=m-endocs3-v2java-sdkfaq543-check><a href=/en/docs3-v2/java-sdk/faq/5/43/ title="5-43 - Dubbo certificate signing connection is not secure" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq543><span>5-43 - Dubbo certificate signing connection is insecure</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkfaq6-li><input type=checkbox id=m-endocs3-v2java-sdkfaq6-check>
<label for=m-endocs3-v2java-sdkfaq6-check><a href=/en/docs3-v2/java-sdk/faq/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkfaq6><span>6 - Transport</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq61-li><input type=checkbox id=m-endocs3-v2java-sdkfaq61-check>
<label for=m-endocs3-v2java-sdkfaq61-check><a href=/en/docs3-v2/java-sdk/faq/6/1/ title="6-1 - Server Connection Failed" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq61><span>6-1 - Server connection failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq62-li><input type=checkbox id=m-endocs3-v2java-sdkfaq62-check>
<label for=m-endocs3-v2java-sdkfaq62-check><a href=/en/docs3-v2/java-sdk/faq/6/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq62><span>6-2 - Client Timeout</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq63-li><input type=checkbox id=m-endocs3-v2java-sdkfaq63-check>
<label for=m-endocs3-v2java-sdkfaq63-check><a href=/en/docs3-v2/java-sdk/faq/6/3/ title="6-3 - Failed to close network connection" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq63><span>6-3 - Failed to close the network connection</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq64-li><input type=checkbox id=m-endocs3-v2java-sdkfaq64-check>
<label for=m-endocs3-v2java-sdkfaq64-check><a href=/en/docs3-v2/java-sdk/faq/6/4/ title="6-4 - Network communication layer unknown exception" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq64><span>6-4 - Unknown exception in the network communication layer</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq65-li><input type=checkbox id=m-endocs3-v2java-sdkfaq65-check>
<label for=m-endocs3-v2java-sdkfaq65-check><a href=/en/docs3-v2/java-sdk/faq/6/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq65><span>6-5 - Network disconnection failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq66-li><input type=checkbox id=m-endocs3-v2java-sdkfaq66-check>
<label for=m-endocs3-v2java-sdkfaq66-check><a href=/en/docs3-v2/java-sdk/faq/6/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq66><span>6-6 - Unsupported message</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq67-li><input type=checkbox id=m-endocs3-v2java-sdkfaq67-check>
<label for=m-endocs3-v2java-sdkfaq67-check><a href=/en/docs3-v2/java-sdk/faq/6/7/ title="6-7 - Thread Connection Exceeded Warning" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq67><span>6-7 - Server connection failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq68-li><input type=checkbox id=m-endocs3-v2java-sdkfaq68-check>
<label for=m-endocs3-v2java-sdkfaq68-check><a href=/en/docs3-v2/java-sdk/faq/6/8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq68><span>6-8 - Return data decoding failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq69-li><input type=checkbox id=m-endocs3-v2java-sdkfaq69-check>
<label for=m-endocs3-v2java-sdkfaq69-check><a href=/en/docs3-v2/java-sdk/faq/6/9/ title="6-9 - There are duplicate serial number IDs" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq69><span>6-9 - Server connection failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq610-li><input type=checkbox id=m-endocs3-v2java-sdkfaq610-check>
<label for=m-endocs3-v2java-sdkfaq610-check><a href=/en/docs3-v2/java-sdk/faq/6/10/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq610><span>6-10 - Payload Limit Exceeded Exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq611-li><input type=checkbox id=m-endocs3-v2java-sdkfaq611-check>
<label for=m-endocs3-v2java-sdkfaq611-check><a href=/en/docs3-v2/java-sdk/faq/6/11/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq611><span>6-11 - Character set not supported</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq612-li><input type=checkbox id=m-endocs3-v2java-sdkfaq612-check>
<label for=m-endocs3-v2java-sdkfaq612-check><a href=/en/docs3-v2/java-sdk/faq/6/12/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq612><span>6-12 - An error occurred when the ZK client was destroyed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq613-li><input type=checkbox id=m-endocs3-v2java-sdkfaq613-check>
<label for=m-endocs3-v2java-sdkfaq613-check><a href=/en/docs3-v2/java-sdk/faq/6/13/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq613><span>6-13 - Stream closed exception</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq614-li><input type=checkbox id=m-endocs3-v2java-sdkfaq614-check>
<label for=m-endocs3-v2java-sdkfaq614-check><a href=/en/docs3-v2/java-sdk/faq/6/14/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq614><span>6-14 - Server response failed</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq615-li><input type=checkbox id=m-endocs3-v2java-sdkfaq615-check>
<label for=m-endocs3-v2java-sdkfaq615-check><a href=/en/docs3-v2/java-sdk/faq/6/15/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq615><span>6-15 - Skip unread stream data</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq616-li><input type=checkbox id=m-endocs3-v2java-sdkfaq616-check>
<label for=m-endocs3-v2java-sdkfaq616-check><a href=/en/docs3-v2/java-sdk/faq/6/16/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq616><span>6-16 - An exception occurred during reconnection</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkfaq7-li><input type=checkbox id=m-endocs3-v2java-sdkfaq7-check>
<label for=m-endocs3-v2java-sdkfaq7-check><a href=/en/docs3-v2/java-sdk/faq/7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkfaq7><span>7 - QoS</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq71-li><input type=checkbox id=m-endocs3-v2java-sdkfaq71-check>
<label for=m-endocs3-v2java-sdkfaq71-check><a href=/en/docs3-v2/java-sdk/faq/7/1/ title="7-1 - QOS OFF" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq71><span>7-1 - QOS is off</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq72-li><input type=checkbox id=m-endocs3-v2java-sdkfaq72-check>
<label for=m-endocs3-v2java-sdkfaq72-check><a href=/en/docs3-v2/java-sdk/faq/7/2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq72><span>7-2 - QOS is on</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq73-li><input type=checkbox id=m-endocs3-v2java-sdkfaq73-check>
<label for=m-endocs3-v2java-sdkfaq73-check><a href=/en/docs3-v2/java-sdk/faq/7/3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq73><span>7-3 - Set warning percentage value for timeout</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq74-li><input type=checkbox id=m-endocs3-v2java-sdkfaq74-check>
<label for=m-endocs3-v2java-sdkfaq74-check><a href=/en/docs3-v2/java-sdk/faq/7/4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq74><span>7-4 - QOS service failed to start</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq75-li><input type=checkbox id=m-endocs3-v2java-sdkfaq75-check>
<label for=m-endocs3-v2java-sdkfaq75-check><a href=/en/docs3-v2/java-sdk/faq/7/5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq75><span>7-5 - QOS command not found</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq76-li><input type=checkbox id=m-endocs3-v2java-sdkfaq76-check>
<label for=m-endocs3-v2java-sdkfaq76-check><a href=/en/docs3-v2/java-sdk/faq/7/6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq76><span>7-6 - Unknown exception occurred in QOS</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq77-li><input type=checkbox id=m-endocs3-v2java-sdkfaq77-check>
<label for=m-endocs3-v2java-sdkfaq77-check><a href=/en/docs3-v2/java-sdk/faq/7/7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq77><span>7-7 - QOS Unprivileged Access</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2java-sdkfaq99-li><input type=checkbox id=m-endocs3-v2java-sdkfaq99-check>
<label for=m-endocs3-v2java-sdkfaq99-check><a href=/en/docs3-v2/java-sdk/faq/99/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2java-sdkfaq99><span>99 - Unknown</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq991-li><input type=checkbox id=m-endocs3-v2java-sdkfaq991-check>
<label for=m-endocs3-v2java-sdkfaq991-check><a href=/en/docs3-v2/java-sdk/faq/99/1/ title="99-1 - Program Interrupted" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq991><span>99-1 - Program interrupted</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaq990-li><input type=checkbox id=m-endocs3-v2java-sdkfaq990-check>
<label for=m-endocs3-v2java-sdkfaq990-check><a href=/en/docs3-v2/java-sdk/faq/99/0/ title="99-0 - Internal Unknown Error" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaq990><span>99-0 - Internal unknown error</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2java-sdkfaqintro-li><input type=checkbox id=m-endocs3-v2java-sdkfaqintro-check>
<label for=m-endocs3-v2java-sdkfaqintro-check><a href=/en/docs3-v2/java-sdk/faq/intro/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2java-sdkfaqintro><span>Introduction to Error Code Mechanism</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdk-li><input type=checkbox id=m-endocs3-v2golang-sdk-check>
<label for=m-endocs3-v2golang-sdk-check><a href=/en/docs3-v2/golang-sdk/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdk><span>Golang</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdkpreface-li><input type=checkbox id=m-endocs3-v2golang-sdkpreface-check>
<label for=m-endocs3-v2golang-sdkpreface-check><a href=/en/docs3-v2/golang-sdk/preface/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdkpreface><span>Preface</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkprefacewhat-li><input type=checkbox id=m-endocs3-v2golang-sdkprefacewhat-check>
<label for=m-endocs3-v2golang-sdkprefacewhat-check><a href=/en/docs3-v2/golang-sdk/preface/what/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkprefacewhat><span>What is Dubbo-go</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdkprefaceconcept-li><input type=checkbox id=m-endocs3-v2golang-sdkprefaceconcept-check>
<label for=m-endocs3-v2golang-sdkprefaceconcept-check><a href=/en/docs3-v2/golang-sdk/preface/concept/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdkprefaceconcept><span>Concept</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkprefaceconceptgeneric-li><input type=checkbox id=m-endocs3-v2golang-sdkprefaceconceptgeneric-check>
<label for=m-endocs3-v2golang-sdkprefaceconceptgeneric-check><a href=/en/docs3-v2/golang-sdk/preface/concept/generic/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkprefaceconceptgeneric><span>generalization call</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkprefaceconceptmulti_language-li><input type=checkbox id=m-endocs3-v2golang-sdkprefaceconceptmulti_language-check>
<label for=m-endocs3-v2golang-sdkprefaceconceptmulti_language-check><a href=/en/docs3-v2/golang-sdk/preface/concept/multi_language/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkprefaceconceptmulti_language><span>Multilingual RPC</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkprefaceconceptprotocol-li><input type=checkbox id=m-endocs3-v2golang-sdkprefaceconceptprotocol-check>
<label for=m-endocs3-v2golang-sdkprefaceconceptprotocol-check><a href=/en/docs3-v2/golang-sdk/preface/concept/protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkprefaceconceptprotocol><span>Network Protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkprefaceconceptregistry-li><input type=checkbox id=m-endocs3-v2golang-sdkprefaceconceptregistry-check>
<label for=m-endocs3-v2golang-sdkprefaceconceptregistry-check><a href=/en/docs3-v2/golang-sdk/preface/concept/registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkprefaceconceptregistry><span>Service Registration Discovery</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkpreface30_feature-li><input type=checkbox id=m-endocs3-v2golang-sdkpreface30_feature-check>
<label for=m-endocs3-v2golang-sdkpreface30_feature-check><a href=/en/docs3-v2/golang-sdk/preface/3.0_feature/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkpreface30_feature><span>New Features of Dubbo-go 3.0</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdkprefacedesign-li><input type=checkbox id=m-endocs3-v2golang-sdkprefacedesign-check>
<label for=m-endocs3-v2golang-sdkprefacedesign-check><a href=/en/docs3-v2/golang-sdk/preface/design/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdkprefacedesign><span>Architecture</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkprefacedesignaop_and_extension-li><input type=checkbox id=m-endocs3-v2golang-sdkprefacedesignaop_and_extension-check>
<label for=m-endocs3-v2golang-sdkprefacedesignaop_and_extension-check><a href=/en/docs3-v2/golang-sdk/preface/design/aop_and_extension/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkprefacedesignaop_and_extension><span>AOP and Extensibility Mechanisms</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkprefacedesignarchitecture-li><input type=checkbox id=m-endocs3-v2golang-sdkprefacedesignarchitecture-check>
<label for=m-endocs3-v2golang-sdkprefacedesignarchitecture-check><a href=/en/docs3-v2/golang-sdk/preface/design/architecture/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkprefacedesignarchitecture><span>Architecture</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkprefacedesignapp_and_interface-li><input type=checkbox id=m-endocs3-v2golang-sdkprefacedesignapp_and_interface-check>
<label for=m-endocs3-v2golang-sdkprefacedesignapp_and_interface-check><a href=/en/docs3-v2/golang-sdk/preface/design/app_and_interface/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkprefacedesignapp_and_interface><span>Dubbo's application and interface</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkprefacesamples-li><input type=checkbox id=m-endocs3-v2golang-sdkprefacesamples-check>
<label for=m-endocs3-v2golang-sdkprefacesamples-check><a href=/en/docs3-v2/golang-sdk/preface/samples/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkprefacesamples><span>Dubbo-go Samples</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdkquickstart-li><input type=checkbox id=m-endocs3-v2golang-sdkquickstart-check>
<label for=m-endocs3-v2golang-sdkquickstart-check><a href=/en/docs3-v2/golang-sdk/quickstart/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdkquickstart><span>Quick Start</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkquickstartinstall-li><input type=checkbox id=m-endocs3-v2golang-sdkquickstartinstall-check>
<label for=m-endocs3-v2golang-sdkquickstartinstall-check><a href=/en/docs3-v2/golang-sdk/quickstart/install/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkquickstartinstall><span>Install Dubbo-go development environment</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkquickstartquickstart_triple-li><input type=checkbox id=m-endocs3-v2golang-sdkquickstartquickstart_triple-check>
<label for=m-endocs3-v2golang-sdkquickstartquickstart_triple-check><a href=/en/docs3-v2/golang-sdk/quickstart/quickstart_triple/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkquickstartquickstart_triple><span>Complete an RPC call</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkquickstartquickstart_triple_with_customize-li><input type=checkbox id=m-endocs3-v2golang-sdkquickstartquickstart_triple_with_customize-check>
<label for=m-endocs3-v2golang-sdkquickstartquickstart_triple_with_customize-check><a href=/en/docs3-v2/golang-sdk/quickstart/quickstart_triple_with_customize/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkquickstartquickstart_triple_with_customize><span>Complete an RPC call (the version that defines the interface yourself)</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorial-li><input type=checkbox id=m-endocs3-v2golang-sdktutorial-check>
<label for=m-endocs3-v2golang-sdktutorial-check><a href=/en/docs3-v2/golang-sdk/tutorial/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorial><span>Task</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialdevelop-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelop-check>
<label for=m-endocs3-v2golang-sdktutorialdevelop-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialdevelop><span>Develop Services</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdeveloptemplate-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdeveloptemplate-check>
<label for=m-endocs3-v2golang-sdktutorialdeveloptemplate-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/template/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdeveloptemplate><span>Apply Template</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialdevelopregistry-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopregistry-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopregistry-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialdevelopregistry><span>Registry</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopregistrydesc-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopregistrydesc-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopregistrydesc-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/registry/desc/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopregistrydesc><span>Understanding the Registry</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopregistryservice-discovery-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopregistryservice-discovery-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopregistryservice-discovery-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/registry/service-discovery/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopregistryservice-discovery><span>Application-Level Service Discovery</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopregistryregistry-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopregistryregistry-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopregistryregistry-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/registry/registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopregistryregistry><span>Registry Configuration</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopregistrynacos-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopregistrynacos-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopregistrynacos-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/registry/nacos/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopregistrynacos><span>Use Nacos as a registry</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopregistrynacos-2-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopregistrynacos-2-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopregistrynacos-2-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/registry/nacos-2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopregistrynacos-2><span>使用 Nacos 作为注册中心</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopregistryzookeeper-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopregistryzookeeper-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopregistryzookeeper-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/registry/zookeeper/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopregistryzookeeper><span>Using Zookeeper as a Registry</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopregistrypolaris-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopregistrypolaris-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopregistrypolaris-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/registry/polaris/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopregistrypolaris><span>Using Polaris as a Registry</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopregistrymulti_registry-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopregistrymulti_registry-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopregistrymulti_registry-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/registry/multi_registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopregistrymulti_registry><span>Multiple Registries</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialdevelopprotocol-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopprotocol-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopprotocol-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialdevelopprotocol><span>Protocol Configuration</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopprotocolexception_response-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopprotocolexception_response-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopprotocolexception_response-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/protocol/exception_response/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopprotocolexception_response><span>Triple exception return</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopprotocolerror-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopprotocolerror-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopprotocolerror-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/protocol/error/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopprotocolerror><span>exception information return</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopprotocolchoose_protocol-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopprotocolchoose_protocol-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopprotocolchoose_protocol-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/protocol/choose_protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopprotocolchoose_protocol><span>Select the network protocol to use</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialdevelopinterflow-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopinterflow-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopinterflow-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/interflow/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialdevelopinterflow><span>Heterogeneous System Interoperability</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopinterflowcall_java-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopinterflowcall_java-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopinterflowcall_java-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/interflow/call_java/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopinterflowcall_java><span>Cross-language interoperability with Java applications</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopinterflowcall_grpc-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopinterflowcall_grpc-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopinterflowcall_grpc-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/interflow/call_grpc/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopinterflowcall_grpc><span>Interoperate with gRPC applications</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialdevelopconfig-center-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopconfig-center-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopconfig-center-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/config-center/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialdevelopconfig-center><span>Configuration Center</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopconfig-centerdesc-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopconfig-centerdesc-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopconfig-centerdesc-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/config-center/desc/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopconfig-centerdesc><span>Introduction to Configuration Center</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopconfig-centerconfig-center-dynamic-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopconfig-centerconfig-center-dynamic-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopconfig-centerconfig-center-dynamic-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/config-center/config-center-dynamic/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopconfig-centerconfig-center-dynamic><span>Dubbogo 3.0 configuration center and configuration monitoring</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopconfig-centerremote_config-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopconfig-centerremote_config-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopconfig-centerremote_config-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/config-center/remote_config/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopconfig-centerremote_config><span>Remote loading configuration start</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialdevelopfeatures-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopfeatures-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopfeatures-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/features/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialdevelopfeatures><span>Advanced Features</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopfeaturesconfig_api-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopfeaturesconfig_api-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopfeaturesconfig_api-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/features/config_api/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopfeaturesconfig_api><span>Launching the Application Using the Configuration API</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopfeaturescustom-logger-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopfeaturescustom-logger-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopfeaturescustom-logger-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/features/custom-logger/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopfeaturescustom-logger><span>log</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopfeaturescontext-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopfeaturescontext-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopfeaturescontext-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/features/context/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopfeaturescontext><span>Use ctx to pass context information</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopfeaturesgeneric-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopfeaturesgeneric-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopfeaturesgeneric-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/features/generic/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopfeaturesgeneric><span>generalization call</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdevelopfeaturesgeneric-2-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdevelopfeaturesgeneric-2-check>
<label for=m-endocs3-v2golang-sdktutorialdevelopfeaturesgeneric-2-check><a href=/en/docs3-v2/golang-sdk/tutorial/develop/features/generic-2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdevelopfeaturesgeneric-2><span>generalization call</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialdebugging-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdebugging-check>
<label for=m-endocs3-v2golang-sdktutorialdebugging-check><a href=/en/docs3-v2/golang-sdk/tutorial/debugging/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialdebugging><span>Service Debugging</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdebugginggrpc_cli-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdebugginggrpc_cli-check>
<label for=m-endocs3-v2golang-sdktutorialdebugginggrpc_cli-check><a href=/en/docs3-v2/golang-sdk/tutorial/debugging/grpc_cli/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialdebugginggrpc_cli><span>Use grpc_cli to debug Dubbo-go service</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialdeployment-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdeployment-check>
<label for=m-endocs3-v2golang-sdktutorialdeployment-check><a href=/en/docs3-v2/golang-sdk/tutorial/deployment/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialdeployment><span>Deployment Service</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdeploymentpractice-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdeploymentpractice-check>
<label for=m-endocs3-v2golang-sdktutorialdeploymentpractice-check><a href=/en/docs3-v2/golang-sdk/tutorial/deployment/practice/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialdeploymentpractice><span>Introduction to Best Practices for Production Deployment</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdeploymentdocker-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdeploymentdocker-check>
<label for=m-endocs3-v2golang-sdktutorialdeploymentdocker-check><a href=/en/docs3-v2/golang-sdk/tutorial/deployment/docker/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialdeploymentdocker><span>Docker image packaging tutorial</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialdeploymentkubernetes-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialdeploymentkubernetes-check>
<label for=m-endocs3-v2golang-sdktutorialdeploymentkubernetes-check><a href=/en/docs3-v2/golang-sdk/tutorial/deployment/kubernetes/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialdeploymentkubernetes><span>Kubernetes Deployment Tutorial</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialgovernance-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernance-check>
<label for=m-endocs3-v2golang-sdktutorialgovernance-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernance><span>Service Governance</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialgovernancemonitor-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancemonitor-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancemonitor-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/monitor/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancemonitor><span>Service Status Monitoring</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancemonitorhttp-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancemonitorhttp-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancemonitorhttp-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/monitor/http/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancemonitorhttp><span>Indicator observation based on http metrics</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancemonitorrpc_metrics-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancemonitorrpc_metrics-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancemonitorrpc_metrics-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/monitor/rpc_metrics/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernancemonitorrpc_metrics><span>View monitoring information of RPC calls</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancemonitorpromethus-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancemonitorpromethus-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancemonitorpromethus-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/monitor/promethus/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancemonitorpromethus><span>Data Reporting Promethus Tutorial</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancemonitorgrafana-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancemonitorgrafana-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancemonitorgrafana-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/monitor/grafana/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancemonitorgrafana><span>Grafana-based Visual Monitoring Tutorial</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancemonitorlogger-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancemonitorlogger-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancemonitorlogger-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/monitor/logger/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancemonitorlogger><span>Dubbo Go Log Management</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancemonitormetrics-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancemonitormetrics-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancemonitormetrics-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/monitor/metrics/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernancemonitormetrics><span>Metrics data reporting</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialgovernancetracing-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancetracing-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancetracing-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/tracing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancetracing><span>Full Link Tracking</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancetracingjaeger-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancetracingjaeger-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancetracingjaeger-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/tracing/jaeger/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancetracingjaeger><span>Link Tracking Based on Jaeger</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancetracingopentelmentry-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancetracingopentelmentry-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancetracingopentelmentry-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/tracing/opentelmentry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancetracingopentelmentry><span>Using the OpenTelmentry Protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancetracingskywalking-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancetracingskywalking-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancetracingskywalking-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/tracing/skywalking/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancetracingskywalking><span>Skywalking-based Tracking</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialgovernancehealth-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancehealth-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancehealth-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/health/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancehealth><span>Health Check</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancehealthtriple-health-check-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancehealthtriple-health-check-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancehealthtriple-health-check-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/health/triple-health-check/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernancehealthtriple-health-check><span>Grpc-based health check</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancehealthstart-check-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancehealthstart-check-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancehealthstart-check-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/health/start-check/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernancehealthstart-check><span>dubbogo 3.0 check at startup</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancehealthkubernetes-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancehealthkubernetes-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancehealthkubernetes-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/health/kubernetes/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernancehealthkubernetes><span>Kubernetes Probe</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialgovernancetraffic-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancetraffic-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancetraffic-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/traffic/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancetraffic><span>Traffic Management</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancetrafficmesh_router-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancetrafficmesh_router-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancetrafficmesh_router-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/traffic/mesh_router/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernancetrafficmesh_router><span>routing rules</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancetrafficgraceful_shutdown-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancetrafficgraceful_shutdown-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancetrafficgraceful_shutdown-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/traffic/graceful_shutdown/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernancetrafficgraceful_shutdown><span>Elegant online and offline</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialgovernancelimit-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancelimit-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancelimit-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/limit/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancelimit><span>Rate Limit</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancelimitinternally-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancelimitinternally-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancelimitinternally-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/limit/internally/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancelimitinternally><span>Dubbo Go's built-in current limit usage tutorial</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancelimitsentinel-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancelimitsentinel-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancelimitsentinel-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/limit/sentinel/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancelimitsentinel><span>Current Limiting Tutorial Based on Sentinel</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancelimitpolaris-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancelimitpolaris-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancelimitpolaris-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/limit/polaris/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancelimitpolaris><span>Polaris-Based Current Limiting Tutorial</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancelimittps_limiter-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancelimittps_limiter-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancelimittps_limiter-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/limit/tps_limiter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernancelimittps_limiter><span>Set current limit for the server</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancelimitadaptive-service-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancelimitadaptive-service-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancelimitadaptive-service-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/limit/adaptive-service/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernancelimitadaptive-service><span>dubbogo 3.0 flexible service</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialgovernanceservice-mesh-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernanceservice-mesh-check>
<label for=m-endocs3-v2golang-sdktutorialgovernanceservice-mesh-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/service-mesh/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernanceservice-mesh><span>Service Mesh</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshistio-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshistio-check>
<label for=m-endocs3-v2golang-sdktutorialgovernanceservice-meshistio-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/service-mesh/istio/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshistio><span>Deploy the Istio environment</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshdeploy-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshdeploy-check>
<label for=m-endocs3-v2golang-sdktutorialgovernanceservice-meshdeploy-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/service-mesh/deploy/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshdeploy><span>Deploy Dubbo-go application in Istio environment</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshtraffic_management-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshtraffic_management-check>
<label for=m-endocs3-v2golang-sdktutorialgovernanceservice-meshtraffic_management-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/service-mesh/traffic_management/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshtraffic_management><span>traffic management</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshpixiu-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshpixiu-check>
<label for=m-endocs3-v2golang-sdktutorialgovernanceservice-meshpixiu-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/service-mesh/pixiu/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshpixiu><span>Use Pixiu gateway to access Ingress traffic</span></a></label><ul class="ul-6 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshpixiuhttp_triple-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshpixiuhttp_triple-check>
<label for=m-endocs3-v2golang-sdktutorialgovernanceservice-meshpixiuhttp_triple-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/service-mesh/pixiu/http_triple/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshpixiuhttp_triple><span>Access Ingress Traffic</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshpixiupixiu-nacos-triple-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshpixiupixiu-nacos-triple-check>
<label for=m-endocs3-v2golang-sdktutorialgovernanceservice-meshpixiupixiu-nacos-triple-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/service-mesh/pixiu/pixiu-nacos-triple/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshpixiupixiu-nacos-triple><span>Use Pixiu to expose Dubbo-go service</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshproxyless_service_mesh-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshproxyless_service_mesh-check>
<label for=m-endocs3-v2golang-sdktutorialgovernanceservice-meshproxyless_service_mesh-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/service-mesh/proxyless_service_mesh/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernanceservice-meshproxyless_service_mesh><span>Proxyless Service Mesh</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdktutorialgovernancefeatures-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancefeatures-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancefeatures-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/features/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdktutorialgovernancefeatures><span>Advanced Features</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancefeaturesaop-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancefeaturesaop-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancefeaturesaop-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/features/aop/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernancefeaturesaop><span>Custom service call middleware</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancefeaturestimeout-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancefeaturestimeout-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancefeaturestimeout-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/features/timeout/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernancefeaturestimeout><span>timeout for configuration calls</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdktutorialgovernancefeaturescustom-filter-li><input type=checkbox id=m-endocs3-v2golang-sdktutorialgovernancefeaturescustom-filter-check>
<label for=m-endocs3-v2golang-sdktutorialgovernancefeaturescustom-filter-check><a href=/en/docs3-v2/golang-sdk/tutorial/governance/features/custom-filter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdktutorialgovernancefeaturescustom-filter><span>Custom Filter component</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-endocs3-v2golang-sdksourcecode-li><input type=checkbox id=m-endocs3-v2golang-sdksourcecode-check>
<label for=m-endocs3-v2golang-sdksourcecode-check><a href=/en/docs3-v2/golang-sdk/sourcecode/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdksourcecode><span>Source Code Interpretation</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdksourcecodeprotocol-li><input type=checkbox id=m-endocs3-v2golang-sdksourcecodeprotocol-check>
<label for=m-endocs3-v2golang-sdksourcecodeprotocol-check><a href=/en/docs3-v2/golang-sdk/sourcecode/protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdksourcecodeprotocol><span>Network Protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdksourcecoderegistry-li><input type=checkbox id=m-endocs3-v2golang-sdksourcecoderegistry-check>
<label for=m-endocs3-v2golang-sdksourcecoderegistry-check><a href=/en/docs3-v2/golang-sdk/sourcecode/registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdksourcecoderegistry><span>注册中心</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2golang-sdkrefer-li><input type=checkbox id=m-endocs3-v2golang-sdkrefer-check>
<label for=m-endocs3-v2golang-sdkrefer-check><a href=/en/docs3-v2/golang-sdk/refer/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2golang-sdkrefer><span>Reference</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkreferconfig-li><input type=checkbox id=m-endocs3-v2golang-sdkreferconfig-check>
<label for=m-endocs3-v2golang-sdkreferconfig-check><a href=/en/docs3-v2/golang-sdk/refer/config/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkreferconfig><span>configuration item reference</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkreferuse_dubbogo_cli-li><input type=checkbox id=m-endocs3-v2golang-sdkreferuse_dubbogo_cli-check>
<label for=m-endocs3-v2golang-sdkreferuse_dubbogo_cli-check><a href=/en/docs3-v2/golang-sdk/refer/use_dubbogo_cli/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkreferuse_dubbogo_cli><span>Use dubbogo-cli tool</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkreferecology-li><input type=checkbox id=m-endocs3-v2golang-sdkreferecology-check>
<label for=m-endocs3-v2golang-sdkreferecology-check><a href=/en/docs3-v2/golang-sdk/refer/ecology/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkreferecology><span>Dubbogo Ecological Components</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkrefercompatible_version-li><input type=checkbox id=m-endocs3-v2golang-sdkrefercompatible_version-check>
<label for=m-endocs3-v2golang-sdkrefercompatible_version-check><a href=/en/docs3-v2/golang-sdk/refer/compatible_version/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkrefercompatible_version><span>Depends on the adaptation version number</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2golang-sdkreferbasic_concept-li><input type=checkbox id=m-endocs3-v2golang-sdkreferbasic_concept-check>
<label for=m-endocs3-v2golang-sdkreferbasic_concept-check><a href=/en/docs3-v2/golang-sdk/refer/basic_concept/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2golang-sdkreferbasic_concept><span>Basic concepts of configuration</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocs3-v2rust-sdk-li><input type=checkbox id=m-endocs3-v2rust-sdk-check>
<label for=m-endocs3-v2rust-sdk-check><a href=/en/docs3-v2/rust-sdk/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2rust-sdk><span>Rust</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2rust-sdkquick-start-li><input type=checkbox id=m-endocs3-v2rust-sdkquick-start-check>
<label for=m-endocs3-v2rust-sdkquick-start-check><a href=/en/docs3-v2/rust-sdk/quick-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2rust-sdkquick-start><span>Quick start</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2rust-sdkjava-interoperability-li><input type=checkbox id=m-endocs3-v2rust-sdkjava-interoperability-check>
<label for=m-endocs3-v2rust-sdkjava-interoperability-check><a href=/en/docs3-v2/rust-sdk/java-interoperability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2rust-sdkjava-interoperability><span>Rust and Java interoperability</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2rust-sdkprotocol-li><input type=checkbox id=m-endocs3-v2rust-sdkprotocol-check>
<label for=m-endocs3-v2rust-sdkprotocol-check><a href=/en/docs3-v2/rust-sdk/protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocs3-v2rust-sdkprotocol><span>Network Protocol</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocs3-v2erlang-sdk-li><input type=checkbox id=m-endocs3-v2erlang-sdk-check>
<label for=m-endocs3-v2erlang-sdk-check><a href=/en/docs3-v2/erlang-sdk/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocs3-v2erlang-sdk><span>Erlang</span></a></label></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=https://cn.dubbo.apache.org/en/docs3-v2/>SDK Manual</a></li><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/en/docs3-v2/java-sdk/>Java</a></li><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/>Reference Manual</a></li><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/spi/>SPI Extension Manual</a></li><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/spi/description/>Dubbo SPI extension implementation description</a></li><li class="breadcrumb-item active" aria-current=page><a href=https://cn.dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/spi/description/dubbo-spi/ aria-disabled=true class="btn-link disabled">Extension Point Development Guide</a></li></ol></nav><div class=td-content><h1>Extension Point Development Guide</h1><div class=lead>This article introduces the principle and implementation details of Dubbo SPI</div><header class=article-meta></header><h2 id=1-introduction>1 Introduction</h2><p>The full name of SPI is Service Provider Interface, which is a service discovery mechanism. The essence of SPI is to configure the fully qualified name of the interface implementation class in the file, and the service loader reads the configuration file and loads the implementation class. In this way, the implementation class can be dynamically replaced for the interface at runtime. Because of this feature, we can easily provide extended functions for our programs through the SPI mechanism. The SPI mechanism is also used in third-party frameworks. For example, Dubbo loads all components through the SPI mechanism. However, Dubbo does not use Java&rsquo;s native SPI mechanism, but enhances it to better meet the needs. In Dubbo, SPI is a very important module. Based on SPI, we can easily expand Dubbo.
In Dubbo, SPI has two main usages, one is to load fixed extension classes, and the other is to load adaptive extension classes. These two methods will be described in detail below.
Special attention should be paid to: In Dubbo, classes loaded based on SPI extensions are singletons.</p><h3 id=11-load-fixed-extension-classes>1.1 Load fixed extension classes</h3><p>If you were asked to design and load fixed extension classes, what would you do?
A common idea is to read the configuration file in a specific directory, then parse out the full class name, instantiate the class through the reflection mechanism, and then store the class in the collection. If necessary, directly from the collection Take. The implementation in Dubbo is also such an idea.
However, in Dubbo, the implementation is more complete, and it implements the functions of IOC and AOP. IOC means that if this extended class depends on other properties, Dubbo will automatically inject this property. How is this function implemented? A common idea is to get the setter of this extended class
method, call the setter method for property injection. What does AOP refer to? This means that Dubbo can inject its wrapper class into the extension class. For example, DubboProtocol is an extension class of Protocol, and ProtocolListenerWrapper is a wrapper class of DubboProtocol.</p><h3 id=12-load-adaptive-extension-class>1.2 Load adaptive extension class</h3><p>First explain the usage scenarios of adaptive extension classes. For example, we have a requirement that when calling a certain method, we can call different implementation classes based on parameter selection. Somewhat similar to the factory method, different instance objects are constructed based on different parameters.
The idea of implementation in Dubbo is similar to this, but the implementation of Dubbo is more flexible, and its implementation is somewhat similar to the strategy mode. Each extension class is equivalent to a strategy. Based on the URL message bus, the parameters are passed to the ExtensionLoader, and the corresponding extension class is loaded based on the parameters through the ExtensionLoader to realize the dynamic call to the target instance at runtime.</p><h2 id=2-dubbo-spi-source-code-analysis>2. Dubbo SPI source code analysis</h2><h3 id=21-load-fixed-extension-class>2.1 Load fixed extension class</h3><p>In Dubbo, the entry point for SPI to load fixed extension classes is the getExtension method of ExtensionLoader. Next, we will analyze the process of obtaining extension class objects in detail.</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. <span style=color:#268bd2>length</span>() <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>// Get the default extension implementation class</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, as the name suggests, is used to hold the target object</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. <span style=color:#268bd2>get</span>(name);
</span></span><span style=display:flex><span> <span style=color:#586e75>// This logic ensures that only one thread can create a Holder object</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. <span style=color:#268bd2>putIfAbsent</span>(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. <span style=color:#268bd2>get</span>(name);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> Object instance <span style=color:#719e07>=</span> holder. <span style=color:#268bd2>get</span>();
</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:#268bd2>synchronized</span> (holder) {
</span></span><span style=display:flex><span> instance <span style=color:#719e07>=</span> holder. <span style=color:#268bd2>get</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:#586e75>// create extension instance</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>// set the instance to the 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>The logic of the above code is relatively simple. First, the cache is checked, and if the cache misses, an extended object is created. Let&rsquo;s take a look at the process of creating an extended object.</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>// Load all extension classes from the configuration file to get the mapping relationship table from &#34;configuration item name&#34; to &#34;configuration class&#34;</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>// If there is no extension of the interface, or the implementation class of the interface does not allow repetition but actually repeats, an exception is thrown directly</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. <span style=color:#268bd2>contains</span>(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. <span style=color:#268bd2>get</span>(clazz);
</span></span><span style=display:flex><span> <span style=color:#586e75>// This code ensures that the extended class will only be constructed once, which is a singleton.</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. <span style=color:#268bd2>get</span>(clazz);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#586e75>// Inject dependencies into the instance</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>// Automatically wrap if wrapping is enabled.</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// For example, I defined the extension of DubboProtocol based on Protocol, but in fact, DubboProtocol is not directly used in Dubbo, but its wrapper class</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. <span style=color:#268bd2>reverse</span>(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>// Loop to create Wrapper instances</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (CollectionUtils. <span style=color:#268bd2>isNotEmpty</span>(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. <span style=color:#268bd2>getAnnotation</span>(Wrapper. <span style=color:#268bd2>class</span>);
</span></span><span style=display:flex><span> <span style=color:#268bd2>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>// Pass the current instance as a parameter to the constructor of Wrapper, and create a Wrapper instance through reflection.</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// Then inject dependencies into the Wrapper instance, and finally assign the Wrapper instance to the instance variable again</span>
</span></span><span style=display:flex><span> instance <span style=color:#719e07>=</span> injectExtension((T) wrapperClass. <span style=color:#268bd2>getConstructor</span>(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>// initialization</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. <span style=color:#268bd2>getMessage</span>(), t);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>The logic of the createExtension method is a little more complicated, including the following steps:</p><ol><li>Get all extension classes through getExtensionClasses</li><li>Create an extended object through reflection</li><li>Inject dependencies into extended objects</li><li>Wrap the extension object in the corresponding Wrapper object</li><li>Initialize the extension object</li></ol><p>Among the above steps, the first step is the key to loading the extension class, and the third and fourth steps are the specific implementation of Dubbo IOC and AOP. In the following chapters, we will focus on analyzing the logic of the getExtensionClasses method and briefly introduce the specific implementation of Dubbo IOC.</p><h3 id=211-get-all-extension-classes>2.1.1 Get all extension classes</h3><p>Before we obtain the extension class by name, we first need to parse out the mapping relationship table from the extension item name to the extension class (Map&lt;name, extension class>) according to the configuration file, and then extract it from the mapping relationship table according to the extension item name The corresponding extension class can be. The code analysis of the relevant process is as follows:</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>// Get the loaded extension class from the cache</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. <span style=color:#268bd2>get</span>();
</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> (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. <span style=color:#268bd2>get</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:#586e75>// load extension class</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>Here is also to check the cache first, and if the cache misses, lock it through synchronized. After locking, check the cache again and find it empty. At this time, if classes is still null, the extension class is loaded through loadExtensionClasses. Let&rsquo;s analyze the logic of the loadExtensionClasses method.</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>// Cache the default SPI extension</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>// Load the files in the specified folder based on the policy</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// Currently there are four strategies to read the configuration files in META-INF/services/ META-INF/dubbo/ META-INF/dubbo/internal/ META-INF/dubbo/external/ respectively</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>The loadExtensionClasses method does two things in total, one is to parse the SPI annotations, and the other is to call the loadDirectory method to load the specified folder configuration file. The process of parsing SPI annotations is relatively simple, so there is no need to say more. Let&rsquo;s take a look at what loadDirectory does.</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 = folder path + type fully qualified name</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. <span style=color:#268bd2>class</span>. <span style=color:#268bd2>getClassLoader</span>();
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (ClassLoader. <span style=color:#268bd2>getSystemClassLoader</span>() <span style=color:#719e07>!=</span> extensionLoaderClassLoader) {
</span></span><span style=display:flex><span> urls <span style=color:#719e07>=</span> extensionLoaderClassLoader. <span style=color:#268bd2>getResources</span>(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>// Load all files with the same name according to the file name</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. <span style=color:#268bd2>getResources</span>(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. <span style=color:#268bd2>getSystemResources</span>(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. <span style=color:#268bd2>hasMoreElements</span>()) {
</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>// load resources</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>The loadDirectory method first obtains all resource links through classLoader, and then loads resources through the loadResource method. Let&rsquo;s go ahead and take a look at the implementation of the loadResource method.</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. <span style=color:#268bd2>openStream</span>(), 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>// Read configuration content line by line</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>while</span> ((line <span style=color:#719e07>=</span> reader. <span style=color:#268bd2>readLine</span>()) <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// locate # characters</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. <span style=color:#268bd2>indexOf</span>(<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>// Intercept the string before #, the content after # is a comment, which needs to be ignored</span>
</span></span><span style=display:flex><span> line <span style=color:#719e07>=</span> line. <span style=color:#268bd2>substring</span>(0, ci);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> line <span style=color:#719e07>=</span> line. <span style=color:#268bd2>trim</span>();
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (line. <span style=color:#268bd2>length</span>() <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>// Use the equal sign = as the boundary to intercept the key and value</span>
</span></span><span style=display:flex><span> <span style=color:#dc322f>int</span> i <span style=color:#719e07>=</span> line. <span style=color:#268bd2>indexOf</span>(<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>// Load the class and cache the class through the loadClass method</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. <span style=color:#268bd2>forName</span>(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. <span style=color:#268bd2>put</span>(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>The loadResource method is used to read and parse configuration files, load classes through reflection, and finally call the loadClass method for other operations. The loadClass method is mainly used to operate the cache. The logic of this method is as follows:</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. <span style=color:#268bd2>getName</span>() <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>// Check if there are Adaptive annotations on the target class</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (clazz. <span style=color:#268bd2>isAnnotationPresent</span>(Adaptive. <span style=color:#268bd2>class</span>)) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>cacheAdaptiveClass</span>(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>// cache wrapper class</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>// Enter here, indicating that this class is just an ordinary extension class</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// Check if clazz has a default constructor, if not, throw an exception</span>
</span></span><span style=display:flex><span> clazz. <span style=color:#268bd2>getConstructor</span>();
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (StringUtils. <span style=color:#268bd2>isEmpty</span>(name)) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// If name is empty, try to get name from Extension annotation, or use lowercase class name as 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. <span style=color:#268bd2>length</span>() <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. <span style=color:#268bd2>getName</span>() <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. <span style=color:#268bd2>split</span>(name);
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (ArrayUtils. <span style=color:#268bd2>isNotEmpty</span>(names)) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// If the class has the Activate annotation, use the first element of the names array as the key,</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// Store the mapping relationship between name and Activate annotation object</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>// Store the mapping relationship from Class to name</span>
</span></span><span style=display:flex><span> cacheName(clazz, n);
</span></span><span style=display:flex><span> <span style=color:#586e75>// Store the mapping relationship from name to Class.</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// If there are multiple implementation classes corresponding to the same extension, whether overriding is allowed based on the override parameter, if not, an exception is thrown.</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>As above, the loadClass method operates different caches, such as cachedAdaptiveClass, cachedWrapperClasses and cachedNames, etc. Apart from that, there is no other logic in this method.</p><p>At this point, the analysis of the process of caching class loading is over. There is nothing particularly complicated in the whole process. You can analyze it step by step, and you can debug it if you don’t understand it. Next, let&rsquo;s talk about Dubbo IOC.</p><h3 id=212-dubbo-ioc>2.1.2 Dubbo IOC</h3><p>Dubbo IOC injects dependencies through the setter method. Dubbo first obtains all methods of the instance through reflection, and then traverses the method list to detect whether the method name has the characteristics of a setter method. If so, obtain the dependent object through ObjectFactory, and finally call the setter method through reflection to set the dependency to the target object. The code corresponding to the whole process is as follows:</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>// traverse all methods of the target class</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>for</span> (Method method : instance. <span style=color:#268bd2>getClass</span>(). getMethods()) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// Check whether the method starts with set, and the method has only one parameter, and the method access level is 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> * Detect whether there is DisableInject annotation modification.
</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. <span style=color:#268bd2>getAnnotation</span>(DisableInject. <span style=color:#268bd2>class</span>) != <span style=color:#268bd2>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> * Detect whether the ScopeModelAware and ExtensionAccessorAware classes are implemented, and if implemented, do not inject
</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. <span style=color:#268bd2>getDeclaringClass</span>() <span style=color:#719e07>==</span> ScopeModelAware. <span style=color:#268bd2>class</span>) {
</span></span><span style=display:flex><span> <span style=color:#268bd2>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. <span style=color:#268bd2>contains</span>(ReflectUtils. <span style=color:#268bd2>getDesc</span>(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>// Primitive types are not injected</span>
</span></span><span style=display:flex><span> Class<span style=color:#719e07>&lt;?&gt;</span> pt <span style=color:#719e07>=</span> method. <span style=color:#268bd2>getParameterTypes</span>()<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. <span style=color:#268bd2>isPrimitives</span>(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>// Get the attribute name, for example, the setName method corresponds to the attribute name 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>// Get dependent objects from ObjectFactory</span>
</span></span><span style=display:flex><span> Object object <span style=color:#719e07>=</span> objectFactory. <span style=color:#268bd2>getExtension</span>(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>// inject</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. <span style=color:#268bd2>getName</span>() <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;: &#34;</span> <span style=color:#719e07>+</span> e. <span style=color:#268bd2>getMessage</span>(), 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. <span style=color:#268bd2>error</span>(e. <span style=color:#268bd2>getMessage</span>(), 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>In the above code, the type of the objectFactory variable is AdaptiveExtensionFactory, and AdaptiveExtensionFactory internally maintains an ExtensionFactory list for storing other types of ExtensionFactory. Dubbo currently provides two types of ExtensionFactory, namely SpiExtensionFactory and SpringExtensionFactory. The former is used to create adaptive extensions, and the latter is used to obtain the required extensions from Spring&rsquo;s IOC container. The codes of these two classes are not very complicated, so I won&rsquo;t analyze them one by one here.</p><p>Dubbo IOC currently only supports setter injection. Generally speaking, the logic is relatively simple and easy to understand.</p><h3 id=22-load-adaptive-extension-class>2.2 Load adaptive extension class</h3><p>The meaning of adaptive extension class is that, based on parameters, a specific target class is dynamically selected at runtime and then executed.
In Dubbo, many extensions are loaded through the SPI mechanism, such as Protocol, Cluster, LoadBalance, etc. Sometimes, some extensions do not want to be loaded during the framework startup phase, but want to be loaded according to runtime parameters when the extension method is called. This sounds contradictory. If the extension is not loaded, the extension methods cannot be called (except static methods). If the extension method is not called, the extension cannot be loaded. For this contradictory problem, Dubbo has solved it well through the adaptive expansion mechanism. The implementation logic of the self-adaptive expansion mechanism is relatively complicated. First, Dubbo will generate code with proxy functions for the expansion interface. Then compile this code through javassist or jdk to get the Class class. Finally, the proxy class is created through reflection, and the whole process is more complicated.</p><p>The entry point for loading adaptive extension classes is the getAdaptiveExtension method of ExtensionLoader.</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>// Get the adaptive extension from the cache</span>
</span></span><span style=display:flex><span> Object instance <span style=color:#719e07>=</span> cachedAdaptiveInstance. <span style=color:#268bd2>get</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:#586e75>// If there is an exception, throw it directly</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. <span style=color:#268bd2>get</span>();
</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>// create adaptive extension</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// There are two cases here: one is that there is an Adaptive class, and the other is that an Adaptive class needs to be generated</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>The getAdaptiveExtension method will first check the cache, and if the cache misses, call the createAdaptiveExtension method to create an adaptive extension. Next, let&rsquo;s look at the code of the createAdaptiveExtension method.</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>// Get the adaptive extension class and instantiate it through reflection</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>The code of the createAdaptiveExtension method is relatively small, but it contains three logics, which are as follows:</p><ol><li>Call the getAdaptiveExtensionClass method to obtain the adaptive extension Class object</li><li>Instantiation via reflection</li><li>Call the injectExtension method to inject dependencies into the extension instance</li></ol><p>The first two logics are easy to understand, and the third logic is used to inject dependencies into adaptive extension objects. This logic may seem redundant, but it is necessary to exist. Here is a brief explanation. As mentioned earlier, there are two types of adaptive extensions in Dubbo, one is manually coded and the other is automatically generated. There may be some dependencies in the hand-coded Adaptive extension, while the automatically generated Adaptive extension will not depend on other classes. The purpose of calling the injectExtension method here is to inject dependencies for the hand-coded adaptive extension, which requires everyone to pay attention. Regarding the injectExtension method, it has been analyzed in the previous article, so I won’t go into details here. Next, analyze the logic of the getAdaptiveExtensionClass method.</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>// Get all extension classes through SPI</span>
</span></span><span style=display:flex><span> getExtensionClasses();
</span></span><span style=display:flex><span> <span style=color:#586e75>// Check the cache, if the cache is not empty, return the cache directly</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>// Create an adaptive extension class</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>The getAdaptiveExtensionClass method also contains three logics, as follows:</p><ol><li>Call getExtensionClasses to get all extension classes</li><li>Check the cache, if the cache is not empty, return the cache</li><li>If the cache is empty, call createAdaptiveExtensionClass to create an adaptive extension class</li></ol><p>These three logics seem unremarkable, and there seems to be no need to talk about them. But there are some details hidden in this bland code that need to be explained. First, let’s start with the first logic. The getExtensionClasses method is used to get all the implementation classes of an interface. For example, this method can obtain DubboProtocol, HttpProtocol, InjvmProtocol and other implementation classes of the Protocol interface. In the process of obtaining the implementation class, if an implementation class is modified by the Adaptive annotation, then the class will be assigned to the cachedAdaptiveClass variable. At this point, the condition of the second step in the above steps is satisfied (the cache is not empty), just return the cachedAdaptiveClass directly. If all implementation classes are not modified by Adaptive annotations, then execute the logic of the third step to create adaptive extension classes. The relevant code is as follows:</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>// Build adaptive extension code</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>// Get the compiler implementation class</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>// Compile the code and generate 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>The createAdaptiveExtensionClass method is used to generate an adaptive extension class. This method first generates the source code of the adaptive extension class, and then compiles the source code through a Compiler instance (Dubbo uses javassist as the compiler by default) to obtain a proxy class Class instance. Next, we will focus on the logic of proxy class code generation, and analyze other logic by yourself.</p><h3 id=221-adaptive-extension-class-code-generation>2.2.1 Adaptive extension class code generation</h3><p>AdaptiveClassCodeGenerator#generate method generates extension class 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>public</span> String <span style=color:#268bd2>generate</span>() {
</span></span><span style=display:flex><span> <span style=color:#586e75>// If there is no method in the interface modified by the @Adaptive annotation, an exception is thrown directly</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>// Generate package name, import, method, etc.</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. <span style=color:#268bd2>getMethods</span>();
</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. <span style=color:#268bd2>isDebugEnabled</span>()) {
</span></span><span style=display:flex><span> logger. <span style=color:#268bd2>debug</span>(code. <span style=color:#268bd2>toString</span>());
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> code. <span style=color:#268bd2>toString</span>();
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h4 id=222-generation-method>2.2.2 Generation method</h4><p>In the above code, the logic of the generation method is the most critical, let&rsquo;s analyze it in detail.</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. <span style=color:#268bd2>getReturnType</span>(). getCanonicalName();
</span></span><span style=display:flex><span> String methodName <span style=color:#719e07>=</span> method. <span style=color:#268bd2>getName</span>();
</span></span><span style=display:flex><span> <span style=color:#586e75>// generate method content</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. <span style=color:#268bd2>format</span>(CODE_METHOD_DECLARATION, methodReturnType, methodName, methodArgs, methodThrows, methodContent);
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>generateMethodContent Analysis</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>// This method must be decorated with @Adaptive annotation</span>
</span></span><span style=display:flex><span> Adaptive adaptiveAnnotation <span style=color:#719e07>=</span> method. <span style=color:#268bd2>getAnnotation</span>(Adaptive. <span style=color:#268bd2>class</span>);
</span></span><span style=display:flex><span> <span style=color:#268bd2>StringBuilder</span> 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>// Without @Adaptive annotation modification, exception information is generated</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>// Get the index of the URL on the parameter list</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>// Generate a null check for the URL if it exists on the parameter list</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>// If there is no parameter of URL type in the parameter list, then it depends on whether the parameter object on the parameter list contains the getUrl method</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// If there is, generate a URL null check</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>// parse the value attribute on the Adaptive annotation</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>// If there is a parameter of type Invocation on the parameter list, generate a null check and get the 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>// This logic is mainly to generate extName (that is, the extension)</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// Divided into multiple situations:</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 1. Does defaultExtName exist?</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 2. Whether there is an invocation type parameter in the parameter</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// 3. Whether to generate a proxy for the protocol</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>// Why should the protocol be considered separately? Because there is a method to get the protocol value in the URL</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>// generate get extension (using ExtensionLoader.getExtension method)</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>// generate return statement</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. <span style=color:#268bd2>toString</span>();
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>The above logic mainly does the following things:</p><ol><li>Check whether the Adaptive annotation is modified on the method</li><li>When generating code for a method, there must be a URL on the parameter list (or a URL in the parameter object)</li><li>Use ExtensionLoader.getExtension to get the extension</li><li>Execute the corresponding method</li></ol><h3 id=223-attach-an-example-of-dynamically-generated-code>2.2.3 Attach an example of dynamically generated code</h3><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 null check</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>// get the extension</span>
</span></span><span style=display:flex><span> String extName <span style=color:#719e07>=</span> url. <span style=color:#268bd2>getParameter</span>(<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>// extension null check</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>// get extension</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>// Execute the corresponding method</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><h2 id=3-spi-extension-example>3. SPI extension example</h2><h3 id=31-load-fixed-extension-class>3.1 Load fixed extension class</h3><h3 id=311-write-spi-interface-and-implementation-class>3.1.1 Write SPI interface and implementation class</h3><p>Whether it is Java SPI or SPI implemented in Dubbo, you need to write an interface. However, the interface in Dubbo needs to be decorated with @SPI annotation.</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-put-the-implementation-class-in-a-specific-directory>3.1.2 Put the implementation class in a specific directory</h4><p>From the above code, we can see that when dubbo loads the extension class, it will read from four directories. We create a new file named after the DemoSpi interface in the META-INF/dubbo directory, the content is as follows:</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 (full class name for the implementation class of the DemoSpi interface)
</span></span></code></pre></div><h4 id=313-use>3.1.3 Use</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. <span style=color:#268bd2>getExtensionLoader</span>(DemoSpi. <span style=color:#268bd2>class</span>);
</span></span><span style=display:flex><span> <span style=color:#268bd2>DemoSpi</span> dmeoSpi <span style=color:#719e07>=</span> extensionLoader. <span style=color:#268bd2>getExtension</span>(<span style=color:#2aa198>&#34;demoSpiImpl&#34;</span>);
</span></span><span style=display:flex><span> optimusPrime. <span style=color:#268bd2>sayHello</span>();
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h3 id=32-load-adaptive-extension-class>3.2 Load adaptive extension class</h3><p>This takes Protocol as an example to illustrate</p><h3 id=321-protocol-interface-extract-some-core-methods>3.2.1 Protocol interface (extract some core methods)</h3><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><h3 id=322-put-the-implementation-class-in-a-specific-directory>3.2.2 Put the implementation class in a specific directory</h3><p>In dubbo, the configuration path is 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>It should be noted that in dubbo, DubboProtocol is not used directly, but its wrapper class is used.</p><h3 id=323-use>3.2.3 Use</h3><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. <span style=color:#268bd2>refer</span>(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>Feedback</h2><p class=feedback--prompt>Was this page helpful?</p><button class="btn btn-primary mb-4 feedback--yes">Yes</button>
<button class="btn btn-primary mb-4 feedback--no">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><br><div class="text-muted mt-5 pt-3 border-top">Last modified January 2, 2023: <a href=https://github.com/apache/dubbo-website/commit/95a9f4f6c1cbb4425fe12411cd046f4463fee6b5>Enhance en docs (#1798) (95a9f4f6c1c)</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/en/docs3-v2/java-sdk/reference-manual/spi/description/dubbo-spi.md target=_blank><i class="fa fa-edit fa-fw"></i> Edit this page</a>
<a href="https://github.com/apache/dubbo-website/new/master/content/en/docs3-v2/java-sdk/reference-manual/spi/description/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> Create child page</a>
<a href="https://github.com/apache/dubbo-website/issues/new?title=Extension%20Point%20Development%20Guide" target=_blank><i class="fab fa-github fa-fw"></i> Create an issue</a>
<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i> Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#1-introduction>1 Introduction</a><ul><li><a href=#11-load-fixed-extension-classes>1.1 Load fixed extension classes</a></li><li><a href=#12-load-adaptive-extension-class>1.2 Load adaptive extension class</a></li></ul></li><li><a href=#2-dubbo-spi-source-code-analysis>2. Dubbo SPI source code analysis</a><ul><li><a href=#21-load-fixed-extension-class>2.1 Load fixed extension class</a></li><li><a href=#211-get-all-extension-classes>2.1.1 Get all extension classes</a></li><li><a href=#212-dubbo-ioc>2.1.2 Dubbo IOC</a></li><li><a href=#22-load-adaptive-extension-class>2.2 Load adaptive extension class</a></li><li><a href=#221-adaptive-extension-class-code-generation>2.2.1 Adaptive extension class code generation</a></li><li><a href=#223-attach-an-example-of-dynamically-generated-code>2.2.3 Attach an example of dynamically generated code</a></li></ul></li><li><a href=#3-spi-extension-example>3. SPI extension example</a><ul><li><a href=#31-load-fixed-extension-class>3.1 Load fixed extension class</a></li><li><a href=#311-write-spi-interface-and-implementation-class>3.1.1 Write SPI interface and implementation class</a></li><li><a href=#32-load-adaptive-extension-class>3.2 Load adaptive extension class</a></li><li><a href=#321-protocol-interface-extract-some-core-methods>3.2.1 Protocol interface (extract some core methods)</a></li><li><a href=#322-put-the-implementation-class-in-a-specific-directory>3.2.2 Put the implementation class in a specific directory</a></li><li><a href=#323-use>3.2.3 Use</a></li></ul></li></ul></nav></div></div></div></div><footer class="bg-dark py-5 row d-print-none footer-margin-0"><div class="container-fluid mx-sm-5"><div class=row><div class="col-6 col-sm-4 text-xs-center order-sm-2"><ul class="list-inline mb-0"><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title="Dubbo mailing list archive" aria-label="Dubbo mailing list archive"><a class=text-white target=_blank rel="noopener noreferrer" href=https://lists.apache.org/list.html?dev@dubbo.apache.org><i class="fa fa-envelope"></i></a></li></ul></div><div class="col-6 col-sm-4 text-right text-xs-center order-sm-3"><ul class="list-inline mb-0"><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=GitHub aria-label=GitHub><a class=text-white target=_blank rel="noopener noreferrer" href=https://github.com/apache/dubbo><i class="fab fa-github"></i></a></li><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title="Subscribe to mailing list" aria-label="Subscribe to mailing list"><a class=text-white target=_blank rel="noopener noreferrer" href=mailto:dev-subscribe@dubbo.apache.org><i class="fa fa-envelope"></i></a></li></ul></div><div class="col-12 col-sm-4 text-center py-2 order-sm-2"><small class=text-white>&copy; 2024 The Apache Software Foundation. Apache and the Apache feather logo are trademarks of The Apache Software Foundation. All Rights Reserved</small></div></div></div></footer><div class="row pt-2 pb-2 footer-margin-0"><div class="container-fluid mx-sm-5"><div class=text-center id=my-footer><img alt=apache_logo src=/imgs/apache_logo.png><ul><li><a href=https://www.apache.org>Foundation</a></li><li><a href=https://www.apache.org/licenses/>License</a></li><li><a href=https://dubbo.apache.org/en/overview/notices/>Security</a></li><li><a href=https://www.apache.org/events/current-event>Events</a></li><li><a href=https://www.apache.org/foundation/sponsorship.html>Sponsorship</a></li><li><a href=https://privacy.apache.org/policies/privacy-policy-public.html>Privacy</a></li><li><a href=https://www.apache.org/foundation/thanks.html>Thanks</a></li></ul></div></div></div><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 src=/js/main.min.b075178d232d3b0039b3cb6af2fc2e9d90071820167a60f4eea3a79169975ee8.js integrity="sha256-sHUXjSMtOwA5s8tq8vwunZAHGCAWemD07qOnkWmXXug=" crossorigin=anonymous></script><script async src=https://widget.kapa.ai/kapa-widget.bundle.js data-website-id=d763c4f2-f871-400b-aeca-d986c4af73c2 data-project-name="Apache Dubbo" data-project-color=#E8442E data-button-text="Ask AI" data-search-mode-enabled=true data-modal-open-on-command-k=true data-modal-disclaimer="The AI supports multiple languages, but it may not be accessible in China due to recaptcha, a proxy is required." data-project-logo=https://pbs.twimg.com/profile_images/1011849068283191302/FJbH5vbF_400x400.jpg data-modal-example-questions="What is Apache Dubbo?,How to run Apache Dubbo?" data-button-position-top data-button-position-right=20px data-button-position-bottom=200px data-button-position-left></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></body></html>