blob: f1f26497df784bf7fa5f2a36a7af4ffc69b02b93 [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/docs/v2.7/dev/principals/dummy/><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>"Fool-proof" Design | Apache Dubbo</title><meta property="og:title" content=" &#34;Fool-proof&#34; Design">
<meta property="og:description" content="http://javatar.iteye.com/blog/804187
Recently I was feeling stupid because I solved too many stupid problems. The service framework is becoming more widely used. Every day, I have to help the endpoint user to resolve problems. Gradually, it is found that most of the problems are configuration errors, or duplicated files or classes, or network failure. So I prepare to add some &ldquo;fool-proof&rdquo; design to the further version. It may be very simple, but it is still a little help for troubleshooting speed."><meta property="og:type" content="article"><meta property="og:url" content="https://cn.dubbo.apache.org/en/docs/v2.7/dev/principals/dummy/"><meta property="article:section" content="docs"><meta property="article:modified_time" content="2020-12-22T13:19:33+08:00"><meta itemprop=name content=" &#34;Fool-proof&#34; Design"><meta itemprop=description content="http://javatar.iteye.com/blog/804187
Recently I was feeling stupid because I solved too many stupid problems. The service framework is becoming more widely used. Every day, I have to help the endpoint user to resolve problems. Gradually, it is found that most of the problems are configuration errors, or duplicated files or classes, or network failure. So I prepare to add some &ldquo;fool-proof&rdquo; design to the further version. It may be very simple, but it is still a little help for troubleshooting speed."><meta itemprop=dateModified content="2020-12-22T13:19:33+08:00"><meta itemprop=wordCount content="1329"><meta itemprop=keywords content><meta name=twitter:card content="summary"><meta name=twitter:title content=" &#34;Fool-proof&#34; Design"><meta name=twitter:description content="http://javatar.iteye.com/blog/804187
Recently I was feeling stupid because I solved too many stupid problems. The service framework is becoming more widely used. Every day, I have to help the endpoint user to resolve problems. Gradually, it is found that most of the problems are configuration errors, or duplicated files or classes, or network failure. So I prepare to add some &ldquo;fool-proof&rdquo; design to the further version. It may be very simple, but it is still a little help for troubleshooting speed."><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="http://javatar.iteye.com/blog/804187
Recently I was feeling stupid because I solved too many stupid problems. The service framework is becoming more widely used. Every day, I have to help the endpoint user to resolve problems. Gradually, it is found that most of the problems are configuration errors, or duplicated files or classes, or network failure. So I prepare to add some &ldquo;fool-proof&rdquo; design to the further version. It may be very simple, but it is still a little help for troubleshooting speed."><meta property="og:description" content="http://javatar.iteye.com/blog/804187
Recently I was feeling stupid because I solved too many stupid problems. The service framework is becoming more widely used. Every day, I have to help the endpoint user to resolve problems. Gradually, it is found that most of the problems are configuration errors, or duplicated files or classes, or network failure. So I prepare to add some &ldquo;fool-proof&rdquo; design to the further version. It may be very simple, but it is still a little help for troubleshooting speed."><meta name=twitter:description content="http://javatar.iteye.com/blog/804187
Recently I was feeling stupid because I solved too many stupid problems. The service framework is becoming more widely used. Every day, I have to help the endpoint user to resolve problems. Gradually, it is found that most of the problems are configuration errors, or duplicated files or classes, or network failure. So I prepare to add some &ldquo;fool-proof&rdquo; design to the further version. It may be very simple, but it is still a little help for troubleshooting speed."><meta property="og:url" content="https://cn.dubbo.apache.org/en/docs/v2.7/dev/principals/dummy/"><meta property="og:title" content=" &#34;Fool-proof&#34; Design"><meta name=twitter:title content=" &#34;Fool-proof&#34; Design"><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 href=/en/docs3-v2/><span>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-endocsv27devprincipalsdummy").addClass("active"),$("#td-section-nav #m-endocsv27devprincipalsdummy-li span").addClass("td-sidebar-nav-active-item"),$("#td-section-nav #m-endocsv27devprincipalsdummy").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-endocsv27devprincipalsdummy-li").siblings("li").addClass("show"),$("#td-section-nav #m-endocsv27devprincipalsdummy-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-endocs-li><ul class=ul-1><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27-li><input type=checkbox id=m-endocsv27-check>
<label for=m-endocsv27-check><a href=/en/docs/v2.7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27><span>Dubbo 2.7</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27user-li><input type=checkbox id=m-endocsv27user-check>
<label for=m-endocsv27user-check><a href=/en/docs/v2.7/user/ title="User Documentation" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27user><span>User</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27userpreface-li><input type=checkbox id=m-endocsv27userpreface-check>
<label for=m-endocsv27userpreface-check><a href=/en/docs/v2.7/user/preface/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27userpreface><span>Preface</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userprefacebackground-li><input type=checkbox id=m-endocsv27userprefacebackground-check>
<label for=m-endocsv27userprefacebackground-check><a href=/en/docs/v2.7/user/preface/background/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userprefacebackground><span>Background</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userprefacerequirements-li><input type=checkbox id=m-endocsv27userprefacerequirements-check>
<label for=m-endocsv27userprefacerequirements-check><a href=/en/docs/v2.7/user/preface/requirements/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userprefacerequirements><span>Requirements</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userprefacearchitecture-li><input type=checkbox id=m-endocsv27userprefacearchitecture-check>
<label for=m-endocsv27userprefacearchitecture-check><a href=/en/docs/v2.7/user/preface/architecture/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userprefacearchitecture><span>Architecture</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userprefaceusage-li><input type=checkbox id=m-endocsv27userprefaceusage-check>
<label for=m-endocsv27userprefaceusage-check><a href=/en/docs/v2.7/user/preface/usage/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userprefaceusage><span>Usage</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userquick-start-li><input type=checkbox id=m-endocsv27userquick-start-check>
<label for=m-endocsv27userquick-start-check><a href=/en/docs/v2.7/user/quick-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userquick-start><span>Quick start</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userdependencies-li><input type=checkbox id=m-endocsv27userdependencies-check>
<label for=m-endocsv27userdependencies-check><a href=/en/docs/v2.7/user/dependencies/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userdependencies><span>Dependencies</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27usermaturity-li><input type=checkbox id=m-endocsv27usermaturity-check>
<label for=m-endocsv27usermaturity-check><a href=/en/docs/v2.7/user/maturity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27usermaturity><span>Maturity</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27userconfiguration-li><input type=checkbox id=m-endocsv27userconfiguration-check>
<label for=m-endocsv27userconfiguration-check><a href=/en/docs/v2.7/user/configuration/ title="Dubbo Configuration" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27userconfiguration><span>Configuration</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userconfigurationxml-li><input type=checkbox id=m-endocsv27userconfigurationxml-check>
<label for=m-endocsv27userconfigurationxml-check><a href=/en/docs/v2.7/user/configuration/xml/ title="XML Configuration" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userconfigurationxml><span>XML</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userconfigurationproperties-li><input type=checkbox id=m-endocsv27userconfigurationproperties-check>
<label for=m-endocsv27userconfigurationproperties-check><a href=/en/docs/v2.7/user/configuration/properties/ title="Properties Configuration" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userconfigurationproperties><span>Properties</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userconfigurationapi-li><input type=checkbox id=m-endocsv27userconfigurationapi-check>
<label for=m-endocsv27userconfigurationapi-check><a href=/en/docs/v2.7/user/configuration/api/ title="API Configuration" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userconfigurationapi><span>API</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userconfigurationannotation-li><input type=checkbox id=m-endocsv27userconfigurationannotation-check>
<label for=m-endocsv27userconfigurationannotation-check><a href=/en/docs/v2.7/user/configuration/annotation/ title="Annotation Configuration" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userconfigurationannotation><span>Annotation</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userconfigurationconfiguration-load-process-li><input type=checkbox id=m-endocsv27userconfigurationconfiguration-load-process-check>
<label for=m-endocsv27userconfigurationconfiguration-load-process-check><a href=/en/docs/v2.7/user/configuration/configuration-load-process/ title="Configuration Loading Process" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userconfigurationconfiguration-load-process><span>Loading Process</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27userexamples-li><input type=checkbox id=m-endocsv27userexamples-check>
<label for=m-endocsv27userexamples-check><a href=/en/docs/v2.7/user/examples/ title="Dubbo Examples" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27userexamples><span>Examples</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplespreflight-check-li><input type=checkbox id=m-endocsv27userexamplespreflight-check-check>
<label for=m-endocsv27userexamplespreflight-check-check><a href=/en/docs/v2.7/user/examples/preflight-check/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplespreflight-check><span>Preflight Check</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesfault-tolerent-strategy-li><input type=checkbox id=m-endocsv27userexamplesfault-tolerent-strategy-check>
<label for=m-endocsv27userexamplesfault-tolerent-strategy-check><a href=/en/docs/v2.7/user/examples/fault-tolerent-strategy/ title="Fault Tolerance Strategy" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesfault-tolerent-strategy><span>Fault Tolerance</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesloadbalance-li><input type=checkbox id=m-endocsv27userexamplesloadbalance-check>
<label for=m-endocsv27userexamplesloadbalance-check><a href=/en/docs/v2.7/user/examples/loadbalance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesloadbalance><span>Load Balance</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesthread-model-li><input type=checkbox id=m-endocsv27userexamplesthread-model-check>
<label for=m-endocsv27userexamplesthread-model-check><a href=/en/docs/v2.7/user/examples/thread-model/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesthread-model><span>Thread Model</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesexplicit-target-li><input type=checkbox id=m-endocsv27userexamplesexplicit-target-check>
<label for=m-endocsv27userexamplesexplicit-target-check><a href=/en/docs/v2.7/user/examples/explicit-target/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesexplicit-target><span>Explicit Target</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplessubscribe-only-li><input type=checkbox id=m-endocsv27userexamplessubscribe-only-check>
<label for=m-endocsv27userexamplessubscribe-only-check><a href=/en/docs/v2.7/user/examples/subscribe-only/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplessubscribe-only><span>Subscribe Only</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesmulti-protocols-li><input type=checkbox id=m-endocsv27userexamplesmulti-protocols-check>
<label for=m-endocsv27userexamplesmulti-protocols-check><a href=/en/docs/v2.7/user/examples/multi-protocols/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesmulti-protocols><span>Multiple Protocols</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesmulti-registry-li><input type=checkbox id=m-endocsv27userexamplesmulti-registry-check>
<label for=m-endocsv27userexamplesmulti-registry-check><a href=/en/docs/v2.7/user/examples/multi-registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesmulti-registry><span>Multiple Registries</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesservice-group-li><input type=checkbox id=m-endocsv27userexamplesservice-group-check>
<label for=m-endocsv27userexamplesservice-group-check><a href=/en/docs/v2.7/user/examples/service-group/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesservice-group><span>Service Group</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesstatic-service-li><input type=checkbox id=m-endocsv27userexamplesstatic-service-check>
<label for=m-endocsv27userexamplesstatic-service-check><a href=/en/docs/v2.7/user/examples/static-service/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesstatic-service><span>Static Service</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesmulti-versions-li><input type=checkbox id=m-endocsv27userexamplesmulti-versions-check>
<label for=m-endocsv27userexamplesmulti-versions-check><a href=/en/docs/v2.7/user/examples/multi-versions/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesmulti-versions><span>Multiple Versions</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesgroup-merger-li><input type=checkbox id=m-endocsv27userexamplesgroup-merger-check>
<label for=m-endocsv27userexamplesgroup-merger-check><a href=/en/docs/v2.7/user/examples/group-merger/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesgroup-merger><span>Group Merger</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesparameter-validation-li><input type=checkbox id=m-endocsv27userexamplesparameter-validation-check>
<label for=m-endocsv27userexamplesparameter-validation-check><a href=/en/docs/v2.7/user/examples/parameter-validation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesparameter-validation><span>Parameter Validation</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesresult-cache-li><input type=checkbox id=m-endocsv27userexamplesresult-cache-check>
<label for=m-endocsv27userexamplesresult-cache-check><a href=/en/docs/v2.7/user/examples/result-cache/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesresult-cache><span>Cache Result</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesbroadcast-resp-collect-li><input type=checkbox id=m-endocsv27userexamplesbroadcast-resp-collect-check>
<label for=m-endocsv27userexamplesbroadcast-resp-collect-check><a href=/en/docs/v2.7/user/examples/broadcast-resp-collect/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesbroadcast-resp-collect><span>Collect Broadcast Responses</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesgeneric-invoke-with-json-li><input type=checkbox id=m-endocsv27userexamplesgeneric-invoke-with-json-check>
<label for=m-endocsv27userexamplesgeneric-invoke-with-json-check><a href=/en/docs/v2.7/user/examples/generic-invoke-with-json/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesgeneric-invoke-with-json><span>json generic invoke</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesmsgpack-serialization-li><input type=checkbox id=m-endocsv27userexamplesmsgpack-serialization-check>
<label for=m-endocsv27userexamplesmsgpack-serialization-check><a href=/en/docs/v2.7/user/examples/msgpack-serialization/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesmsgpack-serialization><span>msgpack serialization</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesprovider-timeout-release-li><input type=checkbox id=m-endocsv27userexamplesprovider-timeout-release-check>
<label for=m-endocsv27userexamplesprovider-timeout-release-check><a href=/en/docs/v2.7/user/examples/provider-timeout-release/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesprovider-timeout-release><span>provider timeout release</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesinvoke-with-specified-ip-li><input type=checkbox id=m-endocsv27userexamplesinvoke-with-specified-ip-check>
<label for=m-endocsv27userexamplesinvoke-with-specified-ip-check><a href=/en/docs/v2.7/user/examples/invoke-with-specified-ip/ title="Invoke provider with specified IP port" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesinvoke-with-specified-ip><span>Specified IP port</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesgeneric-reference-li><input type=checkbox id=m-endocsv27userexamplesgeneric-reference-check>
<label for=m-endocsv27userexamplesgeneric-reference-check><a href=/en/docs/v2.7/user/examples/generic-reference/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesgeneric-reference><span>Generic Reference</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesgeneric-service-li><input type=checkbox id=m-endocsv27userexamplesgeneric-service-check>
<label for=m-endocsv27userexamplesgeneric-service-check><a href=/en/docs/v2.7/user/examples/generic-service/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesgeneric-service><span>Generic Service</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesecho-service-li><input type=checkbox id=m-endocsv27userexamplesecho-service-check>
<label for=m-endocsv27userexamplesecho-service-check><a href=/en/docs/v2.7/user/examples/echo-service/ title="Echo Testing Service" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesecho-service><span>Echo Service</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplescontext-li><input type=checkbox id=m-endocsv27userexamplescontext-check>
<label for=m-endocsv27userexamplescontext-check><a href=/en/docs/v2.7/user/examples/context/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplescontext><span>Context</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesattachment-li><input type=checkbox id=m-endocsv27userexamplesattachment-check>
<label for=m-endocsv27userexamplesattachment-check><a href=/en/docs/v2.7/user/examples/attachment/ title="Implicit parameters" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesattachment><span>Attachment</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesasync-call-li><input type=checkbox id=m-endocsv27userexamplesasync-call-check>
<label for=m-endocsv27userexamplesasync-call-check><a href=/en/docs/v2.7/user/examples/async-call/ title="Asynchronous Call" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesasync-call><span>Async Call</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesasync-execute-on-provider-li><input type=checkbox id=m-endocsv27userexamplesasync-execute-on-provider-check>
<label for=m-endocsv27userexamplesasync-execute-on-provider-check><a href=/en/docs/v2.7/user/examples/async-execute-on-provider/ title="Asynchronous Execution" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesasync-execute-on-provider><span>Async Execution</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexampleslocal-call-li><input type=checkbox id=m-endocsv27userexampleslocal-call-check>
<label for=m-endocsv27userexampleslocal-call-check><a href=/en/docs/v2.7/user/examples/local-call/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexampleslocal-call><span>Local Call</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplescallback-parameter-li><input type=checkbox id=m-endocsv27userexamplescallback-parameter-check>
<label for=m-endocsv27userexamplescallback-parameter-check><a href=/en/docs/v2.7/user/examples/callback-parameter/ title="Callback parameter" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplescallback-parameter><span>Callback</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesevents-notify-li><input type=checkbox id=m-endocsv27userexamplesevents-notify-check>
<label for=m-endocsv27userexamplesevents-notify-check><a href=/en/docs/v2.7/user/examples/events-notify/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesevents-notify><span>Event Notification</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexampleslocal-stub-li><input type=checkbox id=m-endocsv27userexampleslocal-stub-check>
<label for=m-endocsv27userexampleslocal-stub-check><a href=/en/docs/v2.7/user/examples/local-stub/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexampleslocal-stub><span>Local Stub</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexampleslocal-mock-li><input type=checkbox id=m-endocsv27userexampleslocal-mock-check>
<label for=m-endocsv27userexampleslocal-mock-check><a href=/en/docs/v2.7/user/examples/local-mock/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexampleslocal-mock><span>Local Mock</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesdelay-publish-li><input type=checkbox id=m-endocsv27userexamplesdelay-publish-check>
<label for=m-endocsv27userexamplesdelay-publish-check><a href=/en/docs/v2.7/user/examples/delay-publish/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesdelay-publish><span>Delay Publish</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesconcurrency-control-li><input type=checkbox id=m-endocsv27userexamplesconcurrency-control-check>
<label for=m-endocsv27userexamplesconcurrency-control-check><a href=/en/docs/v2.7/user/examples/concurrency-control/ title="Concurrency Control" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesconcurrency-control><span>Concurrency</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesconfig-connections-li><input type=checkbox id=m-endocsv27userexamplesconfig-connections-check>
<label for=m-endocsv27userexamplesconfig-connections-check><a href=/en/docs/v2.7/user/examples/config-connections/ title="Config connections" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesconfig-connections><span>Connection</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexampleslazy-connect-li><input type=checkbox id=m-endocsv27userexampleslazy-connect-check>
<label for=m-endocsv27userexampleslazy-connect-check><a href=/en/docs/v2.7/user/examples/lazy-connect/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexampleslazy-connect><span>Lazy Connect</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesstickiness-li><input type=checkbox id=m-endocsv27userexamplesstickiness-check>
<label for=m-endocsv27userexamplesstickiness-check><a href=/en/docs/v2.7/user/examples/stickiness/ title="Stickiness Connection" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesstickiness><span>Stickiness</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplestoken-authorization-li><input type=checkbox id=m-endocsv27userexamplestoken-authorization-check>
<label for=m-endocsv27userexamplestoken-authorization-check><a href=/en/docs/v2.7/user/examples/token-authorization/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplestoken-authorization><span>Token Authorization</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesrouting-rule-li><input type=checkbox id=m-endocsv27userexamplesrouting-rule-check>
<label for=m-endocsv27userexamplesrouting-rule-check><a href=/en/docs/v2.7/user/examples/routing-rule/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesrouting-rule><span>Routing Rule</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesconfig-rule-li><input type=checkbox id=m-endocsv27userexamplesconfig-rule-check>
<label for=m-endocsv27userexamplesconfig-rule-check><a href=/en/docs/v2.7/user/examples/config-rule/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesconfig-rule><span>Configure rule</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesservice-downgrade-li><input type=checkbox id=m-endocsv27userexamplesservice-downgrade-check>
<label for=m-endocsv27userexamplesservice-downgrade-check><a href=/en/docs/v2.7/user/examples/service-downgrade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesservice-downgrade><span>Service Downgrade</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesgraceful-shutdown-li><input type=checkbox id=m-endocsv27userexamplesgraceful-shutdown-check>
<label for=m-endocsv27userexamplesgraceful-shutdown-check><a href=/en/docs/v2.7/user/examples/graceful-shutdown/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesgraceful-shutdown><span>Graceful Shutdown</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexampleshostname-binding-li><input type=checkbox id=m-endocsv27userexampleshostname-binding-check>
<label for=m-endocsv27userexampleshostname-binding-check><a href=/en/docs/v2.7/user/examples/hostname-binding/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexampleshostname-binding><span>Hostname Binding</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexampleslogger-strategy-li><input type=checkbox id=m-endocsv27userexampleslogger-strategy-check>
<label for=m-endocsv27userexampleslogger-strategy-check><a href=/en/docs/v2.7/user/examples/logger-strategy/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexampleslogger-strategy><span>Logger Strategy</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesaccesslog-li><input type=checkbox id=m-endocsv27userexamplesaccesslog-check>
<label for=m-endocsv27userexamplesaccesslog-check><a href=/en/docs/v2.7/user/examples/accesslog/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesaccesslog><span>Access Log</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesservice-container-li><input type=checkbox id=m-endocsv27userexamplesservice-container-check>
<label for=m-endocsv27userexamplesservice-container-check><a href=/en/docs/v2.7/user/examples/service-container/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesservice-container><span>Service Container</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesreference-config-cache-li><input type=checkbox id=m-endocsv27userexamplesreference-config-cache-check>
<label for=m-endocsv27userexamplesreference-config-cache-check><a href=/en/docs/v2.7/user/examples/reference-config-cache/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesreference-config-cache><span>ReferenceConfig Cache</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesregistry-only-li><input type=checkbox id=m-endocsv27userexamplesregistry-only-check>
<label for=m-endocsv27userexamplesregistry-only-check><a href=/en/docs/v2.7/user/examples/registry-only/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesregistry-only><span>Register Only</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesdistributed-transaction-li><input type=checkbox id=m-endocsv27userexamplesdistributed-transaction-check>
<label for=m-endocsv27userexamplesdistributed-transaction-check><a href=/en/docs/v2.7/user/examples/distributed-transaction/ title="Distributed transaction" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesdistributed-transaction><span>Transaction</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesdump-li><input type=checkbox id=m-endocsv27userexamplesdump-check>
<label for=m-endocsv27userexamplesdump-check><a href=/en/docs/v2.7/user/examples/dump/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesdump><span>Thread Dump</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userexamplesnetty4-li><input type=checkbox id=m-endocsv27userexamplesnetty4-check>
<label for=m-endocsv27userexamplesnetty4-check><a href=/en/docs/v2.7/user/examples/netty4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userexamplesnetty4><span>Netty4</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27userreferences-li><input type=checkbox id=m-endocsv27userreferences-check>
<label for=m-endocsv27userreferences-check><a href=/en/docs/v2.7/user/references/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27userreferences><span>References</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27userreferencesxml-li><input type=checkbox id=m-endocsv27userreferencesxml-check>
<label for=m-endocsv27userreferencesxml-check><a href=/en/docs/v2.7/user/references/xml/ title="Schema Configuration Reference" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27userreferencesxml><span>XML</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesxmldubbo-application-li><input type=checkbox id=m-endocsv27userreferencesxmldubbo-application-check>
<label for=m-endocsv27userreferencesxmldubbo-application-check><a href=/en/docs/v2.7/user/references/xml/dubbo-application/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesxmldubbo-application><span>dubbo:application</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesxmldubbo-argument-li><input type=checkbox id=m-endocsv27userreferencesxmldubbo-argument-check>
<label for=m-endocsv27userreferencesxmldubbo-argument-check><a href=/en/docs/v2.7/user/references/xml/dubbo-argument/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesxmldubbo-argument><span>dubbo:argument</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesxmldubbo-config-center-li><input type=checkbox id=m-endocsv27userreferencesxmldubbo-config-center-check>
<label for=m-endocsv27userreferencesxmldubbo-config-center-check><a href=/en/docs/v2.7/user/references/xml/dubbo-config-center/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesxmldubbo-config-center><span>dubbo:config-center</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesxmldubbo-consumer-li><input type=checkbox id=m-endocsv27userreferencesxmldubbo-consumer-check>
<label for=m-endocsv27userreferencesxmldubbo-consumer-check><a href=/en/docs/v2.7/user/references/xml/dubbo-consumer/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesxmldubbo-consumer><span>dubbo:consumer</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesxmldubbo-method-li><input type=checkbox id=m-endocsv27userreferencesxmldubbo-method-check>
<label for=m-endocsv27userreferencesxmldubbo-method-check><a href=/en/docs/v2.7/user/references/xml/dubbo-method/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesxmldubbo-method><span>dubbo:method</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesxmldubbo-module-li><input type=checkbox id=m-endocsv27userreferencesxmldubbo-module-check>
<label for=m-endocsv27userreferencesxmldubbo-module-check><a href=/en/docs/v2.7/user/references/xml/dubbo-module/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesxmldubbo-module><span>dubbo:module</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesxmldubbo-monitor-li><input type=checkbox id=m-endocsv27userreferencesxmldubbo-monitor-check>
<label for=m-endocsv27userreferencesxmldubbo-monitor-check><a href=/en/docs/v2.7/user/references/xml/dubbo-monitor/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesxmldubbo-monitor><span>dubbo:monitor</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesxmldubbo-parameter-li><input type=checkbox id=m-endocsv27userreferencesxmldubbo-parameter-check>
<label for=m-endocsv27userreferencesxmldubbo-parameter-check><a href=/en/docs/v2.7/user/references/xml/dubbo-parameter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesxmldubbo-parameter><span>dubbo:parameter</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesxmldubbo-protocol-li><input type=checkbox id=m-endocsv27userreferencesxmldubbo-protocol-check>
<label for=m-endocsv27userreferencesxmldubbo-protocol-check><a href=/en/docs/v2.7/user/references/xml/dubbo-protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesxmldubbo-protocol><span>dubbo:protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesxmldubbo-provider-li><input type=checkbox id=m-endocsv27userreferencesxmldubbo-provider-check>
<label for=m-endocsv27userreferencesxmldubbo-provider-check><a href=/en/docs/v2.7/user/references/xml/dubbo-provider/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesxmldubbo-provider><span>dubbo:provider</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesxmldubbo-reference-li><input type=checkbox id=m-endocsv27userreferencesxmldubbo-reference-check>
<label for=m-endocsv27userreferencesxmldubbo-reference-check><a href=/en/docs/v2.7/user/references/xml/dubbo-reference/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesxmldubbo-reference><span>dubbo:reference</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesxmldubbo-registry-li><input type=checkbox id=m-endocsv27userreferencesxmldubbo-registry-check>
<label for=m-endocsv27userreferencesxmldubbo-registry-check><a href=/en/docs/v2.7/user/references/xml/dubbo-registry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesxmldubbo-registry><span>dubbo:registry</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesxmldubbo-service-li><input type=checkbox id=m-endocsv27userreferencesxmldubbo-service-check>
<label for=m-endocsv27userreferencesxmldubbo-service-check><a href=/en/docs/v2.7/user/references/xml/dubbo-service/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesxmldubbo-service><span>dubbo:service</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27userreferencesprotocol-li><input type=checkbox id=m-endocsv27userreferencesprotocol-check>
<label for=m-endocsv27userreferencesprotocol-check><a href=/en/docs/v2.7/user/references/protocol/ title="Protocol References" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27userreferencesprotocol><span>Protocol</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesprotocoldubbo-li><input type=checkbox id=m-endocsv27userreferencesprotocoldubbo-check>
<label for=m-endocsv27userreferencesprotocoldubbo-check><a href=/en/docs/v2.7/user/references/protocol/dubbo/ title="dubbo protocol" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesprotocoldubbo><span>dubbo://</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesprotocolrest-li><input type=checkbox id=m-endocsv27userreferencesprotocolrest-check>
<label for=m-endocsv27userreferencesprotocolrest-check><a href=/en/docs/v2.7/user/references/protocol/rest/ title="rest protocol" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesprotocolrest><span>rest://</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesprotocolhttp-li><input type=checkbox id=m-endocsv27userreferencesprotocolhttp-check>
<label for=m-endocsv27userreferencesprotocolhttp-check><a href=/en/docs/v2.7/user/references/protocol/http/ title="http protocol" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesprotocolhttp><span>http://</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesprotocolhessian-li><input type=checkbox id=m-endocsv27userreferencesprotocolhessian-check>
<label for=m-endocsv27userreferencesprotocolhessian-check><a href=/en/docs/v2.7/user/references/protocol/hessian/ title="hessian protocol" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesprotocolhessian><span>hessian://</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesprotocolredis-li><input type=checkbox id=m-endocsv27userreferencesprotocolredis-check>
<label for=m-endocsv27userreferencesprotocolredis-check><a href=/en/docs/v2.7/user/references/protocol/redis/ title="redis protocol" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesprotocolredis><span>redis://</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesprotocolthrift-li><input type=checkbox id=m-endocsv27userreferencesprotocolthrift-check>
<label for=m-endocsv27userreferencesprotocolthrift-check><a href=/en/docs/v2.7/user/references/protocol/thrift/ title="thrift protocol" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesprotocolthrift><span>thrift://</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesprotocolmemcached-li><input type=checkbox id=m-endocsv27userreferencesprotocolmemcached-check>
<label for=m-endocsv27userreferencesprotocolmemcached-check><a href=/en/docs/v2.7/user/references/protocol/memcached/ title="memcached protocol" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesprotocolmemcached><span>memcached://</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesprotocolrmi-li><input type=checkbox id=m-endocsv27userreferencesprotocolrmi-check>
<label for=m-endocsv27userreferencesprotocolrmi-check><a href=/en/docs/v2.7/user/references/protocol/rmi/ title="rmi protocol" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesprotocolrmi><span>rmi://</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesprotocolwebservice-li><input type=checkbox id=m-endocsv27userreferencesprotocolwebservice-check>
<label for=m-endocsv27userreferencesprotocolwebservice-check><a href=/en/docs/v2.7/user/references/protocol/webservice/ title="webservice protocol" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesprotocolwebservice><span>webservice://</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27userreferencesregistry-li><input type=checkbox id=m-endocsv27userreferencesregistry-check>
<label for=m-endocsv27userreferencesregistry-check><a href=/en/docs/v2.7/user/references/registry/ title="Registry Server References" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27userreferencesregistry><span>Registry Server</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesregistrynacos-li><input type=checkbox id=m-endocsv27userreferencesregistrynacos-check>
<label for=m-endocsv27userreferencesregistrynacos-check><a href=/en/docs/v2.7/user/references/registry/nacos/ title="Nacos Registry Center" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesregistrynacos><span>Nacos</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesregistryzookeeper-li><input type=checkbox id=m-endocsv27userreferencesregistryzookeeper-check>
<label for=m-endocsv27userreferencesregistryzookeeper-check><a href=/en/docs/v2.7/user/references/registry/zookeeper/ title="Zookeeper Registry Server" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesregistryzookeeper><span>Zookeeper</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesregistrymulticast-li><input type=checkbox id=m-endocsv27userreferencesregistrymulticast-check>
<label for=m-endocsv27userreferencesregistrymulticast-check><a href=/en/docs/v2.7/user/references/registry/multicast/ title="Multicast Registry" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesregistrymulticast><span>Multicast</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesregistryredis-li><input type=checkbox id=m-endocsv27userreferencesregistryredis-check>
<label for=m-endocsv27userreferencesregistryredis-check><a href=/en/docs/v2.7/user/references/registry/redis/ title="Redis Registry Server" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesregistryredis><span>Redis</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesregistrysimple-li><input type=checkbox id=m-endocsv27userreferencesregistrysimple-check>
<label for=m-endocsv27userreferencesregistrysimple-check><a href=/en/docs/v2.7/user/references/registry/simple/ title="Simple Registry Server" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesregistrysimple><span>Simple</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesmetadata-li><input type=checkbox id=m-endocsv27userreferencesmetadata-check>
<label for=m-endocsv27userreferencesmetadata-check><a href=/en/docs/v2.7/user/references/metadata/ title="Metadata Reference" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesmetadata><span>Metadata</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesapi-li><input type=checkbox id=m-endocsv27userreferencesapi-check>
<label for=m-endocsv27userreferencesapi-check><a href=/en/docs/v2.7/user/references/api/ title="API Reference" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesapi><span>API</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesqos-li><input type=checkbox id=m-endocsv27userreferencesqos-check>
<label for=m-endocsv27userreferencesqos-check><a href=/en/docs/v2.7/user/references/qos/ title="Qos Command Usage " class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesqos><span>Qos</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencestelnet-li><input type=checkbox id=m-endocsv27userreferencestelnet-check>
<label for=m-endocsv27userreferencestelnet-check><a href=/en/docs/v2.7/user/references/telnet/ title="Telnet Command Reference" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencestelnet><span>Telnet</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userreferencesmaven-li><input type=checkbox id=m-endocsv27userreferencesmaven-check>
<label for=m-endocsv27userreferencesmaven-check><a href=/en/docs/v2.7/user/references/maven/ title="Maven Plugin Reference" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userreferencesmaven><span>Maven</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userbest-practice-li><input type=checkbox id=m-endocsv27userbest-practice-check>
<label for=m-endocsv27userbest-practice-check><a href=/en/docs/v2.7/user/best-practice/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userbest-practice><span>Best practice</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userrecommend-li><input type=checkbox id=m-endocsv27userrecommend-check>
<label for=m-endocsv27userrecommend-check><a href=/en/docs/v2.7/user/recommend/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userrecommend><span>Recommended usage</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27usercapacity-plan-li><input type=checkbox id=m-endocsv27usercapacity-plan-check>
<label for=m-endocsv27usercapacity-plan-check><a href=/en/docs/v2.7/user/capacity-plan/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27usercapacity-plan><span>Capacity plan</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userperf-test-li><input type=checkbox id=m-endocsv27userperf-test-check>
<label for=m-endocsv27userperf-test-check><a href=/en/docs/v2.7/user/perf-test/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userperf-test><span>Performance</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27usercoveragence-li><input type=checkbox id=m-endocsv27usercoveragence-check>
<label for=m-endocsv27usercoveragence-check><a href=/en/docs/v2.7/user/coveragence/ title="Test coverage report" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27usercoveragence><span>Test coverage</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userbenchmark-tool-li><input type=checkbox id=m-endocsv27userbenchmark-tool-check>
<label for=m-endocsv27userbenchmark-tool-check><a href=/en/docs/v2.7/user/benchmark-tool/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userbenchmark-tool><span>Benchmark Suite</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userrest-li><input type=checkbox id=m-endocsv27userrest-check>
<label for=m-endocsv27userrest-check><a href=/en/docs/v2.7/user/rest/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userrest><span>REST support</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27usersimple-monitor-li><input type=checkbox id=m-endocsv27usersimple-monitor-check>
<label for=m-endocsv27usersimple-monitor-check><a href=/en/docs/v2.7/user/simple-monitor/ title="Simple Monitor" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27usersimple-monitor><span>Simple monitor</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27userlanguages-li><input type=checkbox id=m-endocsv27userlanguages-check>
<label for=m-endocsv27userlanguages-check><a href=/en/docs/v2.7/user/languages/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27userlanguages><span>Other Languages</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27userlanguageserlang-li><input type=checkbox id=m-endocsv27userlanguageserlang-check>
<label for=m-endocsv27userlanguageserlang-check><a href=/en/docs/v2.7/user/languages/erlang/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27userlanguageserlang><span>Erlang</span></a></label><ul class="ul-5 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userlanguageserlangquick-start-li><input type=checkbox id=m-endocsv27userlanguageserlangquick-start-check>
<label for=m-endocsv27userlanguageserlangquick-start-check><a href=/en/docs/v2.7/user/languages/erlang/quick-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userlanguageserlangquick-start><span>Quick Start</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userlanguageserlangreference-li><input type=checkbox id=m-endocsv27userlanguageserlangreference-check>
<label for=m-endocsv27userlanguageserlangreference-check><a href=/en/docs/v2.7/user/languages/erlang/reference/ title="Consumer Configuration" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userlanguageserlangreference><span>Consumer</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userlanguageserlangservice-li><input type=checkbox id=m-endocsv27userlanguageserlangservice-check>
<label for=m-endocsv27userlanguageserlangservice-check><a href=/en/docs/v2.7/user/languages/erlang/service/ title="Provider Configuration" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userlanguageserlangservice><span>Provider</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27userlanguageserlangserialization-li><input type=checkbox id=m-endocsv27userlanguageserlangserialization-check>
<label for=m-endocsv27userlanguageserlangserialization-check><a href=/en/docs/v2.7/user/languages/erlang/serialization/ title="Protocol Configuration" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27userlanguageserlangserialization><span>Protocol</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-endocsv27dev-li><input type=checkbox id=m-endocsv27dev-check>
<label for=m-endocsv27dev-check><a href=/en/docs/v2.7/dev/ title="Dubbo Developer Guide" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27dev><span>Developer</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devbuild-li><input type=checkbox id=m-endocsv27devbuild-check>
<label for=m-endocsv27devbuild-check><a href=/en/docs/v2.7/dev/build/ title="Source Code Build" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devbuild><span>Build</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devdesign-li><input type=checkbox id=m-endocsv27devdesign-check>
<label for=m-endocsv27devdesign-check><a href=/en/docs/v2.7/dev/design/ title="Framework Design" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devdesign><span>Design</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devspi-li><input type=checkbox id=m-endocsv27devspi-check>
<label for=m-endocsv27devspi-check><a href=/en/docs/v2.7/dev/spi/ title="SPI Loading" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devspi><span>SPI</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplementation-li><input type=checkbox id=m-endocsv27devimplementation-check>
<label for=m-endocsv27devimplementation-check><a href=/en/docs/v2.7/dev/implementation/ title="Implementation details" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplementation><span>Implementation</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27devprincipals-li><input type=checkbox id=m-endocsv27devprincipals-check>
<label for=m-endocsv27devprincipals-check><a href=/en/docs/v2.7/dev/principals/ title="Dubbo Design Principals" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27devprincipals><span>Design Principals</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devprincipalscode-detail-li><input type=checkbox id=m-endocsv27devprincipalscode-detail-check>
<label for=m-endocsv27devprincipalscode-detail-check><a href=/en/docs/v2.7/dev/principals/code-detail/ title="The Devil Is In The Details" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devprincipalscode-detail><span>Details</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devprincipalsconfiguration-li><input type=checkbox id=m-endocsv27devprincipalsconfiguration-check>
<label for=m-endocsv27devprincipalsconfiguration-check><a href=/en/docs/v2.7/dev/principals/configuration/ title="The Configuration Design" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devprincipalsconfiguration><span>Configuration</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devprincipalsdummy-li><input type=checkbox id=m-endocsv27devprincipalsdummy-check>
<label for=m-endocsv27devprincipalsdummy-check><a href=/en/docs/v2.7/dev/principals/dummy/ title=' "Fool-proof" Design' class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devprincipalsdummy><span>Fool-proof</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devprincipalsexpansibility-li><input type=checkbox id=m-endocsv27devprincipalsexpansibility-check>
<label for=m-endocsv27devprincipalsexpansibility-check><a href=/en/docs/v2.7/dev/principals/expansibility/ title="Talk About Expansion Of Extension And Incremental Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devprincipalsexpansibility><span>Extensibility</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devprincipalsextension-li><input type=checkbox id=m-endocsv27devprincipalsextension-check>
<label for=m-endocsv27devprincipalsextension-check><a href=/en/docs/v2.7/dev/principals/extension/ title="Extension Points To Reconstruct" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devprincipalsextension><span>Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devprincipalsgeneral-knowledge-li><input type=checkbox id=m-endocsv27devprincipalsgeneral-knowledge-check>
<label for=m-endocsv27devprincipalsgeneral-knowledge-check><a href=/en/docs/v2.7/dev/principals/general-knowledge/ title="Some In The Design Of The Basic Common Sense" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devprincipalsgeneral-knowledge><span>General Rule</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devprincipalsrobustness-li><input type=checkbox id=m-endocsv27devprincipalsrobustness-check>
<label for=m-endocsv27devprincipalsrobustness-check><a href=/en/docs/v2.7/dev/principals/robustness/ title="The Robustness Of The Design Implementation" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devprincipalsrobustness><span>Robustness</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27devimpls-li><input type=checkbox id=m-endocsv27devimpls-check>
<label for=m-endocsv27devimpls-check><a href=/en/docs/v2.7/dev/impls/ title="SPI Extension Implementations" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27devimpls><span>SPI Impls</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsprotocol-li><input type=checkbox id=m-endocsv27devimplsprotocol-check>
<label for=m-endocsv27devimplsprotocol-check><a href=/en/docs/v2.7/dev/impls/protocol/ title="Protocol Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsprotocol><span>Protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsfilter-li><input type=checkbox id=m-endocsv27devimplsfilter-check>
<label for=m-endocsv27devimplsfilter-check><a href=/en/docs/v2.7/dev/impls/filter/ title="Filter Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsfilter><span>Filter</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsinvoker-listener-li><input type=checkbox id=m-endocsv27devimplsinvoker-listener-check>
<label for=m-endocsv27devimplsinvoker-listener-check><a href=/en/docs/v2.7/dev/impls/invoker-listener/ title="InvokerListener Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsinvoker-listener><span>InvokerListener</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsexporter-listener-li><input type=checkbox id=m-endocsv27devimplsexporter-listener-check>
<label for=m-endocsv27devimplsexporter-listener-check><a href=/en/docs/v2.7/dev/impls/exporter-listener/ title="ExporterListener Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsexporter-listener><span>ExporterListener</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplscluster-li><input type=checkbox id=m-endocsv27devimplscluster-check>
<label for=m-endocsv27devimplscluster-check><a href=/en/docs/v2.7/dev/impls/cluster/ title="Cluster Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplscluster><span>Cluster</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsrouter-li><input type=checkbox id=m-endocsv27devimplsrouter-check>
<label for=m-endocsv27devimplsrouter-check><a href=/en/docs/v2.7/dev/impls/router/ title="Router Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsrouter><span>Router</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsload-balance-li><input type=checkbox id=m-endocsv27devimplsload-balance-check>
<label for=m-endocsv27devimplsload-balance-check><a href=/en/docs/v2.7/dev/impls/load-balance/ title="LoadBalance Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsload-balance><span>LoadBalance</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsmerger-li><input type=checkbox id=m-endocsv27devimplsmerger-check>
<label for=m-endocsv27devimplsmerger-check><a href=/en/docs/v2.7/dev/impls/merger/ title="Merger Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsmerger><span>Merger</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsregistry-li><input type=checkbox id=m-endocsv27devimplsregistry-check>
<label for=m-endocsv27devimplsregistry-check><a href=/en/docs/v2.7/dev/impls/registry/ title="Registry Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsregistry><span>Registry</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsmonitor-li><input type=checkbox id=m-endocsv27devimplsmonitor-check>
<label for=m-endocsv27devimplsmonitor-check><a href=/en/docs/v2.7/dev/impls/monitor/ title="Monitor Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsmonitor><span>Monitor</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsextension-factory-li><input type=checkbox id=m-endocsv27devimplsextension-factory-check>
<label for=m-endocsv27devimplsextension-factory-check><a href=/en/docs/v2.7/dev/impls/extension-factory/ title="ExtensionFactory Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsextension-factory><span>ExtensionFactory</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsproxy-factory-li><input type=checkbox id=m-endocsv27devimplsproxy-factory-check>
<label for=m-endocsv27devimplsproxy-factory-check><a href=/en/docs/v2.7/dev/impls/proxy-factory/ title="ProxyFactory Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsproxy-factory><span>ProxyFactory</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplscompiler-li><input type=checkbox id=m-endocsv27devimplscompiler-check>
<label for=m-endocsv27devimplscompiler-check><a href=/en/docs/v2.7/dev/impls/compiler/ title="Compiler Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplscompiler><span>Compiler</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsconfig-center-li><input type=checkbox id=m-endocsv27devimplsconfig-center-check>
<label for=m-endocsv27devimplsconfig-center-check><a href=/en/docs/v2.7/dev/impls/config-center/ title="Dubbo Configuration Center Extensions" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsconfig-center><span>Config Center</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsdispatcher-li><input type=checkbox id=m-endocsv27devimplsdispatcher-check>
<label for=m-endocsv27devimplsdispatcher-check><a href=/en/docs/v2.7/dev/impls/dispatcher/ title="Dispatcher Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsdispatcher><span>Dispatcher</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsthreadpool-li><input type=checkbox id=m-endocsv27devimplsthreadpool-check>
<label for=m-endocsv27devimplsthreadpool-check><a href=/en/docs/v2.7/dev/impls/threadpool/ title="ThreadPool Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsthreadpool><span>ThreadPool</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsserialize-li><input type=checkbox id=m-endocsv27devimplsserialize-check>
<label for=m-endocsv27devimplsserialize-check><a href=/en/docs/v2.7/dev/impls/serialize/ title="Serialization Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsserialize><span>Serialization</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsremoting-li><input type=checkbox id=m-endocsv27devimplsremoting-check>
<label for=m-endocsv27devimplsremoting-check><a href=/en/docs/v2.7/dev/impls/remoting/ title="Transporter Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsremoting><span>Transporter</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsexchanger-li><input type=checkbox id=m-endocsv27devimplsexchanger-check>
<label for=m-endocsv27devimplsexchanger-check><a href=/en/docs/v2.7/dev/impls/exchanger/ title="Exchanger Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsexchanger><span>Exchanger</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsnetworker-li><input type=checkbox id=m-endocsv27devimplsnetworker-check>
<label for=m-endocsv27devimplsnetworker-check><a href=/en/docs/v2.7/dev/impls/networker/ title="Networker Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsnetworker><span>Networker</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplstelnet-handler-li><input type=checkbox id=m-endocsv27devimplstelnet-handler-check>
<label for=m-endocsv27devimplstelnet-handler-check><a href=/en/docs/v2.7/dev/impls/telnet-handler/ title="TelnetHandler Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplstelnet-handler><span>TelnetHandler</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsstatus-checker-li><input type=checkbox id=m-endocsv27devimplsstatus-checker-check>
<label for=m-endocsv27devimplsstatus-checker-check><a href=/en/docs/v2.7/dev/impls/status-checker/ title="StatusChecker Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsstatus-checker><span>StatusChecker</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplscontainer-li><input type=checkbox id=m-endocsv27devimplscontainer-check>
<label for=m-endocsv27devimplscontainer-check><a href=/en/docs/v2.7/dev/impls/container/ title="Container Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplscontainer><span>Container</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplspage-li><input type=checkbox id=m-endocsv27devimplspage-check>
<label for=m-endocsv27devimplspage-check><a href=/en/docs/v2.7/dev/impls/page/ title="PageHandler Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplspage><span>PageHandler</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplscache-li><input type=checkbox id=m-endocsv27devimplscache-check>
<label for=m-endocsv27devimplscache-check><a href=/en/docs/v2.7/dev/impls/cache/ title="Cache Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplscache><span>Cache</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplsvalidation-li><input type=checkbox id=m-endocsv27devimplsvalidation-check>
<label for=m-endocsv27devimplsvalidation-check><a href=/en/docs/v2.7/dev/impls/validation/ title="Validation Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplsvalidation><span>Validation</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devimplslogger-adapter-li><input type=checkbox id=m-endocsv27devimplslogger-adapter-check>
<label for=m-endocsv27devimplslogger-adapter-check><a href=/en/docs/v2.7/dev/impls/logger-adapter/ title="LoggerAdapter Extension" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devimplslogger-adapter><span>LoggerAdapter</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devcontract-li><input type=checkbox id=m-endocsv27devcontract-check>
<label for=m-endocsv27devcontract-check><a href=/en/docs/v2.7/dev/contract/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devcontract><span>Public Agreement</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devrelease-li><input type=checkbox id=m-endocsv27devrelease-check>
<label for=m-endocsv27devrelease-check><a href=/en/docs/v2.7/dev/release/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devrelease><span>Versions</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devchecklist-li><input type=checkbox id=m-endocsv27devchecklist-check>
<label for=m-endocsv27devchecklist-check><a href=/en/docs/v2.7/dev/checklist/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devchecklist><span>Checklist</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devcode-smell-li><input type=checkbox id=m-endocsv27devcode-smell-check>
<label for=m-endocsv27devcode-smell-check><a href=/en/docs/v2.7/dev/code-smell/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devcode-smell><span>Bad Smell</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devcoding-li><input type=checkbox id=m-endocsv27devcoding-check>
<label for=m-endocsv27devcoding-check><a href=/en/docs/v2.7/dev/coding/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devcoding><span>Coding Convention</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27devtck-li><input type=checkbox id=m-endocsv27devtck-check>
<label for=m-endocsv27devtck-check><a href=/en/docs/v2.7/dev/tck/ title="Compatibility Test" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27devtck><span>TCK</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27admin-li><input type=checkbox id=m-endocsv27admin-check>
<label for=m-endocsv27admin-check><a href=/en/docs/v2.7/admin/ title="Admin Guide" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27admin><span>Admin</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27adminops-li><input type=checkbox id=m-endocsv27adminops-check>
<label for=m-endocsv27adminops-check><a href=/en/docs/v2.7/admin/ops/ title="Dubbo Admin Guide" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27adminops><span>Dubbo Admin</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27adminopsfunctions-li><input type=checkbox id=m-endocsv27adminopsfunctions-check>
<label for=m-endocsv27adminopsfunctions-check><a href=/en/docs/v2.7/admin/ops/functions/ title="Dubbo Admin Functions" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27adminopsfunctions><span>Functions</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27adminopsintroduction-li><input type=checkbox id=m-endocsv27adminopsintroduction-check>
<label for=m-endocsv27adminopsintroduction-check><a href=/en/docs/v2.7/admin/ops/introduction/ title="Dubbo Admin Introductions" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27adminopsintroduction><span>Introductions</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27adminopssearch-li><input type=checkbox id=m-endocsv27adminopssearch-check>
<label for=m-endocsv27adminopssearch-check><a href=/en/docs/v2.7/admin/ops/search/ title="Service Search And Service Detail" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27adminopssearch><span>Search</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27adminopstest-li><input type=checkbox id=m-endocsv27adminopstest-check>
<label for=m-endocsv27adminopstest-check><a href=/en/docs/v2.7/admin/ops/test/ title="Service Test" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27adminopstest><span>Test</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27adminopsapidocs-li><input type=checkbox id=m-endocsv27adminopsapidocs-check>
<label for=m-endocsv27adminopsapidocs-check><a href=/en/docs/v2.7/admin/ops/apidocs/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27adminopsapidocs><span>API Docs&amp;Test</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27adminopsgovernance-li><input type=checkbox id=m-endocsv27adminopsgovernance-check>
<label for=m-endocsv27adminopsgovernance-check><a href=/en/docs/v2.7/admin/ops/governance/ title="Service Governance And Configuration Management" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27adminopsgovernance><span>Governance</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27adminopspinpoint-li><input type=checkbox id=m-endocsv27adminopspinpoint-check>
<label for=m-endocsv27adminopspinpoint-check><a href=/en/docs/v2.7/admin/ops/pinpoint/ title="Tracking with Pinpoint" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27adminopspinpoint><span>Pinpoint</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27adminopsskywalking-li><input type=checkbox id=m-endocsv27adminopsskywalking-check>
<label for=m-endocsv27adminopsskywalking-check><a href=/en/docs/v2.7/admin/ops/skywalking/ title="Tracing Dubbo service with Apache Skywalking" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27adminopsskywalking><span>Skywalking</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv27admininstall-li><input type=checkbox id=m-endocsv27admininstall-check>
<label for=m-endocsv27admininstall-check><a href=/en/docs/v2.7/admin/install/ title="Dubbo Installation Guide" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv27admininstall><span>Installation</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27admininstalladmin-console-li><input type=checkbox id=m-endocsv27admininstalladmin-console-check>
<label for=m-endocsv27admininstalladmin-console-check><a href=/en/docs/v2.7/admin/install/admin-console/ title="Install Admin Console" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27admininstalladmin-console><span>Admin Console</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27admininstallprovider-demo-li><input type=checkbox id=m-endocsv27admininstallprovider-demo-check>
<label for=m-endocsv27admininstallprovider-demo-check><a href=/en/docs/v2.7/admin/install/provider-demo/ title="Install Demo Provider" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27admininstallprovider-demo><span>Demo Provider</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27admininstallconsumer-demo-li><input type=checkbox id=m-endocsv27admininstallconsumer-demo-check>
<label for=m-endocsv27admininstallconsumer-demo-check><a href=/en/docs/v2.7/admin/install/consumer-demo/ title="Install Demo Consumer" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27admininstallconsumer-demo><span>Demo Consumer</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27admininstallzookeeper-li><input type=checkbox id=m-endocsv27admininstallzookeeper-check>
<label for=m-endocsv27admininstallzookeeper-check><a href=/en/docs/v2.7/admin/install/zookeeper/ title="install Zookeeper Configuration Center" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27admininstallzookeeper><span>Config Center</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27admininstallredis-li><input type=checkbox id=m-endocsv27admininstallredis-check>
<label for=m-endocsv27admininstallredis-check><a href=/en/docs/v2.7/admin/install/redis/ title="Install Redis Register Center" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27admininstallredis><span>Register Center</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv27admininstallmonitor-center-li><input type=checkbox id=m-endocsv27admininstallmonitor-center-check>
<label for=m-endocsv27admininstallmonitor-center-check><a href=/en/docs/v2.7/admin/install/monitor-center/ title="Install Simple monitor center" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv27admininstallmonitor-center><span>Monitor Center</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-endocsv30-li><input type=checkbox id=m-endocsv30-check>
<label for=m-endocsv30-check><a href=/en/docs/v3.0/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv30><span>Dubbo 3.0</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv30loadbalance-li><input type=checkbox id=m-endocsv30loadbalance-check>
<label for=m-endocsv30loadbalance-check><a href=/en/docs/v3.0/loadbalance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv30loadbalance><span>Load Balance</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv30whats-new-in-dubbo3-li><input type=checkbox id=m-endocsv30whats-new-in-dubbo3-check>
<label for=m-endocsv30whats-new-in-dubbo3-check><a href=/en/docs/v3.0/whats-new-in-dubbo3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv30whats-new-in-dubbo3><span>What's new in Apache Dubbo 3.x?</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv30references-li><input type=checkbox id=m-endocsv30references-check>
<label for=m-endocsv30references-check><a href=/en/docs/v3.0/references/ title="Function Reference Manual" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv30references><span>Reference</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv30referenceslifecycle-li><input type=checkbox id=m-endocsv30referenceslifecycle-check>
<label for=m-endocsv30referenceslifecycle-check><a href=/en/docs/v3.0/references/lifecycle/ title="Align with Kubernetes Lifecycle" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv30referenceslifecycle><span>Probe</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv30referenceslifecyclebrief-li><input type=checkbox id=m-endocsv30referenceslifecyclebrief-check>
<label for=m-endocsv30referenceslifecyclebrief-check><a href=/en/docs/v3.0/references/lifecycle/brief/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv30referenceslifecyclebrief><span>Brief</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv30referenceslifecycleliveness-li><input type=checkbox id=m-endocsv30referenceslifecycleliveness-check>
<label for=m-endocsv30referenceslifecycleliveness-check><a href=/en/docs/v3.0/references/lifecycle/liveness/ title="Liveness Probe" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv30referenceslifecycleliveness><span>Liveness</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv30referenceslifecyclereadiness-li><input type=checkbox id=m-endocsv30referenceslifecyclereadiness-check>
<label for=m-endocsv30referenceslifecyclereadiness-check><a href=/en/docs/v3.0/references/lifecycle/readiness/ title="Readiness Probe" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv30referenceslifecyclereadiness><span>Readiness</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv30referenceslifecyclestartup-li><input type=checkbox id=m-endocsv30referenceslifecyclestartup-check>
<label for=m-endocsv30referenceslifecyclestartup-check><a href=/en/docs/v3.0/references/lifecycle/startup/ title="Startup Probe" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv30referenceslifecyclestartup><span>Startup</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv30referencesgraalvm-li><input type=checkbox id=m-endocsv30referencesgraalvm-check>
<label for=m-endocsv30referencesgraalvm-check><a href=/en/docs/v3.0/references/graalvm/ title="graalvm support" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv30referencesgraalvm><span>support graalvm</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv30referencesgraalvmsupport-graalvm-li><input type=checkbox id=m-endocsv30referencesgraalvmsupport-graalvm-check>
<label for=m-endocsv30referencesgraalvmsupport-graalvm-check><a href=/en/docs/v3.0/references/graalvm/support-graalvm/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv30referencesgraalvmsupport-graalvm><span></span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv30languages-li><input type=checkbox id=m-endocsv30languages-check>
<label for=m-endocsv30languages-check><a href=/en/docs/v3.0/languages/ title="Multi-language implementation" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv30languages><span>multi-language</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv30languageserlang-li><input type=checkbox id=m-endocsv30languageserlang-check>
<label for=m-endocsv30languageserlang-check><a href=/en/docs/v3.0/languages/erlang/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv30languageserlang><span>Erlang</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv30languageserlangquick-start-li><input type=checkbox id=m-endocsv30languageserlangquick-start-check>
<label for=m-endocsv30languageserlangquick-start-check><a href=/en/docs/v3.0/languages/erlang/quick-start/ title="Quick start " class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv30languageserlangquick-start><span>Quick start</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv30languageserlangreference-li><input type=checkbox id=m-endocsv30languageserlangreference-check>
<label for=m-endocsv30languageserlangreference-check><a href=/en/docs/v3.0/languages/erlang/reference/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv30languageserlangreference><span>Consumer configuration</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv30languageserlangservice-li><input type=checkbox id=m-endocsv30languageserlangservice-check>
<label for=m-endocsv30languageserlangservice-check><a href=/en/docs/v3.0/languages/erlang/service/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv30languageserlangservice><span>Provider configuration</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv30languageserlangserialization-li><input type=checkbox id=m-endocsv30languageserlangserialization-check>
<label for=m-endocsv30languageserlangserialization-check><a href=/en/docs/v3.0/languages/erlang/serialization/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv30languageserlangserialization><span>Serialized configuration items</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocsv30languagesgolang-li><input type=checkbox id=m-endocsv30languagesgolang-check>
<label for=m-endocsv30languagesgolang-check><a href=/en/docs/v3.0/languages/golang/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv30languagesgolang><span>golang</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv30languagesgolanggo-specific-li><input type=checkbox id=m-endocsv30languagesgolanggo-specific-check>
<label for=m-endocsv30languagesgolanggo-specific-check><a href=/en/docs/v3.0/languages/golang/go-specific/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv30languagesgolanggo-specific><span>Go language definition service</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv30languagesgolangquick-start-li><input type=checkbox id=m-endocsv30languagesgolangquick-start-check>
<label for=m-endocsv30languagesgolangquick-start-check><a href=/en/docs/v3.0/languages/golang/quick-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocsv30languagesgolangquick-start><span>Go quick start</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsv30languagesrust-li><input type=checkbox id=m-endocsv30languagesrust-check>
<label for=m-endocsv30languagesrust-check><a href=/en/docs3-v2/rust-sdk/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsv30languagesrust><span>Rust</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocscontribution-guidelines-li><input type=checkbox id=m-endocscontribution-guidelines-check>
<label for=m-endocscontribution-guidelines-check><a href=/en/docs/contribution-guidelines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocscontribution-guidelines><span>Contribution Guideline</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocscontribution-guidelinescontributor-li><input type=checkbox id=m-endocscontribution-guidelinescontributor-check>
<label for=m-endocscontribution-guidelinescontributor-check><a href=/en/docs/contribution-guidelines/contributor/ title="Contributor Guide" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocscontribution-guidelinescontributor><span>Contributor</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocscontribution-guidelinescontributorbecome-a-committer_dev-li><input type=checkbox id=m-endocscontribution-guidelinescontributorbecome-a-committer_dev-check>
<label for=m-endocscontribution-guidelinescontributorbecome-a-committer_dev-check><a href=/en/docs/contribution-guidelines/contributor/become-a-committer_dev/ title="How to become a Dubbo committer" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocscontribution-guidelinescontributorbecome-a-committer_dev><span>How To</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocscontribution-guidelinescontributorcla-signing-guide_dev-li><input type=checkbox id=m-endocscontribution-guidelinescontributorcla-signing-guide_dev-check>
<label for=m-endocscontribution-guidelinescontributorcla-signing-guide_dev-check><a href=/en/docs/contribution-guidelines/contributor/cla-signing-guide_dev/ title="CLA Signing Guide" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocscontribution-guidelinescontributorcla-signing-guide_dev><span>CLA</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocscontribution-guidelinescontributornew-contributor-guide_dev-li><input type=checkbox id=m-endocscontribution-guidelinescontributornew-contributor-guide_dev-check>
<label for=m-endocscontribution-guidelinescontributornew-contributor-guide_dev-check><a href=/en/docs/contribution-guidelines/contributor/new-contributor-guide_dev/ title="New Contributor Guide" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocscontribution-guidelinescontributornew-contributor-guide_dev><span>New Contributor</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocscontribution-guidelinescontributormailing-list-subscription-guide_dev-li><input type=checkbox id=m-endocscontribution-guidelinescontributormailing-list-subscription-guide_dev-check>
<label for=m-endocscontribution-guidelinescontributormailing-list-subscription-guide_dev-check><a href=/en/docs/contribution-guidelines/contributor/mailing-list-subscription-guide_dev/ title="Mailing List Subscription Guide" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocscontribution-guidelinescontributormailing-list-subscription-guide_dev><span>Mailing List</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocscontribution-guidelinescontributorsoftware-donation-guide_dev-li><input type=checkbox id=m-endocscontribution-guidelinescontributorsoftware-donation-guide_dev-check>
<label for=m-endocscontribution-guidelinescontributorsoftware-donation-guide_dev-check><a href=/en/docs/contribution-guidelines/contributor/software-donation-guide_dev/ title="Software Donation Guide" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocscontribution-guidelinescontributorsoftware-donation-guide_dev><span>Donation</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocscontribution-guidelinescontributorreporting-security-issues_dev-li><input type=checkbox id=m-endocscontribution-guidelinescontributorreporting-security-issues_dev-check>
<label for=m-endocscontribution-guidelinescontributorreporting-security-issues_dev-check><a href=/en/docs/contribution-guidelines/contributor/reporting-security-issues_dev/ title="Reporting Security Issues" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocscontribution-guidelinescontributorreporting-security-issues_dev><span>Security Issue</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocscontribution-guidelinescontributordubbo-extension-guide_dev-li><input type=checkbox id=m-endocscontribution-guidelinescontributordubbo-extension-guide_dev-check>
<label for=m-endocscontribution-guidelinescontributordubbo-extension-guide_dev-check><a href=/en/docs/contribution-guidelines/contributor/dubbo-extension-guide_dev/ title="Extension Guide" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocscontribution-guidelinescontributordubbo-extension-guide_dev><span>Developing Extension</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocscontribution-guidelinescontributortest-coverage-guide_dev-li><input type=checkbox id=m-endocscontribution-guidelinescontributortest-coverage-guide_dev-check>
<label for=m-endocscontribution-guidelinescontributortest-coverage-guide_dev-check><a href=/en/docs/contribution-guidelines/contributor/test-coverage-guide_dev/ title="Test Coverage Guide" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocscontribution-guidelinescontributortest-coverage-guide_dev><span>Test Coverage</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-endocscontribution-guidelinescommitter-li><input type=checkbox id=m-endocscontribution-guidelinescommitter-check>
<label for=m-endocscontribution-guidelinescommitter-check><a href=/en/docs/contribution-guidelines/committer/ title="Committer Guide" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocscontribution-guidelinescommitter><span>Committer</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocscontribution-guidelinescommitternew-committer-guide_dev-li><input type=checkbox id=m-endocscontribution-guidelinescommitternew-committer-guide_dev-check>
<label for=m-endocscontribution-guidelinescommitternew-committer-guide_dev-check><a href=/en/docs/contribution-guidelines/committer/new-committer-guide_dev/ title="Apache Committer Guide" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocscontribution-guidelinescommitternew-committer-guide_dev><span>Committer Guide</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocscontribution-guidelinescommitterrelease-guide_dev-li><input type=checkbox id=m-endocscontribution-guidelinescommitterrelease-guide_dev-check>
<label for=m-endocscontribution-guidelinescommitterrelease-guide_dev-check><a href=/en/docs/contribution-guidelines/committer/release-guide_dev/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocscontribution-guidelinescommitterrelease-guide_dev><span>Release Guide</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocscontribution-guidelinescommitterlabel-an-issue-guide_dev-li><input type=checkbox id=m-endocscontribution-guidelinescommitterlabel-an-issue-guide_dev-check>
<label for=m-endocscontribution-guidelinescommitterlabel-an-issue-guide_dev-check><a href=/en/docs/contribution-guidelines/committer/label-an-issue-guide_dev/ title="Label an Issue" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocscontribution-guidelinescommitterlabel-an-issue-guide_dev><span>Issue Guide</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocscontribution-guidelinescommitterwebsite-guide_dev-li><input type=checkbox id=m-endocscontribution-guidelinescommitterwebsite-guide_dev-check>
<label for=m-endocscontribution-guidelinescommitterwebsite-guide_dev-check><a href=/en/docs/contribution-guidelines/committer/website-guide_dev/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocscontribution-guidelinescommitterwebsite-guide_dev><span>Website Guide</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocscontribution-guidelinescommitterapache-dubbo-page_dev-li><input type=checkbox id=m-endocscontribution-guidelinescommitterapache-dubbo-page_dev-check>
<label for=m-endocscontribution-guidelinescommitterapache-dubbo-page_dev-check><a href=/en/docs/contribution-guidelines/committer/apache-dubbo-page_dev/ title="Apache Official Dubbo Page Maintenance" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-endocscontribution-guidelinescommitterapache-dubbo-page_dev><span>Official Page</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-endocsfaq-li><input type=checkbox id=m-endocsfaq-check>
<label for=m-endocsfaq-check><a href=/en/docs/faq/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-endocsfaq><span>FAQ - Frequently Asked Questions</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/docs/>Documentation</a></li><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/en/docs/v2.7/>Dubbo 2.7</a></li><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/en/docs/v2.7/dev/>Developer</a></li><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/en/docs/v2.7/dev/principals/>Design Principals</a></li><li class="breadcrumb-item active" aria-current=page><a href=https://cn.dubbo.apache.org/en/docs/v2.7/dev/principals/dummy/ aria-disabled=true class="btn-link disabled">Fool-proof</a></li></ol></nav><div class=td-content><h1>"Fool-proof" Design</h1><header class=article-meta></header><blockquote><p><a href=http://javatar.iteye.com/blog/804187>http://javatar.iteye.com/blog/804187</a></p></blockquote><p>Recently I was feeling stupid because I solved too many stupid problems. The service framework is becoming more widely used. Every day, I have to help the endpoint user to resolve problems. Gradually, it is found that most of the problems are configuration errors, or duplicated files or classes, or network failure. So I prepare to add some &ldquo;fool-proof&rdquo; design to the further version. It may be very simple, but it is still a little help for troubleshooting speed. I hope that I can throw a brick to attract jade, and everyone can help to come up with more preventive measures to share.</p><h2 id=check-for-duplicated-jars>Check for duplicated jars</h2><p>The most annoying problem is that, if we have several jars with different version number at the same time, there will be a problem. Imagine that, a new version of the Class A may invoke a old version of the Class B, it&rsquo;s related to the JVM loading order. The problem may encounter occasionally and hard to resolve. So the first, let&rsquo;s try to avoid it. For each jar package, pick a class that will be loaded, check it for duplication for example:</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>static</span> {
</span></span><span style=display:flex><span> Duplicate.checkDuplicate(Xxx.class);
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>Utility class for check duplication:</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> <span style=color:#268bd2>final</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>Duplicate</span> {
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>private</span> <span style=color:#268bd2>Duplicate</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>static</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>checkDuplicate</span>(Class cls) {
</span></span><span style=display:flex><span> checkDuplicate(cls.getName().replace(<span style=color:#2aa198>&#39;.&#39;</span>, <span style=color:#2aa198>&#39;/&#39;</span>) <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;.class&#34;</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>static</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>checkDuplicate</span>(String path) {
</span></span><span style=display:flex><span> <span style=color:#719e07>try</span> {
</span></span><span style=display:flex><span> <span style=color:#586e75>// search from ClassPath</span>
</span></span><span style=display:flex><span> Enumeration urls <span style=color:#719e07>=</span> Thread.currentThread().getContextClassLoader().getResources(path);
</span></span><span style=display:flex><span> Set files <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> HashSet();
</span></span><span style=display:flex><span> <span style=color:#719e07>while</span> (urls.hasMoreElements()) {
</span></span><span style=display:flex><span> URL url <span style=color:#719e07>=</span> urls.nextElement();
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (url <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span>) {
</span></span><span style=display:flex><span> String file <span style=color:#719e07>=</span> url.getFile();
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (file <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>&amp;</span>amp;<span style=color:#719e07>&amp;</span>amp; file.length() <span style=color:#719e07>&amp;</span>gt; 0) {
</span></span><span style=display:flex><span> files.add(file);
</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>// if there are more than one indicates duplication</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (files.size() <span style=color:#719e07>&amp;</span>gt; 1) {
</span></span><span style=display:flex><span> logger.error(<span style=color:#2aa198>&#34;Duplicate class &#34;</span> <span style=color:#719e07>+</span> path <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34; in &#34;</span> <span style=color:#719e07>+</span> files.size() <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34; jar &#34;</span> <span style=color:#719e07>+</span> files);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> } <span style=color:#719e07>catch</span> (Throwable e) { <span style=color:#586e75>// safe guard</span>
</span></span><span style=display:flex><span> logger.error(e.getMessage(), e);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h2 id=check-for-duplicate-configuration-files>Check for duplicate configuration files</h2><p>It is also a frequently encountered problem that the configuration file is loaded incorrectly. Users often complain that they have the right configuration but program says something is wrong. After some troubleshooting, found that the configuration file is not even loaded. Many products put a default configuration file under classpath, if there are several, usually the first one loaded by JVM is effective. In order not to be bothered by such problem, just like checking duplicate jars, add this:</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>Duplicate.checkDuplicate(<span style=color:#2aa198>&#34;xxx.properties&#34;</span>);
</span></span></code></pre></div><h2 id=check-for-optional-configuration>Check for optional configuration</h2><p>The required configuration is estimated to be checked by everyone, because without it the program may not even start. However, for some optional parameters, some checks should also be made. For example, the service framework allows the service consumers and service providers to be associated with the registry, and allows direct configuring the service provider address to point-to-point direct connect. At this time, the registry address is optional, but if there is no point-to-point direct connect configured, the registry center address must be matched, and this time you have to check accordingly.</p><h2 id=provide-error-message-with-a-solution-if-possible>Provide error message with a solution if possible</h2><p>It&rsquo;s hard to troubleshooting problem with a simple error message which has no detail information. For example, the last time I encountered a &ldquo;Failed to get session&rdquo; exception, just the few words. I&rsquo;m wondering which session is wrong? What is the reason Failed? It makes me crazy, the problem happens in an production environment and it&rsquo;s hard to reproduce. The exception should have some basic context information, such as author info, operation system, failed reason. The best exception information should be given a solution, such as the above: &ldquo;From 10.20.16.3 to 10.20.130.20:20880 The network is unreachable. Please use telnet 10.20.130.20 20880 to test the network at 10.20.16.3. If it is called across data center, it may be blocked by the firewall. Please contact SA to grant access permission.&rdquo; etc. The above can even judge whether it is cross data center based on IP address. Another example is the spring-web context loading, If spring is not started when getBean, spring will report an error. The error message says: &ldquo;Please add: <code>&lt;listener>...&lt;init-param>...</code>&rdquo;, just copy and paste. We should learn from it. You can deliberately make a common mistake and see if you can solve the problem yourself by the error message. Or we can write some solution of common problems in error message.</p><h2 id=and-also-the-environment-information>And also the environment information</h2><p>Every time an application error occurs, the developer or QA will send the error message and ask the reason. At this time, I will ask some question again, which version is used? Is it a production environment or a development environment? Which registry center? Which project is it? Which machine? And which service? The problem is, some developers or QA can&rsquo;t tell the difference, it waste me a lot of time. So, it is best to log some environment information, we can make a wrapper. Decorate the Logger interface such as:</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> <span style=color:#dc322f>void</span> <span style=color:#268bd2>error</span>(String msg, Throwable e) {
</span></span><span style=display:flex><span> delegate.error(msg <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34; on server &#34;</span> <span style=color:#719e07>+</span> InetAddress.getLocalHost() <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34; using version &#34;</span> <span style=color:#719e07>+</span> Version.getVersion(), e);
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>Utility class for retrieve version:</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> <span style=color:#268bd2>final</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>Version</span> {
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>private</span> <span style=color:#268bd2>Version</span>() {}
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>private</span> <span style=color:#268bd2>static</span> <span style=color:#268bd2>final</span> Logger logger <span style=color:#719e07>=</span> LoggerFactory.getLogger(Version.class);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>private</span> <span style=color:#268bd2>static</span> <span style=color:#268bd2>final</span> Pattern VERSION_PATTERN <span style=color:#719e07>=</span> Pattern.compile(<span style=color:#2aa198>&#34;([0-9][0-9\\.\\-]*)\\.jar&#34;</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>private</span> <span style=color:#268bd2>static</span> <span style=color:#268bd2>final</span> String VERSION <span style=color:#719e07>=</span> getVersion(Version.class, <span style=color:#2aa198>&#34;2.0.0&#34;</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>static</span> String <span style=color:#268bd2>getVersion</span>(){
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> VERSION;
</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>static</span> String <span style=color:#268bd2>getVersion</span>(Class cls, String defaultVersion) {
</span></span><span style=display:flex><span> <span style=color:#719e07>try</span> {
</span></span><span style=display:flex><span> <span style=color:#586e75>// search version number from MANIFEST.MF </span>
</span></span><span style=display:flex><span> String version <span style=color:#719e07>=</span> cls.getPackage().getImplementationVersion();
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (version <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>||</span> version.length() <span style=color:#719e07>==</span> 0) {
</span></span><span style=display:flex><span> version <span style=color:#719e07>=</span> cls.getPackage().getSpecificationVersion();
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (version <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>||</span> version.length() <span style=color:#719e07>==</span> 0) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// if not found, extract from jar name</span>
</span></span><span style=display:flex><span> String file <span style=color:#719e07>=</span> cls.getProtectionDomain().getCodeSource().getLocation().getFile();
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (file <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>&amp;</span>amp;<span style=color:#719e07>&amp;</span>amp; file.length() <span style=color:#719e07>&amp;</span>gt; 0 <span style=color:#719e07>&amp;</span>amp;<span style=color:#719e07>&amp;</span>amp; file.endsWith(<span style=color:#2aa198>&#34;.jar&#34;</span>)) {
</span></span><span style=display:flex><span> Matcher matcher <span style=color:#719e07>=</span> VERSION_PATTERN.matcher(file);
</span></span><span style=display:flex><span> <span style=color:#719e07>while</span> (matcher.find() <span style=color:#719e07>&amp;</span>amp;<span style=color:#719e07>&amp;</span>amp; matcher.groupCount() <span style=color:#719e07>&amp;</span>gt; 0) {
</span></span><span style=display:flex><span> version <span style=color:#719e07>=</span> matcher.group(1);
</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>// return version, return default if null</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> version <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>||</span> version.length() <span style=color:#719e07>==</span> 0 <span style=color:#719e07>?</span> defaultVersion : version;
</span></span><span style=display:flex><span> } <span style=color:#719e07>catch</span> (Throwable e) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// ignore exception, return default version</span>
</span></span><span style=display:flex><span> logger.error(e.getMessage(), e);
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> defaultVersion;
</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><h2 id=dump-before-kill>Dump before kill</h2><p>Every time there is a problem with the production environment, everyone panics. Usually the most direct way is to rollback and restart, to reduce the downtime. So that the scene is destroyed, and it&rsquo;s hard to check the problem afterwards. Some problem is hard to reproduce in development environment and may happen under hard pressure. It is unlikely let the developer or Appops manually backup all the data before. Therefore, it is best to call dump before the kill script to backup automatically and avoid mistake. Dump script for example:</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-sh data-lang=sh><span style=display:flex><span><span style=color:#268bd2>JAVA_HOME</span><span style=color:#719e07>=</span>/usr/java
</span></span><span style=display:flex><span><span style=color:#268bd2>OUTPUT_HOME</span><span style=color:#719e07>=</span>~/output
</span></span><span style=display:flex><span><span style=color:#268bd2>DEPLOY_HOME</span><span style=color:#719e07>=</span><span style=color:#586e75>`</span>dirname <span style=color:#268bd2>$0</span><span style=color:#586e75>`</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>HOST_NAME</span><span style=color:#719e07>=</span><span style=color:#586e75>`</span>hostname<span style=color:#586e75>`</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>DUMP_PIDS</span><span style=color:#719e07>=</span><span style=color:#586e75>`</span>ps --no-heading -C java -f --width <span style=color:#2aa198>1000</span> | grep <span style=color:#2aa198>&#34;</span><span style=color:#268bd2>$DEPLOY_HOME</span><span style=color:#2aa198>&#34;</span> |awk <span style=color:#2aa198>&#39;{print $2}&#39;</span><span style=color:#586e75>`</span>
</span></span><span style=display:flex><span><span style=color:#719e07>if</span> <span style=color:#719e07>[</span> -z <span style=color:#2aa198>&#34;</span><span style=color:#268bd2>$DUMP_PIDS</span><span style=color:#2aa198>&#34;</span> <span style=color:#719e07>]</span>; <span style=color:#719e07>then</span>
</span></span><span style=display:flex><span> <span style=color:#b58900>echo</span> <span style=color:#2aa198>&#34;The server </span><span style=color:#268bd2>$HOST_NAME</span><span style=color:#2aa198> is not started!&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#b58900>exit</span> 1;
</span></span><span style=display:flex><span><span style=color:#719e07>fi</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>DUMP_ROOT</span><span style=color:#719e07>=</span><span style=color:#268bd2>$OUTPUT_HOME</span>/dump
</span></span><span style=display:flex><span><span style=color:#719e07>if</span> <span style=color:#719e07>[</span> ! -d <span style=color:#268bd2>$DUMP_ROOT</span> <span style=color:#719e07>]</span>; <span style=color:#719e07>then</span>
</span></span><span style=display:flex><span> mkdir <span style=color:#268bd2>$DUMP_ROOT</span>
</span></span><span style=display:flex><span><span style=color:#719e07>fi</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>DUMP_DATE</span><span style=color:#719e07>=</span><span style=color:#586e75>`</span>date +%Y%m%d%H%M%S<span style=color:#586e75>`</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>DUMP_DIR</span><span style=color:#719e07>=</span><span style=color:#268bd2>$DUMP_ROOT</span>/dump-<span style=color:#268bd2>$DUMP_DATE</span>
</span></span><span style=display:flex><span><span style=color:#719e07>if</span> <span style=color:#719e07>[</span> ! -d <span style=color:#268bd2>$DUMP_DIR</span> <span style=color:#719e07>]</span>; <span style=color:#719e07>then</span>
</span></span><span style=display:flex><span> mkdir <span style=color:#268bd2>$DUMP_DIR</span>
</span></span><span style=display:flex><span><span style=color:#719e07>fi</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;Dumping the server </span><span style=color:#268bd2>$HOST_NAME</span><span style=color:#2aa198> ...\c&#34;</span>
</span></span><span style=display:flex><span><span style=color:#719e07>for</span> PID in <span style=color:#268bd2>$DUMP_PIDS</span> ; <span style=color:#719e07>do</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>$JAVA_HOME</span>/bin/jstack <span style=color:#268bd2>$PID</span> &gt; <span style=color:#268bd2>$DUMP_DIR</span>/jstack-<span style=color:#268bd2>$PID</span>.dump 2&gt;&amp;<span style=color:#2aa198>1</span>
</span></span><span style=display:flex><span> <span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;.\c&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>$JAVA_HOME</span>/bin/jinfo <span style=color:#268bd2>$PID</span> &gt; <span style=color:#268bd2>$DUMP_DIR</span>/jinfo-<span style=color:#268bd2>$PID</span>.dump 2&gt;&amp;<span style=color:#2aa198>1</span>
</span></span><span style=display:flex><span> <span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;.\c&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>$JAVA_HOME</span>/bin/jstat -gcutil <span style=color:#268bd2>$PID</span> &gt; <span style=color:#268bd2>$DUMP_DIR</span>/jstat-gcutil-<span style=color:#268bd2>$PID</span>.dump 2&gt;&amp;<span style=color:#2aa198>1</span>
</span></span><span style=display:flex><span> <span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;.\c&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>$JAVA_HOME</span>/bin/jstat -gccapacity <span style=color:#268bd2>$PID</span> &gt; <span style=color:#268bd2>$DUMP_DIR</span>/jstat-gccapacity-<span style=color:#268bd2>$PID</span>.dump 2&gt;&amp;<span style=color:#2aa198>1</span>
</span></span><span style=display:flex><span> <span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;.\c&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>$JAVA_HOME</span>/bin/jmap <span style=color:#268bd2>$PID</span> &gt; <span style=color:#268bd2>$DUMP_DIR</span>/jmap-<span style=color:#268bd2>$PID</span>.dump 2&gt;&amp;<span style=color:#2aa198>1</span>
</span></span><span style=display:flex><span> <span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;.\c&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>$JAVA_HOME</span>/bin/jmap -heap <span style=color:#268bd2>$PID</span> &gt; <span style=color:#268bd2>$DUMP_DIR</span>/jmap-heap-<span style=color:#268bd2>$PID</span>.dump 2&gt;&amp;<span style=color:#2aa198>1</span>
</span></span><span style=display:flex><span> <span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;.\c&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>$JAVA_HOME</span>/bin/jmap -histo <span style=color:#268bd2>$PID</span> &gt; <span style=color:#268bd2>$DUMP_DIR</span>/jmap-histo-<span style=color:#268bd2>$PID</span>.dump 2&gt;&amp;<span style=color:#2aa198>1</span>
</span></span><span style=display:flex><span> <span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;.\c&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> <span style=color:#719e07>[</span> -r /usr/sbin/lsof <span style=color:#719e07>]</span>; <span style=color:#719e07>then</span>
</span></span><span style=display:flex><span> /usr/sbin/lsof -p <span style=color:#268bd2>$PID</span> &gt; <span style=color:#268bd2>$DUMP_DIR</span>/lsof-<span style=color:#268bd2>$PID</span>.dump
</span></span><span style=display:flex><span> <span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;.\c&#34;</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>fi</span>
</span></span><span style=display:flex><span><span style=color:#719e07>done</span>
</span></span><span style=display:flex><span><span style=color:#719e07>if</span> <span style=color:#719e07>[</span> -r /usr/bin/sar <span style=color:#719e07>]</span>; <span style=color:#719e07>then</span>
</span></span><span style=display:flex><span>/usr/bin/sar &gt; <span style=color:#268bd2>$DUMP_DIR</span>/sar.dump
</span></span><span style=display:flex><span><span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;.\c&#34;</span>
</span></span><span style=display:flex><span><span style=color:#719e07>fi</span>
</span></span><span style=display:flex><span><span style=color:#719e07>if</span> <span style=color:#719e07>[</span> -r /usr/bin/uptime <span style=color:#719e07>]</span>; <span style=color:#719e07>then</span>
</span></span><span style=display:flex><span>/usr/bin/uptime &gt; <span style=color:#268bd2>$DUMP_DIR</span>/uptime.dump
</span></span><span style=display:flex><span><span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;.\c&#34;</span>
</span></span><span style=display:flex><span><span style=color:#719e07>fi</span>
</span></span><span style=display:flex><span><span style=color:#719e07>if</span> <span style=color:#719e07>[</span> -r /usr/bin/free <span style=color:#719e07>]</span>; <span style=color:#719e07>then</span>
</span></span><span style=display:flex><span>/usr/bin/free -t &gt; <span style=color:#268bd2>$DUMP_DIR</span>/free.dump
</span></span><span style=display:flex><span><span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;.\c&#34;</span>
</span></span><span style=display:flex><span><span style=color:#719e07>fi</span>
</span></span><span style=display:flex><span><span style=color:#719e07>if</span> <span style=color:#719e07>[</span> -r /usr/bin/vmstat <span style=color:#719e07>]</span>; <span style=color:#719e07>then</span>
</span></span><span style=display:flex><span>/usr/bin/vmstat &gt; <span style=color:#268bd2>$DUMP_DIR</span>/vmstat.dump
</span></span><span style=display:flex><span><span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;.\c&#34;</span>
</span></span><span style=display:flex><span><span style=color:#719e07>fi</span>
</span></span><span style=display:flex><span><span style=color:#719e07>if</span> <span style=color:#719e07>[</span> -r /usr/bin/mpstat <span style=color:#719e07>]</span>; <span style=color:#719e07>then</span>
</span></span><span style=display:flex><span>/usr/bin/mpstat &gt; <span style=color:#268bd2>$DUMP_DIR</span>/mpstat.dump
</span></span><span style=display:flex><span><span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;.\c&#34;</span>
</span></span><span style=display:flex><span><span style=color:#719e07>fi</span>
</span></span><span style=display:flex><span><span style=color:#719e07>if</span> <span style=color:#719e07>[</span> -r /usr/bin/iostat <span style=color:#719e07>]</span>; <span style=color:#719e07>then</span>
</span></span><span style=display:flex><span>/usr/bin/iostat &gt; <span style=color:#268bd2>$DUMP_DIR</span>/iostat.dump
</span></span><span style=display:flex><span><span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;.\c&#34;</span>
</span></span><span style=display:flex><span><span style=color:#719e07>fi</span>
</span></span><span style=display:flex><span><span style=color:#719e07>if</span> <span style=color:#719e07>[</span> -r /bin/netstat <span style=color:#719e07>]</span>; <span style=color:#719e07>then</span>
</span></span><span style=display:flex><span>/bin/netstat &gt; <span style=color:#268bd2>$DUMP_DIR</span>/netstat.dump
</span></span><span style=display:flex><span><span style=color:#b58900>echo</span> -e <span style=color:#2aa198>&#34;.\c&#34;</span>
</span></span><span style=display:flex><span><span style=color:#719e07>fi</span>
</span></span><span style=display:flex><span><span style=color:#b58900>echo</span> <span style=color:#2aa198>&#34;OK!&#34;</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 December 22, 2020: <a href=https://github.com/apache/dubbo-website/commit/6e41905afab4de2587b93c0da13729d50d757830>clean up website (6e41905afab)</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/docs/v2.7/dev/principals/dummy.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/docs/v2.7/dev/principals/dummy.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=%20&amp;#34;Fool-proof&amp;#34;%20Design" 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=#check-for-duplicated-jars>Check for duplicated jars</a></li><li><a href=#check-for-duplicate-configuration-files>Check for duplicate configuration files</a></li><li><a href=#check-for-optional-configuration>Check for optional configuration</a></li><li><a href=#provide-error-message-with-a-solution-if-possible>Provide error message with a solution if possible</a></li><li><a href=#and-also-the-environment-information>And also the environment information</a></li><li><a href=#dump-before-kill>Dump before kill</a></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>