blob: 122e57e03b770b52fca8a274a1e360ad20f530c7 [file] [log] [blame]
<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS content="INDEX, FOLLOW"><link rel=canonical href=https://cn.dubbo.apache.org/zh-cn/blog/2019/10/28/dubbo-%E5%9C%A8%E8%B7%A8%E8%AF%AD%E8%A8%80%E5%92%8C%E5%8D%8F%E8%AE%AE%E7%A9%BF%E9%80%8F%E6%80%A7%E6%96%B9%E5%90%91%E4%B8%8A%E7%9A%84%E6%8E%A2%E7%B4%A2%E6%94%AF%E6%8C%81-http/2-grpc-%E5%92%8C-protobuf/><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>Dubbo 在跨语言和协议穿透性方向上的探索:支持 HTTP/2 gRPC 和 Protobuf | Apache Dubbo</title><meta property="og:title" content="Dubbo 在跨语言和协议穿透性方向上的探索:支持 HTTP/2 gRPC 和 Protobuf">
<meta property="og:description" content="本文整理自刘军在 Dubbo 成都 meetup 上分享的《Dubbo 在多语言和协议穿透性方向上的探索》。
"><meta property="og:type" content="article"><meta property="og:url" content="https://cn.dubbo.apache.org/zh-cn/blog/2019/10/28/dubbo-%E5%9C%A8%E8%B7%A8%E8%AF%AD%E8%A8%80%E5%92%8C%E5%8D%8F%E8%AE%AE%E7%A9%BF%E9%80%8F%E6%80%A7%E6%96%B9%E5%90%91%E4%B8%8A%E7%9A%84%E6%8E%A2%E7%B4%A2%E6%94%AF%E6%8C%81-http/2-grpc-%E5%92%8C-protobuf/"><meta property="article:section" content="blog"><meta property="article:published_time" content="2019-10-28T00:00:00+00:00"><meta property="article:modified_time" content="2024-04-28T21:45:27+08:00"><meta itemprop=name content="Dubbo 在跨语言和协议穿透性方向上的探索:支持 HTTP/2 gRPC 和 Protobuf"><meta itemprop=description content="本文整理自刘军在 Dubbo 成都 meetup 上分享的《Dubbo 在多语言和协议穿透性方向上的探索》。
"><meta itemprop=datePublished content="2019-10-28T00:00:00+00:00"><meta itemprop=dateModified content="2024-04-28T21:45:27+08:00"><meta itemprop=wordCount content="1503"><meta itemprop=keywords content="Java,"><meta name=twitter:card content="summary"><meta name=twitter:title content="Dubbo 在跨语言和协议穿透性方向上的探索:支持 HTTP/2 gRPC 和 Protobuf"><meta name=twitter:description content="本文整理自刘军在 Dubbo 成都 meetup 上分享的《Dubbo 在多语言和协议穿透性方向上的探索》。
"><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="本文整理自刘军在 Dubbo 成都 meetup 上分享的《Dubbo 在多语言和协议穿透性方向上的探索》。
"><meta property="og:description" content="本文整理自刘军在 Dubbo 成都 meetup 上分享的《Dubbo 在多语言和协议穿透性方向上的探索》。
"><meta name=twitter:description content="本文整理自刘军在 Dubbo 成都 meetup 上分享的《Dubbo 在多语言和协议穿透性方向上的探索》。
"><meta property="og:url" content="https://cn.dubbo.apache.org/zh-cn/blog/2019/10/28/dubbo-%E5%9C%A8%E8%B7%A8%E8%AF%AD%E8%A8%80%E5%92%8C%E5%8D%8F%E8%AE%AE%E7%A9%BF%E9%80%8F%E6%80%A7%E6%96%B9%E5%90%91%E4%B8%8A%E7%9A%84%E6%8E%A2%E7%B4%A2%E6%94%AF%E6%8C%81-http/2-grpc-%E5%92%8C-protobuf/"><meta property="og:title" content="Dubbo 在跨语言和协议穿透性方向上的探索:支持 HTTP/2 gRPC 和 Protobuf"><meta name=twitter:title content="Dubbo 在跨语言和协议穿透性方向上的探索:支持 HTTP/2 gRPC 和 Protobuf"><meta name=twitter:image:alt content="Apache Dubbo"><meta property="og:image" content="/imgs/blog/grpc/dubbo-ptotocol.png"><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=/zh-cn/><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=/zh-cn/overview/home/><span>文档</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class="nav-link active" href=/zh-cn/blog/><span class=active>博客</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/download/><span>版本发布</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/contact/><span>联系社区</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 mr-4 mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/github/><span>Github</span><i class='fa-brands fa-github'></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>中文</a><div class="dropdown-menu dropdown-menu-right" aria-labelledby=navbarDropdownMenuLink><a class=dropdown-item href=/en/>English</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-zh-cnblog20191028dubbo-e59ca8e8b7a8e8afade8a880e5928ce58d8fe8aeaee7a9bfe9808fe680a7e696b9e59091e4b88ae79a84e68ea2e7b4a2e694afe68c81-http2-grpc-e5928c-protobuf").addClass("active"),$("#td-section-nav #m-zh-cnblog20191028dubbo-e59ca8e8b7a8e8afade8a880e5928ce58d8fe8aeaee7a9bfe9808fe680a7e696b9e59091e4b88ae79a84e68ea2e7b4a2e694afe68c81-http2-grpc-e5928c-protobuf-li span").addClass("td-sidebar-nav-active-item"),$("#td-section-nav #m-zh-cnblog20191028dubbo-e59ca8e8b7a8e8afade8a880e5928ce58d8fe8aeaee7a9bfe9808fe680a7e696b9e59091e4b88ae79a84e68ea2e7b4a2e694afe68c81-http2-grpc-e5928c-protobuf").parents("li").addClass("active-path"),$("#td-section-nav li.active-path").addClass("show"),$("#td-section-nav li.active-path").children("input").prop("checked",!0),$("#td-section-nav #m-zh-cnblog20191028dubbo-e59ca8e8b7a8e8afade8a880e5928ce58d8fe8aeaee7a9bfe9808fe680a7e696b9e59091e4b88ae79a84e68ea2e7b4a2e694afe68c81-http2-grpc-e5928c-protobuf-li").siblings("li").addClass("show"),$("#td-section-nav #m-zh-cnblog20191028dubbo-e59ca8e8b7a8e8afade8a880e5928ce58d8fe8aeaee7a9bfe9808fe680a7e696b9e59091e4b88ae79a84e68ea2e7b4a2e694afe68c81-http2-grpc-e5928c-protobuf-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-zh-cnblog-li><ul class=ul-1><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnblognews-li><input type=checkbox id=m-zh-cnblognews-check>
<label for=m-zh-cnblognews-check><a href=/zh-cn/blog/news/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnblognews><span>社区动态</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20221201dubbo-java-314-e6ada3e5bc8fe58f91e5b883-li><input type=checkbox id=m-zh-cnblog20221201dubbo-java-314-e6ada3e5bc8fe58f91e5b883-check>
<label for=m-zh-cnblog20221201dubbo-java-314-e6ada3e5bc8fe58f91e5b883-check><a href=/zh-cn/blog/2022/12/01/dubbo-java-3.1.4-%E6%AD%A3%E5%BC%8F%E5%8F%91%E5%B8%83/ title="Dubbo Java 3.1.4 正式发布" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20221201dubbo-java-314-e6ada3e5bc8fe58f91e5b883><span>dubbo-java 3.1.4</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20221022e8819ae784a6e7a8b3e5ae9ae680a7dubbo-java-e58f91e78988e8a784e58892e585ace5b883-li><input type=checkbox id=m-zh-cnblog20221022e8819ae784a6e7a8b3e5ae9ae680a7dubbo-java-e58f91e78988e8a784e58892e585ace5b883-check>
<label for=m-zh-cnblog20221022e8819ae784a6e7a8b3e5ae9ae680a7dubbo-java-e58f91e78988e8a784e58892e585ace5b883-check><a href=/zh-cn/blog/2022/10/22/%E8%81%9A%E7%84%A6%E7%A8%B3%E5%AE%9A%E6%80%A7dubbo-java-%E5%8F%91%E7%89%88%E8%A7%84%E5%88%92%E5%85%AC%E5%B8%83/ title="聚焦稳定性,Dubbo Java 发版规划公布" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20221022e8819ae784a6e7a8b3e5ae9ae680a7dubbo-java-e58f91e78988e8a784e58892e585ace5b883><span>Dubbo Java 发版规划</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210718dubbo-java-302-e58f91e78988e585ace5918a-li><input type=checkbox id=m-zh-cnblog20210718dubbo-java-302-e58f91e78988e585ace5918a-check>
<label for=m-zh-cnblog20210718dubbo-java-302-e58f91e78988e585ace5918a-check><a href=/zh-cn/blog/2021/07/18/dubbo-java-3.0.2-%E5%8F%91%E7%89%88%E5%85%AC%E5%91%8A/ title="Dubbo Java 3.0.2 发版公告" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210718dubbo-java-302-e58f91e78988e585ace5918a><span>dubbo-java 3.0.2</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20220718dubbo-java-313-e6ada3e5bc8fe58f91e5b883-li><input type=checkbox id=m-zh-cnblog20220718dubbo-java-313-e6ada3e5bc8fe58f91e5b883-check>
<label for=m-zh-cnblog20220718dubbo-java-313-e6ada3e5bc8fe58f91e5b883-check><a href=/zh-cn/blog/2022/07/18/dubbo-java-3.1.3-%E6%AD%A3%E5%BC%8F%E5%8F%91%E5%B8%83/ title="Dubbo Java 3.1.3 正式发布" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20220718dubbo-java-313-e6ada3e5bc8fe58f91e5b883><span>dubbo-java 3.1.3</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20221218dubbo-java-320-beta3-e6ada3e5bc8fe58f91e5b883-li><input type=checkbox id=m-zh-cnblog20221218dubbo-java-320-beta3-e6ada3e5bc8fe58f91e5b883-check>
<label for=m-zh-cnblog20221218dubbo-java-320-beta3-e6ada3e5bc8fe58f91e5b883-check><a href=/zh-cn/blog/2022/12/18/dubbo-java-3.2.0-beta.3-%E6%AD%A3%E5%BC%8F%E5%8F%91%E5%B8%83/ title="Dubbo Java 3.2.0-beta.3 正式发布" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20221218dubbo-java-320-beta3-e6ada3e5bc8fe58f91e5b883><span>dubbo-java 3.2.0-beta.3</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20221118dubbo-320-beta2-e6ada3e5bc8fe58f91e5b883-li><input type=checkbox id=m-zh-cnblog20221118dubbo-320-beta2-e6ada3e5bc8fe58f91e5b883-check>
<label for=m-zh-cnblog20221118dubbo-320-beta2-e6ada3e5bc8fe58f91e5b883-check><a href=/zh-cn/blog/2022/11/18/dubbo-3.2.0-beta.2-%E6%AD%A3%E5%BC%8F%E5%8F%91%E5%B8%83/ title="Dubbo 3.2.0-beta.2 正式发布" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20221118dubbo-320-beta2-e6ada3e5bc8fe58f91e5b883><span>dubbo-java 3.2.0-beta.2</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20200518dubbo-java-2714-e58f91e78988e585ace5918a-li><input type=checkbox id=m-zh-cnblog20200518dubbo-java-2714-e58f91e78988e585ace5918a-check>
<label for=m-zh-cnblog20200518dubbo-java-2714-e58f91e78988e585ace5918a-check><a href=/zh-cn/blog/2020/05/18/dubbo-java-2.7.14-%E5%8F%91%E7%89%88%E5%85%AC%E5%91%8A/ title="Dubbo Java 2.7.14 发版公告" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20200518dubbo-java-2714-e58f91e78988e585ace5918a><span>dubbo-java 2.7.14</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog10101dubbo-go-151-li><input type=checkbox id=m-zh-cnblog10101dubbo-go-151-check>
<label for=m-zh-cnblog10101dubbo-go-151-check><a href=/zh-cn/blog/1/01/01/dubbo-go-1.5.1/ title="Dubbo Go 1.5.1" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog10101dubbo-go-151><span>dubbo-go 1.5.1</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog10101dubbo-go-hessian2-v170-li><input type=checkbox id=m-zh-cnblog10101dubbo-go-hessian2-v170-check>
<label for=m-zh-cnblog10101dubbo-go-hessian2-v170-check><a href=/zh-cn/blog/1/01/01/dubbo-go-hessian2-v1.7.0/ title="Dubbo Go Hessian2 v1.7.0" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog10101dubbo-go-hessian2-v170><span>dubbo-go-hessian2 v1.7.0</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20240118apache-dubbo-e4b88be4b880e4bba3e4ba91e58e9fe7949fe5beaee69c8de58aa1e68c91e68898e8b59be590afe58aa8e68aa5e5908de4ba94e5a4a7e8b59be9a29850e4b887e5a596e98791e6b1a0e7ad89e4bda0e69da5e68898-li><input type=checkbox id=m-zh-cnblog20240118apache-dubbo-e4b88be4b880e4bba3e4ba91e58e9fe7949fe5beaee69c8de58aa1e68c91e68898e8b59be590afe58aa8e68aa5e5908de4ba94e5a4a7e8b59be9a29850e4b887e5a596e98791e6b1a0e7ad89e4bda0e69da5e68898-check>
<label for=m-zh-cnblog20240118apache-dubbo-e4b88be4b880e4bba3e4ba91e58e9fe7949fe5beaee69c8de58aa1e68c91e68898e8b59be590afe58aa8e68aa5e5908de4ba94e5a4a7e8b59be9a29850e4b887e5a596e98791e6b1a0e7ad89e4bda0e69da5e68898-check><a href=/zh-cn/blog/2024/01/18/apache-dubbo-%E4%B8%8B%E4%B8%80%E4%BB%A3%E4%BA%91%E5%8E%9F%E7%94%9F%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%8C%91%E6%88%98%E8%B5%9B%E5%90%AF%E5%8A%A8%E6%8A%A5%E5%90%8D%E4%BA%94%E5%A4%A7%E8%B5%9B%E9%A2%9850%E4%B8%87%E5%A5%96%E9%87%91%E6%B1%A0%E7%AD%89%E4%BD%A0%E6%9D%A5%E6%88%98/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20240118apache-dubbo-e4b88be4b880e4bba3e4ba91e58e9fe7949fe5beaee69c8de58aa1e68c91e68898e8b59be590afe58aa8e68aa5e5908de4ba94e5a4a7e8b59be9a29850e4b887e5a596e98791e6b1a0e7ad89e4bda0e69da5e68898><span>Apache Dubbo 下一代云原生微服务挑战赛启动报名!五大赛题50万奖金池等你来战</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20231023intellij-ideaefb88fapache-dubboideae5ae98e696b9e68f92e4bbb6e6ada3e5bc8fe58f91e5b883-li><input type=checkbox id=m-zh-cnblog20231023intellij-ideaefb88fapache-dubboideae5ae98e696b9e68f92e4bbb6e6ada3e5bc8fe58f91e5b883-check>
<label for=m-zh-cnblog20231023intellij-ideaefb88fapache-dubboideae5ae98e696b9e68f92e4bbb6e6ada3e5bc8fe58f91e5b883-check><a href=/zh-cn/blog/2023/10/23/intellij-idea%EF%B8%8Fapache-dubboidea%E5%AE%98%E6%96%B9%E6%8F%92%E4%BB%B6%E6%AD%A3%E5%BC%8F%E5%8F%91%E5%B8%83/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20231023intellij-ideaefb88fapache-dubboideae5ae98e696b9e68f92e4bbb6e6ada3e5bc8fe58f91e5b883><span>IntelliJ IDEA❤️Apache Dubbo,IDEA官方插件正式发布!</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20231007apache-dubbo-e4ba91e58e9fe7949fe58fafe8a782e6b58be680a7e79a84e68ea2e7b4a2e4b88ee5ae9ee8b7b5-li><input type=checkbox id=m-zh-cnblog20231007apache-dubbo-e4ba91e58e9fe7949fe58fafe8a782e6b58be680a7e79a84e68ea2e7b4a2e4b88ee5ae9ee8b7b5-check>
<label for=m-zh-cnblog20231007apache-dubbo-e4ba91e58e9fe7949fe58fafe8a782e6b58be680a7e79a84e68ea2e7b4a2e4b88ee5ae9ee8b7b5-check><a href=/zh-cn/blog/2023/10/07/apache-dubbo-%E4%BA%91%E5%8E%9F%E7%94%9F%E5%8F%AF%E8%A7%82%E6%B5%8B%E6%80%A7%E7%9A%84%E6%8E%A2%E7%B4%A2%E4%B8%8E%E5%AE%9E%E8%B7%B5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20231007apache-dubbo-e4ba91e58e9fe7949fe58fafe8a782e6b58be680a7e79a84e68ea2e7b4a2e4b88ee5ae9ee8b7b5><span>Apache Dubbo 云原生可观测性的探索与实践</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20231007opensergo-dubbo-e5beaee69c8de58aa1e6b2bbe79086e69c80e4bdb3e5ae9ee8b7b5-li><input type=checkbox id=m-zh-cnblog20231007opensergo-dubbo-e5beaee69c8de58aa1e6b2bbe79086e69c80e4bdb3e5ae9ee8b7b5-check>
<label for=m-zh-cnblog20231007opensergo-dubbo-e5beaee69c8de58aa1e6b2bbe79086e69c80e4bdb3e5ae9ee8b7b5-check><a href=/zh-cn/blog/2023/10/07/opensergo-dubbo-%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%B2%BB%E7%90%86%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20231007opensergo-dubbo-e5beaee69c8de58aa1e6b2bbe79086e69c80e4bdb3e5ae9ee8b7b5><span>OpenSergo & Dubbo 微服务治理最佳实践</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20231007seata-e5beaee69c8de58aa1e69eb6e69e84e4b88be79a84e4b880e7ab99e5bc8fe58886e5b883e5bc8fe4ba8be58aa1e8a7a3e586b3e696b9e6a188-li><input type=checkbox id=m-zh-cnblog20231007seata-e5beaee69c8de58aa1e69eb6e69e84e4b88be79a84e4b880e7ab99e5bc8fe58886e5b883e5bc8fe4ba8be58aa1e8a7a3e586b3e696b9e6a188-check>
<label for=m-zh-cnblog20231007seata-e5beaee69c8de58aa1e69eb6e69e84e4b88be79a84e4b880e7ab99e5bc8fe58886e5b883e5bc8fe4ba8be58aa1e8a7a3e586b3e696b9e6a188-check><a href=/zh-cn/blog/2023/10/07/seata-%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84%E4%B8%8B%E7%9A%84%E4%B8%80%E7%AB%99%E5%BC%8F%E5%88%86%E5%B8%83%E5%BC%8F%E4%BA%8B%E5%8A%A1%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20231007seata-e5beaee69c8de58aa1e69eb6e69e84e4b88be79a84e4b880e7ab99e5bc8fe58886e5b883e5bc8fe4ba8be58aa1e8a7a3e586b3e696b9e6a188><span>Seata 微服务架构下的一站式分布式事务解决方案</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20231007e59fbae4ba8e-triple-e5ae9ee78eb0-web-e7a7bbe58aa8e7abafe5908ee7abafe585a8e99da2e68993e9809a-li><input type=checkbox id=m-zh-cnblog20231007e59fbae4ba8e-triple-e5ae9ee78eb0-web-e7a7bbe58aa8e7abafe5908ee7abafe585a8e99da2e68993e9809a-check>
<label for=m-zh-cnblog20231007e59fbae4ba8e-triple-e5ae9ee78eb0-web-e7a7bbe58aa8e7abafe5908ee7abafe585a8e99da2e68993e9809a-check><a href=/zh-cn/blog/2023/10/07/%E5%9F%BA%E4%BA%8E-triple-%E5%AE%9E%E7%8E%B0-web-%E7%A7%BB%E5%8A%A8%E7%AB%AF%E5%90%8E%E7%AB%AF%E5%85%A8%E9%9D%A2%E6%89%93%E9%80%9A/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20231007e59fbae4ba8e-triple-e5ae9ee78eb0-web-e7a7bbe58aa8e7abafe5908ee7abafe585a8e99da2e68993e9809a><span>基于 Triple 实现 Web 移动端后端全面打通</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20231007e590afe58aa8e9809fe5baa6e68f90e58d8710e5808dapache-dubbo-e99d99e68081e58c96-graalvm-native-image-e6b7b1e5baa6e8a7a3e69e90-li><input type=checkbox id=m-zh-cnblog20231007e590afe58aa8e9809fe5baa6e68f90e58d8710e5808dapache-dubbo-e99d99e68081e58c96-graalvm-native-image-e6b7b1e5baa6e8a7a3e69e90-check>
<label for=m-zh-cnblog20231007e590afe58aa8e9809fe5baa6e68f90e58d8710e5808dapache-dubbo-e99d99e68081e58c96-graalvm-native-image-e6b7b1e5baa6e8a7a3e69e90-check><a href=/zh-cn/blog/2023/10/07/%E5%90%AF%E5%8A%A8%E9%80%9F%E5%BA%A6%E6%8F%90%E5%8D%8710%E5%80%8Dapache-dubbo-%E9%9D%99%E6%80%81%E5%8C%96-graalvm-native-image-%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20231007e590afe58aa8e9809fe5baa6e68f90e58d8710e5808dapache-dubbo-e99d99e68081e58c96-graalvm-native-image-e6b7b1e5baa6e8a7a3e69e90><span>启动速度提升10倍:Apache Dubbo 静态化 GraalVM Native Image 深度解析</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20231007e6898be68a8ae6898be69599e4bda0e983a8e7bdb2dubboe5ba94e794a8e588b0kubernetes-apache-dubbo-kubernetes-e69c80e4bdb3e5ae9ee8b7b5-li><input type=checkbox id=m-zh-cnblog20231007e6898be68a8ae6898be69599e4bda0e983a8e7bdb2dubboe5ba94e794a8e588b0kubernetes-apache-dubbo-kubernetes-e69c80e4bdb3e5ae9ee8b7b5-check>
<label for=m-zh-cnblog20231007e6898be68a8ae6898be69599e4bda0e983a8e7bdb2dubboe5ba94e794a8e588b0kubernetes-apache-dubbo-kubernetes-e69c80e4bdb3e5ae9ee8b7b5-check><a href=/zh-cn/blog/2023/10/07/%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E9%83%A8%E7%BD%B2dubbo%E5%BA%94%E7%94%A8%E5%88%B0kubernetes-apache-dubbo-kubernetes-%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20231007e6898be68a8ae6898be69599e4bda0e983a8e7bdb2dubboe5ba94e794a8e588b0kubernetes-apache-dubbo-kubernetes-e69c80e4bdb3e5ae9ee8b7b5><span>手把手教你部署Dubbo应用到Kubernetes – Apache Dubbo Kubernetes 最佳实践</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20231007e694bfe98787e4ba91e59fbae4ba8edubboe79a84e6b7b7e59088e4ba91e695b0e68daee8b7a8e7bd91e5ae9ee8b7b5-li><input type=checkbox id=m-zh-cnblog20231007e694bfe98787e4ba91e59fbae4ba8edubboe79a84e6b7b7e59088e4ba91e695b0e68daee8b7a8e7bd91e5ae9ee8b7b5-check>
<label for=m-zh-cnblog20231007e694bfe98787e4ba91e59fbae4ba8edubboe79a84e6b7b7e59088e4ba91e695b0e68daee8b7a8e7bd91e5ae9ee8b7b5-check><a href=/zh-cn/blog/2023/10/07/%E6%94%BF%E9%87%87%E4%BA%91%E5%9F%BA%E4%BA%8Edubbo%E7%9A%84%E6%B7%B7%E5%90%88%E4%BA%91%E6%95%B0%E6%8D%AE%E8%B7%A8%E7%BD%91%E5%AE%9E%E8%B7%B5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20231007e694bfe98787e4ba91e59fbae4ba8edubboe79a84e6b7b7e59088e4ba91e695b0e68daee8b7a8e7bd91e5ae9ee8b7b5><span>政采云基于Dubbo的混合云数据跨网实践</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230825coc-asia-2023-e5a4a7e4bc9ae7b2bee5bda9e59b9ee9a1be-li><input type=checkbox id=m-zh-cnblog20230825coc-asia-2023-e5a4a7e4bc9ae7b2bee5bda9e59b9ee9a1be-check>
<label for=m-zh-cnblog20230825coc-asia-2023-e5a4a7e4bc9ae7b2bee5bda9e59b9ee9a1be-check><a href=/zh-cn/blog/2023/08/25/coc-asia-2023-%E5%A4%A7%E4%BC%9A%E7%B2%BE%E5%BD%A9%E5%9B%9E%E9%A1%BE/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230825coc-asia-2023-e5a4a7e4bc9ae7b2bee5bda9e59b9ee9a1be><span>CoC Asia 2023 大会精彩回顾</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230807dubbo-e5beaee69c8de58aa1e4b893e9a298e8aebae59d9b-8e69c8819e697a5e58c97e4baacapachecone5a4a7e4bc9ae4b88de8a781e4b88de695a3-li><input type=checkbox id=m-zh-cnblog20230807dubbo-e5beaee69c8de58aa1e4b893e9a298e8aebae59d9b-8e69c8819e697a5e58c97e4baacapachecone5a4a7e4bc9ae4b88de8a781e4b88de695a3-check>
<label for=m-zh-cnblog20230807dubbo-e5beaee69c8de58aa1e4b893e9a298e8aebae59d9b-8e69c8819e697a5e58c97e4baacapachecone5a4a7e4bc9ae4b88de8a781e4b88de695a3-check><a href=/zh-cn/blog/2023/08/07/dubbo-%E5%BE%AE%E6%9C%8D%E5%8A%A1%E4%B8%93%E9%A2%98%E8%AE%BA%E5%9D%9B-8%E6%9C%8819%E6%97%A5%E5%8C%97%E4%BA%ACapachecon%E5%A4%A7%E4%BC%9A%E4%B8%8D%E8%A7%81%E4%B8%8D%E6%95%A3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230807dubbo-e5beaee69c8de58aa1e4b893e9a298e8aebae59d9b-8e69c8819e697a5e58c97e4baacapachecone5a4a7e4bc9ae4b88de8a781e4b88de695a3><span>Dubbo 微服务专题论坛 - 8月19日北京ApacheCon大会不见不散</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230705glcc-x-apache-dubboe7bc96e7a88be5a48fe4bba4e890a5e68aa5e5908de590afe58aa8-li><input type=checkbox id=m-zh-cnblog20230705glcc-x-apache-dubboe7bc96e7a88be5a48fe4bba4e890a5e68aa5e5908de590afe58aa8-check>
<label for=m-zh-cnblog20230705glcc-x-apache-dubboe7bc96e7a88be5a48fe4bba4e890a5e68aa5e5908de590afe58aa8-check><a href=/zh-cn/blog/2023/07/05/glcc-x-apache-dubbo%E7%BC%96%E7%A8%8B%E5%A4%8F%E4%BB%A4%E8%90%A5%E6%8A%A5%E5%90%8D%E5%90%AF%E5%8A%A8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230705glcc-x-apache-dubboe7bc96e7a88be5a48fe4bba4e890a5e68aa5e5908de590afe58aa8><span>GLCC x Apache Dubbo编程夏令营报名启动</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230515apache-dubbo-e5bc80e6ba90e4b98be5a48f-2023e8b4a1e78caee7a4bee58cbae8b5a2e58f96-12000-e5a596e98791-li><input type=checkbox id=m-zh-cnblog20230515apache-dubbo-e5bc80e6ba90e4b98be5a48f-2023e8b4a1e78caee7a4bee58cbae8b5a2e58f96-12000-e5a596e98791-check>
<label for=m-zh-cnblog20230515apache-dubbo-e5bc80e6ba90e4b98be5a48f-2023e8b4a1e78caee7a4bee58cbae8b5a2e58f96-12000-e5a596e98791-check><a href=/zh-cn/blog/2023/05/15/apache-dubbo-%E5%BC%80%E6%BA%90%E4%B9%8B%E5%A4%8F-2023%E8%B4%A1%E7%8C%AE%E7%A4%BE%E5%8C%BA%E8%B5%A2%E5%8F%96-12000-%E5%A5%96%E9%87%91/ title="Apache Dubbo 开源之夏 2023,贡献社区赢取 12000 奖金" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230515apache-dubbo-e5bc80e6ba90e4b98be5a48f-2023e8b4a1e78caee7a4bee58cbae8b5a2e58f96-12000-e5a596e98791><span>Apache Dubbo开源之夏2023,贡献社区赢取12000奖金</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230415e7b2bee8bf9be4ba91e58e9fe7949f-dubbo-32-e6ada3e5bc8fe58f91e5b883-li><input type=checkbox id=m-zh-cnblog20230415e7b2bee8bf9be4ba91e58e9fe7949f-dubbo-32-e6ada3e5bc8fe58f91e5b883-check>
<label for=m-zh-cnblog20230415e7b2bee8bf9be4ba91e58e9fe7949f-dubbo-32-e6ada3e5bc8fe58f91e5b883-check><a href=/zh-cn/blog/2023/04/15/%E7%B2%BE%E8%BF%9B%E4%BA%91%E5%8E%9F%E7%94%9F-dubbo-3.2-%E6%AD%A3%E5%BC%8F%E5%8F%91%E5%B8%83/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230415e7b2bee8bf9be4ba91e58e9fe7949f-dubbo-32-e6ada3e5bc8fe58f91e5b883><span>精进云原生 - Dubbo 3.2 正式发布</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog202302232022-e5b9b4e5baa6e680bbe7bb93e4b88e-2023-e696b0e5b9b4e8a784e58892-li><input type=checkbox id=m-zh-cnblog202302232022-e5b9b4e5baa6e680bbe7bb93e4b88e-2023-e696b0e5b9b4e8a784e58892-check>
<label for=m-zh-cnblog202302232022-e5b9b4e5baa6e680bbe7bb93e4b88e-2023-e696b0e5b9b4e8a784e58892-check><a href=/zh-cn/blog/2023/02/23/2022-%E5%B9%B4%E5%BA%A6%E6%80%BB%E7%BB%93%E4%B8%8E-2023-%E6%96%B0%E5%B9%B4%E8%A7%84%E5%88%92/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog202302232022-e5b9b4e5baa6e680bbe7bb93e4b88e-2023-e696b0e5b9b4e8a784e58892><span>2022 年度总结与 2023 新年规划</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230223e4b880e69687e5b8aee4bda0e5bfabe9809fe4ba86e8a7a3-dubbo-e6a0b8e5bf83e883bde58a9b-li><input type=checkbox id=m-zh-cnblog20230223e4b880e69687e5b8aee4bda0e5bfabe9809fe4ba86e8a7a3-dubbo-e6a0b8e5bf83e883bde58a9b-check>
<label for=m-zh-cnblog20230223e4b880e69687e5b8aee4bda0e5bfabe9809fe4ba86e8a7a3-dubbo-e6a0b8e5bf83e883bde58a9b-check><a href=/zh-cn/blog/2023/02/23/%E4%B8%80%E6%96%87%E5%B8%AE%E4%BD%A0%E5%BF%AB%E9%80%9F%E4%BA%86%E8%A7%A3-dubbo-%E6%A0%B8%E5%BF%83%E8%83%BD%E5%8A%9B/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230223e4b880e69687e5b8aee4bda0e5bfabe9809fe4ba86e8a7a3-dubbo-e6a0b8e5bf83e883bde58a9b><span>一文帮你快速了解 Dubbo 核心能力</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230202dubbo-e59ca8-proxyless-mesh-e6a8a1e5bc8fe4b88be79a84e68ea2e7b4a2e4b88ee694b9e8bf9b-li><input type=checkbox id=m-zh-cnblog20230202dubbo-e59ca8-proxyless-mesh-e6a8a1e5bc8fe4b88be79a84e68ea2e7b4a2e4b88ee694b9e8bf9b-check>
<label for=m-zh-cnblog20230202dubbo-e59ca8-proxyless-mesh-e6a8a1e5bc8fe4b88be79a84e68ea2e7b4a2e4b88ee694b9e8bf9b-check><a href=/zh-cn/blog/2023/02/02/dubbo-%E5%9C%A8-proxyless-mesh-%E6%A8%A1%E5%BC%8F%E4%B8%8B%E7%9A%84%E6%8E%A2%E7%B4%A2%E4%B8%8E%E6%94%B9%E8%BF%9B/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230202dubbo-e59ca8-proxyless-mesh-e6a8a1e5bc8fe4b88be79a84e68ea2e7b4a2e4b88ee694b9e8bf9b><span>Dubbo 在 Proxyless Mesh 模式下的探索与改进</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230130dubbo-315320-beta4-e6ada3e5bc8fe58f91e5b883-li><input type=checkbox id=m-zh-cnblog20230130dubbo-315320-beta4-e6ada3e5bc8fe58f91e5b883-check>
<label for=m-zh-cnblog20230130dubbo-315320-beta4-e6ada3e5bc8fe58f91e5b883-check><a href=/zh-cn/blog/2023/01/30/dubbo-3.1.53.2.0-beta.4-%E6%AD%A3%E5%BC%8F%E5%8F%91%E5%B8%83/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230130dubbo-315320-beta4-e6ada3e5bc8fe58f91e5b883><span>Dubbo 3.1.5、3.2.0-beta.4 正式发布</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210823dubbo-java-3021-e58f91e78988e585ace5918a-li><input type=checkbox id=m-zh-cnblog20210823dubbo-java-3021-e58f91e78988e585ace5918a-check>
<label for=m-zh-cnblog20210823dubbo-java-3021-e58f91e78988e585ace5918a-check><a href=/zh-cn/blog/2021/08/23/dubbo-java-3.0.2.1-%E5%8F%91%E7%89%88%E5%85%AC%E5%91%8A/ title="Dubbo Java 3.0.2.1 发版公告" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210823dubbo-java-3021-e58f91e78988e585ace5918a><span>dubbo-java 3.0.2.1</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210702dubbo-java-301-e58f91e78988e585ace5918a-li><input type=checkbox id=m-zh-cnblog20210702dubbo-java-301-e58f91e78988e585ace5918a-check>
<label for=m-zh-cnblog20210702dubbo-java-301-e58f91e78988e585ace5918a-check><a href=/zh-cn/blog/2021/07/02/dubbo-java-3.0.1-%E5%8F%91%E7%89%88%E5%85%AC%E5%91%8A/ title="Dubbo Java 3.0.1 发版公告" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210702dubbo-java-301-e58f91e78988e585ace5918a><span>dubbo-ava 3.0.1</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210114dubbo-go-150-li><input type=checkbox id=m-zh-cnblog20210114dubbo-go-150-check>
<label for=m-zh-cnblog20210114dubbo-go-150-check><a href=/zh-cn/blog/2021/01/14/dubbo-go-1.5.0/ title="Dubbo Go 1.5.0" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210114dubbo-go-150><span>dubbo-go 1.5.0</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210114dubbo-go-hessian2-v160-li><input type=checkbox id=m-zh-cnblog20210114dubbo-go-hessian2-v160-check>
<label for=m-zh-cnblog20210114dubbo-go-hessian2-v160-check><a href=/zh-cn/blog/2021/01/14/dubbo-go-hessian2-v1.6.0/ title="Dubbo Go Hessian2 v1.6.0" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210114dubbo-go-hessian2-v160><span>dubbo-go-hessian2 v1.6.0</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210114e983bde5b7b2e7bb8fe58d81e5b281e79a84-apache-dubboe8bf98e883bde5868de4b998e9a38ee7a0b4e6b5aae59097-li><input type=checkbox id=m-zh-cnblog20210114e983bde5b7b2e7bb8fe58d81e5b281e79a84-apache-dubboe8bf98e883bde5868de4b998e9a38ee7a0b4e6b5aae59097-check>
<label for=m-zh-cnblog20210114e983bde5b7b2e7bb8fe58d81e5b281e79a84-apache-dubboe8bf98e883bde5868de4b998e9a38ee7a0b4e6b5aae59097-check><a href=/zh-cn/blog/2021/01/14/%E9%83%BD%E5%B7%B2%E7%BB%8F%E5%8D%81%E5%B2%81%E7%9A%84-apache-dubbo%E8%BF%98%E8%83%BD%E5%86%8D%E4%B9%98%E9%A3%8E%E7%A0%B4%E6%B5%AA%E5%90%97/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210114e983bde5b7b2e7bb8fe58d81e5b281e79a84-apache-dubboe8bf98e883bde5868de4b998e9a38ee7a0b4e6b5aae59097><span>都已经十岁的 Apache Dubbo,还能再乘风破浪吗?</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210112dubbo-go-140-li><input type=checkbox id=m-zh-cnblog20210112dubbo-go-140-check>
<label for=m-zh-cnblog20210112dubbo-go-140-check><a href=/zh-cn/blog/2021/01/12/dubbo-go-1.4.0/ title="Dubbo Go 1.4.0" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210112dubbo-go-140><span>dubbo-go 1.4.0</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210111dubbo-go-e59b9ee9a1bee4b88ee5b195e69c9b-li><input type=checkbox id=m-zh-cnblog20210111dubbo-go-e59b9ee9a1bee4b88ee5b195e69c9b-check>
<label for=m-zh-cnblog20210111dubbo-go-e59b9ee9a1bee4b88ee5b195e69c9b-check><a href=/zh-cn/blog/2021/01/11/dubbo-go-%E5%9B%9E%E9%A1%BE%E4%B8%8E%E5%B1%95%E6%9C%9B/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210111dubbo-go-e59b9ee9a1bee4b88ee5b195e69c9b><span>Dubbo Go 回顾与展望</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20200518dubbo-java-275-e58a9fe883bde8a7a3e69e90-li><input type=checkbox id=m-zh-cnblog20200518dubbo-java-275-e58a9fe883bde8a7a3e69e90-check>
<label for=m-zh-cnblog20200518dubbo-java-275-e58a9fe883bde8a7a3e69e90-check><a href=/zh-cn/blog/2020/05/18/dubbo-java-2.7.5-%E5%8A%9F%E8%83%BD%E8%A7%A3%E6%9E%90/ title="Dubbo Java 2.7.5 功能解析" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20200518dubbo-java-275-e58a9fe883bde8a7a3e69e90><span>dubbo-java 2.7.5</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20200511e4bb8e-2019-e588b0-2020apache-dubbo-e5b9b4e5baa6e59b9ee9a1bee4b88ee680bbe7bb93-li><input type=checkbox id=m-zh-cnblog20200511e4bb8e-2019-e588b0-2020apache-dubbo-e5b9b4e5baa6e59b9ee9a1bee4b88ee680bbe7bb93-check>
<label for=m-zh-cnblog20200511e4bb8e-2019-e588b0-2020apache-dubbo-e5b9b4e5baa6e59b9ee9a1bee4b88ee680bbe7bb93-check><a href=/zh-cn/blog/2020/05/11/%E4%BB%8E-2019-%E5%88%B0-2020apache-dubbo-%E5%B9%B4%E5%BA%A6%E5%9B%9E%E9%A1%BE%E4%B8%8E%E6%80%BB%E7%BB%93/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20200511e4bb8e-2019-e588b0-2020apache-dubbo-e5b9b4e5baa6e59b9ee9a1bee4b88ee680bbe7bb93><span>从 2019 到 2020,Apache Dubbo 年度回顾与总结</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20190126e98187e8a781dubbo-li><input type=checkbox id=m-zh-cnblog20190126e98187e8a781dubbo-check>
<label for=m-zh-cnblog20190126e98187e8a781dubbo-check><a href=/zh-cn/blog/2019/01/26/%E9%81%87%E8%A7%81dubbo/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20190126e98187e8a781dubbo><span>遇见Dubbo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20181210e7acace4ba94e5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e69dade5b79ee68890e58a9fe4b8bee58a9e-li><input type=checkbox id=m-zh-cnblog20181210e7acace4ba94e5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e69dade5b79ee68890e58a9fe4b8bee58a9e-check>
<label for=m-zh-cnblog20181210e7acace4ba94e5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e69dade5b79ee68890e58a9fe4b8bee58a9e-check><a href=/zh-cn/blog/2018/12/10/%E7%AC%AC%E4%BA%94%E5%B1%8Adubbo%E5%BC%80%E5%8F%91%E8%80%85%E6%B2%99%E9%BE%99%E5%9C%A8%E6%9D%AD%E5%B7%9E%E6%88%90%E5%8A%9F%E4%B8%BE%E5%8A%9E/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20181210e7acace4ba94e5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e69dade5b79ee68890e58a9fe4b8bee58a9e><span>第五届Dubbo开发者沙龙在杭州成功举办</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180902e5a682e4bd95e58786e5a487apache-release-li><input type=checkbox id=m-zh-cnblog20180902e5a682e4bd95e58786e5a487apache-release-check>
<label for=m-zh-cnblog20180902e5a682e4bd95e58786e5a487apache-release-check><a href=/zh-cn/blog/2018/09/02/%E5%A6%82%E4%BD%95%E5%87%86%E5%A4%87apache-release/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180902e5a682e4bd95e58786e5a487apache-release><span>如何准备Apache Release</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180826e7acace59b9be5b18adubboe5bc80e58f91e88085e6b299e9be99e4ba8e8e69c8826e697a5e59ca8e68890e983bde4b8bee8a18c-li><input type=checkbox id=m-zh-cnblog20180826e7acace59b9be5b18adubboe5bc80e58f91e88085e6b299e9be99e4ba8e8e69c8826e697a5e59ca8e68890e983bde4b8bee8a18c-check>
<label for=m-zh-cnblog20180826e7acace59b9be5b18adubboe5bc80e58f91e88085e6b299e9be99e4ba8e8e69c8826e697a5e59ca8e68890e983bde4b8bee8a18c-check><a href=/zh-cn/blog/2018/08/26/%E7%AC%AC%E5%9B%9B%E5%B1%8Adubbo%E5%BC%80%E5%8F%91%E8%80%85%E6%B2%99%E9%BE%99%E4%BA%8E8%E6%9C%8826%E6%97%A5%E5%9C%A8%E6%88%90%E9%83%BD%E4%B8%BE%E8%A1%8C/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180826e7acace59b9be5b18adubboe5bc80e58f91e88085e6b299e9be99e4ba8e8e69c8826e697a5e59ca8e68890e983bde4b8bee8a18c><span>第四届Dubbo开发者沙龙于8月26日在成都举行</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180730e7acace4b889e5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e6b7b1e59cb3e68890e58a9fe4b8bee58a9e-li><input type=checkbox id=m-zh-cnblog20180730e7acace4b889e5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e6b7b1e59cb3e68890e58a9fe4b8bee58a9e-check>
<label for=m-zh-cnblog20180730e7acace4b889e5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e6b7b1e59cb3e68890e58a9fe4b8bee58a9e-check><a href=/zh-cn/blog/2018/07/30/%E7%AC%AC%E4%B8%89%E5%B1%8Adubbo%E5%BC%80%E5%8F%91%E8%80%85%E6%B2%99%E9%BE%99%E5%9C%A8%E6%B7%B1%E5%9C%B3%E6%88%90%E5%8A%9F%E4%B8%BE%E5%8A%9E/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180730e7acace4b889e5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e6b7b1e59cb3e68890e58a9fe4b8bee58a9e><span>第三届Dubbo开发者沙龙在深圳成功举办</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180623e7acace4ba8ce5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e4b88ae6b5b7e68890e58a9fe4b8bee58a9e-li><input type=checkbox id=m-zh-cnblog20180623e7acace4ba8ce5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e4b88ae6b5b7e68890e58a9fe4b8bee58a9e-check>
<label for=m-zh-cnblog20180623e7acace4ba8ce5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e4b88ae6b5b7e68890e58a9fe4b8bee58a9e-check><a href=/zh-cn/blog/2018/06/23/%E7%AC%AC%E4%BA%8C%E5%B1%8Adubbo%E5%BC%80%E5%8F%91%E8%80%85%E6%B2%99%E9%BE%99%E5%9C%A8%E4%B8%8A%E6%B5%B7%E6%88%90%E5%8A%9F%E4%B8%BE%E5%8A%9E/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180623e7acace4ba8ce5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e4b88ae6b5b7e68890e58a9fe4b8bee58a9e><span>第二届Dubbo开发者沙龙在上海成功举办</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180512e9a696e5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e58c97e4baace68890e58a9fe4b8bee58a9e-li><input type=checkbox id=m-zh-cnblog20180512e9a696e5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e58c97e4baace68890e58a9fe4b8bee58a9e-check>
<label for=m-zh-cnblog20180512e9a696e5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e58c97e4baace68890e58a9fe4b8bee58a9e-check><a href=/zh-cn/blog/2018/05/12/%E9%A6%96%E5%B1%8Adubbo%E5%BC%80%E5%8F%91%E8%80%85%E6%B2%99%E9%BE%99%E5%9C%A8%E5%8C%97%E4%BA%AC%E6%88%90%E5%8A%9F%E4%B8%BE%E5%8A%9E/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180512e9a696e5b18adubboe5bc80e58f91e88085e6b299e9be99e59ca8e58c97e4baace68890e58a9fe4b8bee58a9e><span>首届Dubbo开发者沙龙在北京成功举办</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180502apachecon-na-e5a4a7e4bc9ae8aeaee7a88be585ace5b883-li><input type=checkbox id=m-zh-cnblog20180502apachecon-na-e5a4a7e4bc9ae8aeaee7a88be585ace5b883-check>
<label for=m-zh-cnblog20180502apachecon-na-e5a4a7e4bc9ae8aeaee7a88be585ace5b883-check><a href=/zh-cn/blog/2018/05/02/apachecon-na-%E5%A4%A7%E4%BC%9A%E8%AE%AE%E7%A8%8B%E5%85%AC%E5%B8%83/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180502apachecon-na-e5a4a7e4bc9ae8aeaee7a88be585ace5b883><span>ApacheCon NA 大会议程公布</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180425e8b0b7e6ad8ce7bc96e7a88be4b98be5a48fe4bc9ae8aeaee4b88a2018e4b8aae9a1b9e79baee8a2abe5aea3e5b883-li><input type=checkbox id=m-zh-cnblog20180425e8b0b7e6ad8ce7bc96e7a88be4b98be5a48fe4bc9ae8aeaee4b88a2018e4b8aae9a1b9e79baee8a2abe5aea3e5b883-check>
<label for=m-zh-cnblog20180425e8b0b7e6ad8ce7bc96e7a88be4b98be5a48fe4bc9ae8aeaee4b88a2018e4b8aae9a1b9e79baee8a2abe5aea3e5b883-check><a href=/zh-cn/blog/2018/04/25/%E8%B0%B7%E6%AD%8C%E7%BC%96%E7%A8%8B%E4%B9%8B%E5%A4%8F%E4%BC%9A%E8%AE%AE%E4%B8%8A2018%E4%B8%AA%E9%A1%B9%E7%9B%AE%E8%A2%AB%E5%AE%A3%E5%B8%83/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180425e8b0b7e6ad8ce7bc96e7a88be4b98be5a48fe4bc9ae8aeaee4b88a2018e4b8aae9a1b9e79baee8a2abe5aea3e5b883><span>谷歌编程之夏会议上2018个项目被宣布</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180423e59ca8dockerhube58f91e5b883dubbo-admine9959ce5838f-li><input type=checkbox id=m-zh-cnblog20180423e59ca8dockerhube58f91e5b883dubbo-admine9959ce5838f-check>
<label for=m-zh-cnblog20180423e59ca8dockerhube58f91e5b883dubbo-admine9959ce5838f-check><a href=/zh-cn/blog/2018/04/23/%E5%9C%A8dockerhub%E5%8F%91%E5%B8%83dubbo-admin%E9%95%9C%E5%83%8F/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180423e59ca8dockerhube58f91e5b883dubbo-admine9959ce5838f><span>在DockerHub发布Dubbo Admin镜像</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180422dubboe8b7afe7babfe59bbee59ca8qcon-beijing-2018e4b88ae585ace5b883-li><input type=checkbox id=m-zh-cnblog20180422dubboe8b7afe7babfe59bbee59ca8qcon-beijing-2018e4b88ae585ace5b883-check>
<label for=m-zh-cnblog20180422dubboe8b7afe7babfe59bbee59ca8qcon-beijing-2018e4b88ae585ace5b883-check><a href=/zh-cn/blog/2018/04/22/dubbo%E8%B7%AF%E7%BA%BF%E5%9B%BE%E5%9C%A8qcon-beijing-2018%E4%B8%8A%E5%85%AC%E5%B8%83/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180422dubboe8b7afe7babfe59bbee59ca8qcon-beijing-2018e4b88ae585ace5b883><span>Dubbo路线图在QCon Beijing 2018上公布</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180311e5a682e4bd95e58f82e4b88ee8b4a1e78caedubboe7a4bee58cba-li><input type=checkbox id=m-zh-cnblog20180311e5a682e4bd95e58f82e4b88ee8b4a1e78caedubboe7a4bee58cba-check>
<label for=m-zh-cnblog20180311e5a682e4bd95e58f82e4b88ee8b4a1e78caedubboe7a4bee58cba-check><a href=/zh-cn/blog/2018/03/11/%E5%A6%82%E4%BD%95%E5%8F%82%E4%B8%8E%E8%B4%A1%E7%8C%AEdubbo%E7%A4%BE%E5%8C%BA/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180311e5a682e4bd95e58f82e4b88ee8b4a1e78caedubboe7a4bee58cba><span>如何参与贡献Dubbo社区</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnblogusers-li><input type=checkbox id=m-zh-cnblogusers-check>
<label for=m-zh-cnblogusers-check><a href=/zh-cn/blog/users/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnblogusers><span>用户案例</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230116e998bfe9878ce5b7b4e5b7b4e58d87e7baa7-dubbo3-e585a8e99da2e58f96e4bba3-hsf2-li><input type=checkbox id=m-zh-cnblog20230116e998bfe9878ce5b7b4e5b7b4e58d87e7baa7-dubbo3-e585a8e99da2e58f96e4bba3-hsf2-check>
<label for=m-zh-cnblog20230116e998bfe9878ce5b7b4e5b7b4e58d87e7baa7-dubbo3-e585a8e99da2e58f96e4bba3-hsf2-check><a href=/zh-cn/blog/2023/01/16/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E5%8D%87%E7%BA%A7-dubbo3-%E5%85%A8%E9%9D%A2%E5%8F%96%E4%BB%A3-hsf2/ title="阿里巴巴升级 Dubbo3 全面取代 HSF2" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230116e998bfe9878ce5b7b4e5b7b4e58d87e7baa7-dubbo3-e585a8e99da2e58f96e4bba3-hsf2><span>阿里巴巴</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230115e5b7a5e59586e993b6e8a18c-dubbo3-e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0e5ae9ee8b7b5-li><input type=checkbox id=m-zh-cnblog20230115e5b7a5e59586e993b6e8a18c-dubbo3-e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0e5ae9ee8b7b5-check>
<label for=m-zh-cnblog20230115e5b7a5e59586e993b6e8a18c-dubbo3-e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0e5ae9ee8b7b5-check><a href=/zh-cn/blog/2023/01/15/%E5%B7%A5%E5%95%86%E9%93%B6%E8%A1%8C-dubbo3-%E5%BA%94%E7%94%A8%E7%BA%A7%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0%E5%AE%9E%E8%B7%B5/ title="工商银行 Dubbo3 应用级服务发现实践" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230115e5b7a5e59586e993b6e8a18c-dubbo3-e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0e5ae9ee8b7b5><span>工商银行</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230115e9a5bfe4ba86e4b988e585a8e7ab99e68890e58a9fe58d87e7baa7-dubbo3-li><input type=checkbox id=m-zh-cnblog20230115e9a5bfe4ba86e4b988e585a8e7ab99e68890e58a9fe58d87e7baa7-dubbo3-check>
<label for=m-zh-cnblog20230115e9a5bfe4ba86e4b988e585a8e7ab99e68890e58a9fe58d87e7baa7-dubbo3-check><a href=/zh-cn/blog/2023/01/15/%E9%A5%BF%E4%BA%86%E4%B9%88%E5%85%A8%E7%AB%99%E6%88%90%E5%8A%9F%E5%8D%87%E7%BA%A7-dubbo3/ title="饿了么全站成功升级 Dubbo3 " class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230115e9a5bfe4ba86e4b988e585a8e7ab99e68890e58a9fe58d87e7baa7-dubbo3><span>饿了么</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230115e5ba97e5b08fe89c9ce58d87e7baa7-triple-e58d8fe8aeae-li><input type=checkbox id=m-zh-cnblog20230115e5ba97e5b08fe89c9ce58d87e7baa7-triple-e58d8fe8aeae-check>
<label for=m-zh-cnblog20230115e5ba97e5b08fe89c9ce58d87e7baa7-triple-e58d8fe8aeae-check><a href=/zh-cn/blog/2023/01/15/%E5%BA%97%E5%B0%8F%E8%9C%9C%E5%8D%87%E7%BA%A7-triple-%E5%8D%8F%E8%AE%AE/ title="店小蜜升级 Triple 协议" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230115e5ba97e5b08fe89c9ce58d87e7baa7-triple-e58d8fe8aeae><span>达摩院云小蜜</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230115e7939ce5ad90e4ba8ce6898be8bda6-dubbo-e5ae9ee8b7b5-li><input type=checkbox id=m-zh-cnblog20230115e7939ce5ad90e4ba8ce6898be8bda6-dubbo-e5ae9ee8b7b5-check>
<label for=m-zh-cnblog20230115e7939ce5ad90e4ba8ce6898be8bda6-dubbo-e5ae9ee8b7b5-check><a href=/zh-cn/blog/2023/01/15/%E7%93%9C%E5%AD%90%E4%BA%8C%E6%89%8B%E8%BD%A6-dubbo-%E5%AE%9E%E8%B7%B5/ title="瓜子二手车 Dubbo 实践" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230115e7939ce5ad90e4ba8ce6898be8bda6-dubbo-e5ae9ee8b7b5><span>瓜子二手车</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230115e5b08fe7b1b3e4b88e-dubbo-e7a4bee58cbae79a84e59088e4bd9c-li><input type=checkbox id=m-zh-cnblog20230115e5b08fe7b1b3e4b88e-dubbo-e7a4bee58cbae79a84e59088e4bd9c-check>
<label for=m-zh-cnblog20230115e5b08fe7b1b3e4b88e-dubbo-e7a4bee58cbae79a84e59088e4bd9c-check><a href=/zh-cn/blog/2023/01/15/%E5%B0%8F%E7%B1%B3%E4%B8%8E-dubbo-%E7%A4%BE%E5%8C%BA%E7%9A%84%E5%90%88%E4%BD%9C/ title="小米与 Dubbo 社区的合作" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230115e5b08fe7b1b3e4b88e-dubbo-e7a4bee58cbae79a84e59088e4bd9c><span>小米</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230115e4b8ade4bca6e7bd91e7bb9c-dubbo3-e58d87e7baa7e5ae9ee8b7b5-li><input type=checkbox id=m-zh-cnblog20230115e4b8ade4bca6e7bd91e7bb9c-dubbo3-e58d87e7baa7e5ae9ee8b7b5-check>
<label for=m-zh-cnblog20230115e4b8ade4bca6e7bd91e7bb9c-dubbo3-e58d87e7baa7e5ae9ee8b7b5-check><a href=/zh-cn/blog/2023/01/15/%E4%B8%AD%E4%BC%A6%E7%BD%91%E7%BB%9C-dubbo3-%E5%8D%87%E7%BA%A7%E5%AE%9E%E8%B7%B5/ title="中伦网络 Dubbo3 升级实践" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230115e4b8ade4bca6e7bd91e7bb9c-dubbo3-e58d87e7baa7e5ae9ee8b7b5><span>中伦网络</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230115e5b9b3e5ae89e581a5e5bab7e79a84-dubbo3-e8bf81e7a7bbe58e86e7a88b-li><input type=checkbox id=m-zh-cnblog20230115e5b9b3e5ae89e581a5e5bab7e79a84-dubbo3-e8bf81e7a7bbe58e86e7a88b-check>
<label for=m-zh-cnblog20230115e5b9b3e5ae89e581a5e5bab7e79a84-dubbo3-e8bf81e7a7bbe58e86e7a88b-check><a href=/zh-cn/blog/2023/01/15/%E5%B9%B3%E5%AE%89%E5%81%A5%E5%BA%B7%E7%9A%84-dubbo3-%E8%BF%81%E7%A7%BB%E5%8E%86%E7%A8%8B/ title="平安健康的 Dubbo3 迁移历程" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230115e5b9b3e5ae89e581a5e5bab7e79a84-dubbo3-e8bf81e7a7bbe58e86e7a88b><span>平安健康</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230322e585a8e59bbde9a696e4b8aae694bfe4bc81e98787e8b4ade4ba91e5b9b3e58fb0e694bfe98787e4ba91e79a84e6b7b7e59088e4ba91e8b7a8e7bd91e696b9e6a188e5ae9ee8b7b5-li><input type=checkbox id=m-zh-cnblog20230322e585a8e59bbde9a696e4b8aae694bfe4bc81e98787e8b4ade4ba91e5b9b3e58fb0e694bfe98787e4ba91e79a84e6b7b7e59088e4ba91e8b7a8e7bd91e696b9e6a188e5ae9ee8b7b5-check>
<label for=m-zh-cnblog20230322e585a8e59bbde9a696e4b8aae694bfe4bc81e98787e8b4ade4ba91e5b9b3e58fb0e694bfe98787e4ba91e79a84e6b7b7e59088e4ba91e8b7a8e7bd91e696b9e6a188e5ae9ee8b7b5-check><a href=/zh-cn/blog/2023/03/22/%E5%85%A8%E5%9B%BD%E9%A6%96%E4%B8%AA%E6%94%BF%E4%BC%81%E9%87%87%E8%B4%AD%E4%BA%91%E5%B9%B3%E5%8F%B0%E6%94%BF%E9%87%87%E4%BA%91%E7%9A%84%E6%B7%B7%E5%90%88%E4%BA%91%E8%B7%A8%E7%BD%91%E6%96%B9%E6%A1%88%E5%AE%9E%E8%B7%B5/ title=全国首个政企采购云平台:政采云的混合云跨网方案实践 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230322e585a8e59bbde9a696e4b8aae694bfe4bc81e98787e8b4ade4ba91e5b9b3e58fb0e694bfe98787e4ba91e79a84e6b7b7e59088e4ba91e8b7a8e7bd91e696b9e6a188e5ae9ee8b7b5><span>政采云</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnblogintegration-li><input type=checkbox id=m-zh-cnblogintegration-check>
<label for=m-zh-cnblogintegration-check><a href=/zh-cn/blog/integration/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnblogintegration><span>生态集成</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20231007e5beaee69c8de58aa1e69c80e4bdb3e5ae9ee8b7b5e99bb6e694b9e980a0e5ae9ee78eb0-spring-cloud-apache-dubbo-e4ba92e9809a-li><input type=checkbox id=m-zh-cnblog20231007e5beaee69c8de58aa1e69c80e4bdb3e5ae9ee8b7b5e99bb6e694b9e980a0e5ae9ee78eb0-spring-cloud-apache-dubbo-e4ba92e9809a-check>
<label for=m-zh-cnblog20231007e5beaee69c8de58aa1e69c80e4bdb3e5ae9ee8b7b5e99bb6e694b9e980a0e5ae9ee78eb0-spring-cloud-apache-dubbo-e4ba92e9809a-check><a href=/zh-cn/blog/2023/10/07/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5%E9%9B%B6%E6%94%B9%E9%80%A0%E5%AE%9E%E7%8E%B0-spring-cloud-apache-dubbo-%E4%BA%92%E9%80%9A/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20231007e5beaee69c8de58aa1e69c80e4bdb3e5ae9ee8b7b5e99bb6e694b9e980a0e5ae9ee78eb0-spring-cloud-apache-dubbo-e4ba92e9809a><span>微服务最佳实践,零改造实现 Spring Cloud & Apache Dubbo 互通</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230628e8b5b0e59091-native-e58c96springdubbo-aot-e68a80e69cafe7a4bae4be8be4b88ee58e9fe79086e8aeb2e8a7a3-li><input type=checkbox id=m-zh-cnblog20230628e8b5b0e59091-native-e58c96springdubbo-aot-e68a80e69cafe7a4bae4be8be4b88ee58e9fe79086e8aeb2e8a7a3-check>
<label for=m-zh-cnblog20230628e8b5b0e59091-native-e58c96springdubbo-aot-e68a80e69cafe7a4bae4be8be4b88ee58e9fe79086e8aeb2e8a7a3-check><a href=/zh-cn/blog/2023/06/28/%E8%B5%B0%E5%90%91-native-%E5%8C%96springdubbo-aot-%E6%8A%80%E6%9C%AF%E7%A4%BA%E4%BE%8B%E4%B8%8E%E5%8E%9F%E7%90%86%E8%AE%B2%E8%A7%A3/ title="走向 Native 化:Spring&amp;Dubbo AOT 技术示例与原理讲解" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230628e8b5b0e59091-native-e58c96springdubbo-aot-e68a80e69cafe7a4bae4be8be4b88ee58e9fe79086e8aeb2e8a7a3><span>走向 Native 化:Dubbo AOT 正式发布</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230401e5a682e4bd95e9809ae8bf87-higress-e7bd91e585b3e4bba3e79086-dubbo-e69c8de58aa1-li><input type=checkbox id=m-zh-cnblog20230401e5a682e4bd95e9809ae8bf87-higress-e7bd91e585b3e4bba3e79086-dubbo-e69c8de58aa1-check>
<label for=m-zh-cnblog20230401e5a682e4bd95e9809ae8bf87-higress-e7bd91e585b3e4bba3e79086-dubbo-e69c8de58aa1-check><a href=/zh-cn/blog/2023/04/01/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87-higress-%E7%BD%91%E5%85%B3%E4%BB%A3%E7%90%86-dubbo-%E6%9C%8D%E5%8A%A1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230401e5a682e4bd95e9809ae8bf87-higress-e7bd91e585b3e4bba3e79086-dubbo-e69c8de58aa1><span>如何通过 Higress 网关代理 Dubbo 服务</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20220504e5a682e4bd95e9809ae8bf87-apache-shenyu-e7bd91e585b3e4bba3e79086-dubbo-e69c8de58aa1-li><input type=checkbox id=m-zh-cnblog20220504e5a682e4bd95e9809ae8bf87-apache-shenyu-e7bd91e585b3e4bba3e79086-dubbo-e69c8de58aa1-check>
<label for=m-zh-cnblog20220504e5a682e4bd95e9809ae8bf87-apache-shenyu-e7bd91e585b3e4bba3e79086-dubbo-e69c8de58aa1-check><a href=/zh-cn/blog/2022/05/04/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87-apache-shenyu-%E7%BD%91%E5%85%B3%E4%BB%A3%E7%90%86-dubbo-%E6%9C%8D%E5%8A%A1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20220504e5a682e4bd95e9809ae8bf87-apache-shenyu-e7bd91e585b3e4bba3e79086-dubbo-e69c8de58aa1><span>如何通过 Apache ShenYu 网关代理 Dubbo 服务</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20220118e4bb8ee58e9fe79086e588b0e6938de4bd9ce8aea9e4bda0e59ca8-apache-apisix-e4b8ade4bba3e79086-dubbo-e69c8de58aa1e69bb4e4bebfe68db7-li><input type=checkbox id=m-zh-cnblog20220118e4bb8ee58e9fe79086e588b0e6938de4bd9ce8aea9e4bda0e59ca8-apache-apisix-e4b8ade4bba3e79086-dubbo-e69c8de58aa1e69bb4e4bebfe68db7-check>
<label for=m-zh-cnblog20220118e4bb8ee58e9fe79086e588b0e6938de4bd9ce8aea9e4bda0e59ca8-apache-apisix-e4b8ade4bba3e79086-dubbo-e69c8de58aa1e69bb4e4bebfe68db7-check><a href=/zh-cn/blog/2022/01/18/%E4%BB%8E%E5%8E%9F%E7%90%86%E5%88%B0%E6%93%8D%E4%BD%9C%E8%AE%A9%E4%BD%A0%E5%9C%A8-apache-apisix-%E4%B8%AD%E4%BB%A3%E7%90%86-dubbo-%E6%9C%8D%E5%8A%A1%E6%9B%B4%E4%BE%BF%E6%8D%B7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20220118e4bb8ee58e9fe79086e588b0e6938de4bd9ce8aea9e4bda0e59ca8-apache-apisix-e4b8ade4bba3e79086-dubbo-e69c8de58aa1e69bb4e4bebfe68db7><span>从原理到操作,让你在 Apache APISIX 中代理 Dubbo 服务更便捷</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20190811e4bdbfe794a8apache-skywalking-incubator-e5819ae58886e5b883e5bc8fe8b79fe8b8aa-li><input type=checkbox id=m-zh-cnblog20190811e4bdbfe794a8apache-skywalking-incubator-e5819ae58886e5b883e5bc8fe8b79fe8b8aa-check>
<label for=m-zh-cnblog20190811e4bdbfe794a8apache-skywalking-incubator-e5819ae58886e5b883e5bc8fe8b79fe8b8aa-check><a href=/zh-cn/blog/2019/08/11/%E4%BD%BF%E7%94%A8apache-skywalking-incubator-%E5%81%9A%E5%88%86%E5%B8%83%E5%BC%8F%E8%B7%9F%E8%B8%AA/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20190811e4bdbfe794a8apache-skywalking-incubator-e5819ae58886e5b883e5bc8fe8b79fe8b8aa><span>使用Apache Skywalking (Incubator) 做分布式跟踪</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20190202e5bd93dubboe98187e4b88aarthase68e92e69fa5e997aee9a298e79a84e5ae9ee8b7b5-li><input type=checkbox id=m-zh-cnblog20190202e5bd93dubboe98187e4b88aarthase68e92e69fa5e997aee9a298e79a84e5ae9ee8b7b5-check>
<label for=m-zh-cnblog20190202e5bd93dubboe98187e4b88aarthase68e92e69fa5e997aee9a298e79a84e5ae9ee8b7b5-check><a href=/zh-cn/blog/2019/02/02/%E5%BD%93dubbo%E9%81%87%E4%B8%8Aarthas%E6%8E%92%E6%9F%A5%E9%97%AE%E9%A2%98%E7%9A%84%E5%AE%9E%E8%B7%B5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20190202e5bd93dubboe98187e4b88aarthase68e92e69fa5e997aee9a298e79a84e5ae9ee8b7b5><span>当Dubbo遇上Arthas:排查问题的实践</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20190117e5a682e4bd95e4bdbfe794a8seatae4bf9de8af81dubboe5beaee69c8de58aa1e997b4e79a84e4b880e887b4e680a7-li><input type=checkbox id=m-zh-cnblog20190117e5a682e4bd95e4bdbfe794a8seatae4bf9de8af81dubboe5beaee69c8de58aa1e997b4e79a84e4b880e887b4e680a7-check>
<label for=m-zh-cnblog20190117e5a682e4bd95e4bdbfe794a8seatae4bf9de8af81dubboe5beaee69c8de58aa1e997b4e79a84e4b880e887b4e680a7-check><a href=/zh-cn/blog/2019/01/17/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8seata%E4%BF%9D%E8%AF%81dubbo%E5%BE%AE%E6%9C%8D%E5%8A%A1%E9%97%B4%E7%9A%84%E4%B8%80%E8%87%B4%E6%80%A7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20190117e5a682e4bd95e4bdbfe794a8seatae4bf9de8af81dubboe5beaee69c8de58aa1e997b4e79a84e4b880e887b4e680a7><span>如何使用Seata保证Dubbo微服务间的一致性</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20190107e696b0e78988-dubbo-admin-e4bb8be7bb8d-li><input type=checkbox id=m-zh-cnblog20190107e696b0e78988-dubbo-admin-e4bb8be7bb8d-check>
<label for=m-zh-cnblog20190107e696b0e78988-dubbo-admin-e4bb8be7bb8d-check><a href=/zh-cn/blog/2019/01/07/%E6%96%B0%E7%89%88-dubbo-admin-%E4%BB%8B%E7%BB%8D/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20190107e696b0e78988-dubbo-admin-e4bb8be7bb8d><span>新版 Dubbo Admin 介绍</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20190105dubbo-e59ca8e7939ce5ad90e4ba8ce6898be8bda6e79a84e5ae9ee8b7b5-li><input type=checkbox id=m-zh-cnblog20190105dubbo-e59ca8e7939ce5ad90e4ba8ce6898be8bda6e79a84e5ae9ee8b7b5-check>
<label for=m-zh-cnblog20190105dubbo-e59ca8e7939ce5ad90e4ba8ce6898be8bda6e79a84e5ae9ee8b7b5-check><a href=/zh-cn/blog/2019/01/05/dubbo-%E5%9C%A8%E7%93%9C%E5%AD%90%E4%BA%8C%E6%89%8B%E8%BD%A6%E7%9A%84%E5%AE%9E%E8%B7%B5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20190105dubbo-e59ca8e7939ce5ad90e4ba8ce6898be8bda6e79a84e5ae9ee8b7b5><span>Dubbo 在瓜子二手车的实践</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20181107dubbo-e89e8de59088-nacos-e68890e4b8bae6b3a8e5868ce4b8ade5bf83-li><input type=checkbox id=m-zh-cnblog20181107dubbo-e89e8de59088-nacos-e68890e4b8bae6b3a8e5868ce4b8ade5bf83-check>
<label for=m-zh-cnblog20181107dubbo-e89e8de59088-nacos-e68890e4b8bae6b3a8e5868ce4b8ade5bf83-check><a href=/zh-cn/blog/2018/11/07/dubbo-%E8%9E%8D%E5%90%88-nacos-%E6%88%90%E4%B8%BA%E6%B3%A8%E5%86%8C%E4%B8%AD%E5%BF%83/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20181107dubbo-e89e8de59088-nacos-e68890e4b8bae6b3a8e5868ce4b8ade5bf83><span>Dubbo 融合 Nacos 成为注册中心</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180822springe5ba94e794a8e5bfabe9809fe99b86e68890dubbo--hystrix-li><input type=checkbox id=m-zh-cnblog20180822springe5ba94e794a8e5bfabe9809fe99b86e68890dubbo--hystrix-check>
<label for=m-zh-cnblog20180822springe5ba94e794a8e5bfabe9809fe99b86e68890dubbo--hystrix-check><a href=/zh-cn/blog/2018/08/22/spring%E5%BA%94%E7%94%A8%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90dubbo--hystrix/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180822springe5ba94e794a8e5bfabe9809fe99b86e68890dubbo--hystrix><span>Spring应用快速集成Dubbo + Hystrix</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180814e4bb8ee8b7a8e8afade8a880e8b083e794a8e588b0dubbo2js-li><input type=checkbox id=m-zh-cnblog20180814e4bb8ee8b7a8e8afade8a880e8b083e794a8e588b0dubbo2js-check>
<label for=m-zh-cnblog20180814e4bb8ee8b7a8e8afade8a880e8b083e794a8e588b0dubbo2js-check><a href=/zh-cn/blog/2018/08/14/%E4%BB%8E%E8%B7%A8%E8%AF%AD%E8%A8%80%E8%B0%83%E7%94%A8%E5%88%B0dubbo2.js/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180814e4bb8ee8b7a8e8afade8a880e8b083e794a8e588b0dubbo2js><span>从跨语言调用到dubbo2.js</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180807e59ca8-dubbo-e5ba94e794a8e4b8ade4bdbfe794a8-zookeeper-li><input type=checkbox id=m-zh-cnblog20180807e59ca8-dubbo-e5ba94e794a8e4b8ade4bdbfe794a8-zookeeper-check>
<label for=m-zh-cnblog20180807e59ca8-dubbo-e5ba94e794a8e4b8ade4bdbfe794a8-zookeeper-check><a href=/zh-cn/blog/2018/08/07/%E5%9C%A8-dubbo-%E5%BA%94%E7%94%A8%E4%B8%AD%E4%BD%BF%E7%94%A8-zookeeper/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180807e59ca8-dubbo-e5ba94e794a8e4b8ade4bdbfe794a8-zookeeper><span>在 Dubbo 应用中使用 Zookeeper</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180727sentinel-e4b8ba-dubbo-e69c8de58aa1e4bf9de9a9bee68aa4e888aa-li><input type=checkbox id=m-zh-cnblog20180727sentinel-e4b8ba-dubbo-e69c8de58aa1e4bf9de9a9bee68aa4e888aa-check>
<label for=m-zh-cnblog20180727sentinel-e4b8ba-dubbo-e69c8de58aa1e4bf9de9a9bee68aa4e888aa-check><a href=/zh-cn/blog/2018/07/27/sentinel-%E4%B8%BA-dubbo-%E6%9C%8D%E5%8A%A1%E4%BF%9D%E9%A9%BE%E6%8A%A4%E8%88%AA/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180727sentinel-e4b8ba-dubbo-e69c8de58aa1e4bf9de9a9bee68aa4e888aa><span>Sentinel 为 Dubbo 服务保驾护航</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180712e4bdbfe794a8pinpointe5819ae58886e5b883e5bc8fe8b79fe8b8aa-li><input type=checkbox id=m-zh-cnblog20180712e4bdbfe794a8pinpointe5819ae58886e5b883e5bc8fe8b79fe8b8aa-check>
<label for=m-zh-cnblog20180712e4bdbfe794a8pinpointe5819ae58886e5b883e5bc8fe8b79fe8b8aa-check><a href=/zh-cn/blog/2018/07/12/%E4%BD%BF%E7%94%A8pinpoint%E5%81%9A%E5%88%86%E5%B8%83%E5%BC%8F%E8%B7%9F%E8%B8%AA/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180712e4bdbfe794a8pinpointe5819ae58886e5b883e5bc8fe8b79fe8b8aa><span>使用Pinpoint做分布式跟踪</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180617e59ca8-dubbo-e4b8ade4bdbfe794a8-zipkin-li><input type=checkbox id=m-zh-cnblog20180617e59ca8-dubbo-e4b8ade4bdbfe794a8-zipkin-check>
<label for=m-zh-cnblog20180617e59ca8-dubbo-e4b8ade4bdbfe794a8-zipkin-check><a href=/zh-cn/blog/2018/06/17/%E5%9C%A8-dubbo-%E4%B8%AD%E4%BD%BF%E7%94%A8-zipkin/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180617e59ca8-dubbo-e4b8ade4bdbfe794a8-zipkin><span>在 Dubbo 中使用 Zipkin</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnblogproposals-li><input type=checkbox id=m-zh-cnblogproposals-check>
<label for=m-zh-cnblogproposals-check><a href=/zh-cn/blog/proposals/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnblogproposals><span>技术方案</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230526google-paper-e99da2e59091e4ba91e697b6e4bba3e79a84e5ba94e794a8e5bc80e58f91e696b0e6a8a1e5bc8f-li><input type=checkbox id=m-zh-cnblog20230526google-paper-e99da2e59091e4ba91e697b6e4bba3e79a84e5ba94e794a8e5bc80e58f91e696b0e6a8a1e5bc8f-check>
<label for=m-zh-cnblog20230526google-paper-e99da2e59091e4ba91e697b6e4bba3e79a84e5ba94e794a8e5bc80e58f91e696b0e6a8a1e5bc8f-check><a href=/zh-cn/blog/2023/05/26/google-paper-%E9%9D%A2%E5%90%91%E4%BA%91%E6%97%B6%E4%BB%A3%E7%9A%84%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E6%96%B0%E6%A8%A1%E5%BC%8F/ title="[Google Paper] 面向云时代的应用开发新模式" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230526google-paper-e99da2e59091e4ba91e697b6e4bba3e79a84e5ba94e794a8e5bc80e58f91e696b0e6a8a1e5bc8f><span>面向云时代的应用开发新模式</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230220e68c87e6a087e59f8be782b9-li><input type=checkbox id=m-zh-cnblog20230220e68c87e6a087e59f8be782b9-check>
<label for=m-zh-cnblog20230220e68c87e6a087e59f8be782b9-check><a href=/zh-cn/blog/2023/02/20/%E6%8C%87%E6%A0%87%E5%9F%8B%E7%82%B9/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230220e68c87e6a087e59f8be782b9><span>指标埋点</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230130dubbo3-e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0e8aebee8aea1-li><input type=checkbox id=m-zh-cnblog20230130dubbo3-e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0e8aebee8aea1-check>
<label for=m-zh-cnblog20230130dubbo3-e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0e8aebee8aea1-check><a href=/zh-cn/blog/2023/01/30/dubbo3-%E5%BA%94%E7%94%A8%E7%BA%A7%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0%E8%AE%BE%E8%AE%A1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230130dubbo3-e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0e8aebee8aea1><span>Dubbo3 应用级服务发现设计</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230130e590afe58f91e5bc8fe6b581e68ea7e588b6-li><input type=checkbox id=m-zh-cnblog20230130e590afe58f91e5bc8fe6b581e68ea7e588b6-check>
<label for=m-zh-cnblog20230130e590afe58f91e5bc8fe6b581e68ea7e588b6-check><a href=/zh-cn/blog/2023/01/30/%E5%90%AF%E5%8F%91%E5%BC%8F%E6%B5%81%E6%8E%A7%E5%88%B6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230130e590afe58f91e5bc8fe6b581e68ea7e588b6><span>启发式流控制</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnblogjava-li><input type=checkbox id=m-zh-cnblogjava-check>
<label for=m-zh-cnblogjava-check><a href=/zh-cn/blog/java/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnblogjava><span>Java</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnblogjavademos-li><input type=checkbox id=m-zh-cnblogjavademos-check>
<label for=m-zh-cnblogjavademos-check><a href=/zh-cn/blog/java/demos/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnblogjavademos><span>功能演示</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230105dubbo-e8bf9ee68ea5e5bc82e69e84e5beaee69c8de58aa1e4bd93e7b3bb-e5a49ae58d8fe8aeaee5a49ae6b3a8e5868ce4b8ade5bf83-li><input type=checkbox id=m-zh-cnblog20230105dubbo-e8bf9ee68ea5e5bc82e69e84e5beaee69c8de58aa1e4bd93e7b3bb-e5a49ae58d8fe8aeaee5a49ae6b3a8e5868ce4b8ade5bf83-check>
<label for=m-zh-cnblog20230105dubbo-e8bf9ee68ea5e5bc82e69e84e5beaee69c8de58aa1e4bd93e7b3bb-e5a49ae58d8fe8aeaee5a49ae6b3a8e5868ce4b8ade5bf83-check><a href=/zh-cn/blog/2023/01/05/dubbo-%E8%BF%9E%E6%8E%A5%E5%BC%82%E6%9E%84%E5%BE%AE%E6%9C%8D%E5%8A%A1%E4%BD%93%E7%B3%BB-%E5%A4%9A%E5%8D%8F%E8%AE%AE%E5%A4%9A%E6%B3%A8%E5%86%8C%E4%B8%AD%E5%BF%83/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230105dubbo-e8bf9ee68ea5e5bc82e69e84e5beaee69c8de58aa1e4bd93e7b3bb-e5a49ae58d8fe8aeaee5a49ae6b3a8e5868ce4b8ade5bf83><span>Dubbo 连接异构微服务体系 - 多协议&多注册中心</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20220905proxyless-meshe59ca8dubboe4b8ade79a84e5ae9ee8b7b5-li><input type=checkbox id=m-zh-cnblog20220905proxyless-meshe59ca8dubboe4b8ade79a84e5ae9ee8b7b5-check>
<label for=m-zh-cnblog20220905proxyless-meshe59ca8dubboe4b8ade79a84e5ae9ee8b7b5-check><a href=/zh-cn/blog/2022/09/05/proxyless-mesh%E5%9C%A8dubbo%E4%B8%AD%E7%9A%84%E5%AE%9E%E8%B7%B5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20220905proxyless-meshe59ca8dubboe4b8ade79a84e5ae9ee8b7b5><span>Proxyless Mesh在Dubbo中的实践</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20220726rest-e58d8fe8aeae-li><input type=checkbox id=m-zh-cnblog20220726rest-e58d8fe8aeae-check>
<label for=m-zh-cnblog20220726rest-e58d8fe8aeae-check><a href=/zh-cn/blog/2022/07/26/rest-%E5%8D%8F%E8%AE%AE/ title="Rest 协议" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20220726rest-e58d8fe8aeae><span>2.7 版本 Rest 协议实现重构设想</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20201222dubbo-api-docs--apache-dubboe69687e6a1a3e5b195e7a4bae6b58be8af95e5b7a5e585b7-li><input type=checkbox id=m-zh-cnblog20201222dubbo-api-docs--apache-dubboe69687e6a1a3e5b195e7a4bae6b58be8af95e5b7a5e585b7-check>
<label for=m-zh-cnblog20201222dubbo-api-docs--apache-dubboe69687e6a1a3e5b195e7a4bae6b58be8af95e5b7a5e585b7-check><a href=/zh-cn/blog/2020/12/22/dubbo-api-docs--apache-dubbo%E6%96%87%E6%A1%A3%E5%B1%95%E7%A4%BA%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20201222dubbo-api-docs--apache-dubboe69687e6a1a3e5b195e7a4bae6b58be8af95e5b7a5e585b7><span>Dubbo-Api-Docs -- Apache Dubbo文档展示&测试工具</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20191202dubboe6b58be8af95e9aa8ce8af81-li><input type=checkbox id=m-zh-cnblog20191202dubboe6b58be8af95e9aa8ce8af81-check>
<label for=m-zh-cnblog20191202dubboe6b58be8af95e9aa8ce8af81-check><a href=/zh-cn/blog/2019/12/02/dubbo%E6%B5%8B%E8%AF%95%E9%AA%8C%E8%AF%81/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20191202dubboe6b58be8af95e9aa8ce8af81><span>Dubbo测试验证</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20191130dubbo-e59ca8-service-mesh-e4b88be79a84e6809de88083e5928ce696b9e6a188-li><input type=checkbox id=m-zh-cnblog20191130dubbo-e59ca8-service-mesh-e4b88be79a84e6809de88083e5928ce696b9e6a188-check>
<label for=m-zh-cnblog20191130dubbo-e59ca8-service-mesh-e4b88be79a84e6809de88083e5928ce696b9e6a188-check><a href=/zh-cn/blog/2019/11/30/dubbo-%E5%9C%A8-service-mesh-%E4%B8%8B%E7%9A%84%E6%80%9D%E8%80%83%E5%92%8C%E6%96%B9%E6%A1%88/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20191130dubbo-e59ca8-service-mesh-e4b88be79a84e6809de88083e5928ce696b9e6a188><span>Dubbo 在 Service Mesh 下的思考和方案</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20191102dubboe69c8de58aa1e7abafe5bc82e6ada5e68ea5e58fa3e79a84e5ae9ee78eb0e8838ce699afe5928ce5ae9ee8b7b5-li><input type=checkbox id=m-zh-cnblog20191102dubboe69c8de58aa1e7abafe5bc82e6ada5e68ea5e58fa3e79a84e5ae9ee78eb0e8838ce699afe5928ce5ae9ee8b7b5-check>
<label for=m-zh-cnblog20191102dubboe69c8de58aa1e7abafe5bc82e6ada5e68ea5e58fa3e79a84e5ae9ee78eb0e8838ce699afe5928ce5ae9ee8b7b5-check><a href=/zh-cn/blog/2019/11/02/dubbo%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%BC%82%E6%AD%A5%E6%8E%A5%E5%8F%A3%E7%9A%84%E5%AE%9E%E7%8E%B0%E8%83%8C%E6%99%AF%E5%92%8C%E5%AE%9E%E8%B7%B5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20191102dubboe69c8de58aa1e7abafe5bc82e6ada5e68ea5e58fa3e79a84e5ae9ee78eb0e8838ce699afe5928ce5ae9ee8b7b5><span>Dubbo服务端异步接口的实现背景和实践</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20191101dubboe5aea2e688b7e7abafe5bc82e6ada5e68ea5e58fa3e79a84e5ae9ee78eb0e8838ce699afe5928ce5ae9ee8b7b5-li><input type=checkbox id=m-zh-cnblog20191101dubboe5aea2e688b7e7abafe5bc82e6ada5e68ea5e58fa3e79a84e5ae9ee78eb0e8838ce699afe5928ce5ae9ee8b7b5-check>
<label for=m-zh-cnblog20191101dubboe5aea2e688b7e7abafe5bc82e6ada5e68ea5e58fa3e79a84e5ae9ee78eb0e8838ce699afe5928ce5ae9ee8b7b5-check><a href=/zh-cn/blog/2019/11/01/dubbo%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BC%82%E6%AD%A5%E6%8E%A5%E5%8F%A3%E7%9A%84%E5%AE%9E%E7%8E%B0%E8%83%8C%E6%99%AF%E5%92%8C%E5%AE%9E%E8%B7%B5/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20191101dubboe5aea2e688b7e7abafe5bc82e6ada5e68ea5e58fa3e79a84e5ae9ee78eb0e8838ce699afe5928ce5ae9ee8b7b5><span>Dubbo客户端异步接口的实现背景和实践</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20191028dubbo-e59ca8e8b7a8e8afade8a880e5928ce58d8fe8aeaee7a9bfe9808fe680a7e696b9e59091e4b88ae79a84e68ea2e7b4a2e694afe68c81-http2-grpc-e5928c-protobuf-li><input type=checkbox id=m-zh-cnblog20191028dubbo-e59ca8e8b7a8e8afade8a880e5928ce58d8fe8aeaee7a9bfe9808fe680a7e696b9e59091e4b88ae79a84e68ea2e7b4a2e694afe68c81-http2-grpc-e5928c-protobuf-check>
<label for=m-zh-cnblog20191028dubbo-e59ca8e8b7a8e8afade8a880e5928ce58d8fe8aeaee7a9bfe9808fe680a7e696b9e59091e4b88ae79a84e68ea2e7b4a2e694afe68c81-http2-grpc-e5928c-protobuf-check><a href=/zh-cn/blog/2019/10/28/dubbo-%E5%9C%A8%E8%B7%A8%E8%AF%AD%E8%A8%80%E5%92%8C%E5%8D%8F%E8%AE%AE%E7%A9%BF%E9%80%8F%E6%80%A7%E6%96%B9%E5%90%91%E4%B8%8A%E7%9A%84%E6%8E%A2%E7%B4%A2%E6%94%AF%E6%8C%81-http/2-grpc-%E5%92%8C-protobuf/ title="Dubbo 在跨语言和协议穿透性方向上的探索:支持 HTTP/2 gRPC 和 Protobuf" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20191028dubbo-e59ca8e8b7a8e8afade8a880e5928ce58d8fe8aeaee7a9bfe9808fe680a7e696b9e59091e4b88ae79a84e68ea2e7b4a2e694afe68c81-http2-grpc-e5928c-protobuf><span>支持 HTTP/2 gRPC 和 Protobuf</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20191022e69cace59cb0e5ad98e6a0b9e5928ce69cace59cb0e4bcaae8a385-li><input type=checkbox id=m-zh-cnblog20191022e69cace59cb0e5ad98e6a0b9e5928ce69cace59cb0e4bcaae8a385-check>
<label for=m-zh-cnblog20191022e69cace59cb0e5ad98e6a0b9e5928ce69cace59cb0e4bcaae8a385-check><a href=/zh-cn/blog/2019/10/22/%E6%9C%AC%E5%9C%B0%E5%AD%98%E6%A0%B9%E5%92%8C%E6%9C%AC%E5%9C%B0%E4%BC%AA%E8%A3%85/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20191022e69cace59cb0e5ad98e6a0b9e5928ce69cace59cb0e4bcaae8a385><span>本地存根和本地伪装</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20191001e7a094e7a9b6-dubbo-e7bd91e58da1e59cb0e59d80e6b3a8e5868ce697b6e79a84e4b880e782b9e6809de88083-li><input type=checkbox id=m-zh-cnblog20191001e7a094e7a9b6-dubbo-e7bd91e58da1e59cb0e59d80e6b3a8e5868ce697b6e79a84e4b880e782b9e6809de88083-check>
<label for=m-zh-cnblog20191001e7a094e7a9b6-dubbo-e7bd91e58da1e59cb0e59d80e6b3a8e5868ce697b6e79a84e4b880e782b9e6809de88083-check><a href=/zh-cn/blog/2019/10/01/%E7%A0%94%E7%A9%B6-dubbo-%E7%BD%91%E5%8D%A1%E5%9C%B0%E5%9D%80%E6%B3%A8%E5%86%8C%E6%97%B6%E7%9A%84%E4%B8%80%E7%82%B9%E6%80%9D%E8%80%83/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20191001e7a094e7a9b6-dubbo-e7bd91e58da1e59cb0e59d80e6b3a8e5868ce697b6e79a84e4b880e782b9e6809de88083><span>研究 Dubbo 网卡地址注册时的一点思考</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20190826service-test-li><input type=checkbox id=m-zh-cnblog20190826service-test-check>
<label for=m-zh-cnblog20190826service-test-check><a href=/zh-cn/blog/2019/08/26/service-test/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20190826service-test><span>Dubbo Admin服务测试功能</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20190811e69cace59cb0e8b083e794a8-li><input type=checkbox id=m-zh-cnblog20190811e69cace59cb0e8b083e794a8-check>
<label for=m-zh-cnblog20190811e69cace59cb0e8b083e794a8-check><a href=/zh-cn/blog/2019/08/11/%E6%9C%AC%E5%9C%B0%E8%B0%83%E7%94%A8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20190811e69cace59cb0e8b083e794a8><span>本地调用</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20190726e59ca8-dubbo-e4b8ade4bdbfe794a8-rest-li><input type=checkbox id=m-zh-cnblog20190726e59ca8-dubbo-e4b8ade4bdbfe794a8-rest-check>
<label for=m-zh-cnblog20190726e59ca8-dubbo-e4b8ade4bdbfe794a8-rest-check><a href=/zh-cn/blog/2019/07/26/%E5%9C%A8-dubbo-%E4%B8%AD%E4%BD%BF%E7%94%A8-rest/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20190726e59ca8-dubbo-e4b8ade4bdbfe794a8-rest><span>在 Dubbo 中使用 REST</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20190622e4bdbfe794a8-dubbo-e8bf9ee68ea5e5bc82e69e84e5beaee69c8de58aa1e4bd93e7b3bb-li><input type=checkbox id=m-zh-cnblog20190622e4bdbfe794a8-dubbo-e8bf9ee68ea5e5bc82e69e84e5beaee69c8de58aa1e4bd93e7b3bb-check>
<label for=m-zh-cnblog20190622e4bdbfe794a8-dubbo-e8bf9ee68ea5e5bc82e69e84e5beaee69c8de58aa1e4bd93e7b3bb-check><a href=/zh-cn/blog/2019/06/22/%E4%BD%BF%E7%94%A8-dubbo-%E8%BF%9E%E6%8E%A5%E5%BC%82%E6%9E%84%E5%BE%AE%E6%9C%8D%E5%8A%A1%E4%BD%93%E7%B3%BB/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20190622e4bdbfe794a8-dubbo-e8bf9ee68ea5e5bc82e69e84e5beaee69c8de58aa1e4bd93e7b3bb><span>使用 Dubbo 连接异构微服务体系</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20190502dubboe58fafe689a9e5b195e69cbae588b6e6ba90e7a081e8a7a3e69e90-li><input type=checkbox id=m-zh-cnblog20190502dubboe58fafe689a9e5b195e69cbae588b6e6ba90e7a081e8a7a3e69e90-check>
<label for=m-zh-cnblog20190502dubboe58fafe689a9e5b195e69cbae588b6e6ba90e7a081e8a7a3e69e90-check><a href=/zh-cn/blog/2019/05/02/dubbo%E5%8F%AF%E6%89%A9%E5%B1%95%E6%9C%BA%E5%88%B6%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20190502dubboe58fafe689a9e5b195e69cbae588b6e6ba90e7a081e8a7a3e69e90><span>Dubbo可扩展机制源码解析</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20190501dubbo-e4b880e887b4e680a7hashe8b49fe8bdbde59d87e8a1a1e5ae9ee78eb0e58996e69e90-li><input type=checkbox id=m-zh-cnblog20190501dubbo-e4b880e887b4e680a7hashe8b49fe8bdbde59d87e8a1a1e5ae9ee78eb0e58996e69e90-check>
<label for=m-zh-cnblog20190501dubbo-e4b880e887b4e680a7hashe8b49fe8bdbde59d87e8a1a1e5ae9ee78eb0e58996e69e90-check><a href=/zh-cn/blog/2019/05/01/dubbo-%E4%B8%80%E8%87%B4%E6%80%A7hash%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%AE%9E%E7%8E%B0%E5%89%96%E6%9E%90/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20190501dubbo-e4b880e887b4e680a7hashe8b49fe8bdbde59d87e8a1a1e5ae9ee78eb0e58996e69e90><span>Dubbo 一致性Hash负载均衡实现剖析</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20190425dubboe58fafe689a9e5b195e69cbae588b6e5ae9ee68898-li><input type=checkbox id=m-zh-cnblog20190425dubboe58fafe689a9e5b195e69cbae588b6e5ae9ee68898-check>
<label for=m-zh-cnblog20190425dubboe58fafe689a9e5b195e69cbae588b6e5ae9ee68898-check><a href=/zh-cn/blog/2019/04/25/dubbo%E5%8F%AF%E6%89%A9%E5%B1%95%E6%9C%BA%E5%88%B6%E5%AE%9E%E6%88%98/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20190425dubboe58fafe689a9e5b195e69cbae588b6e5ae9ee68898><span>Dubbo可扩展机制实战</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20190203e68f90e5898dife588a4e696ade5b8aee58aa9cpue58886e694afe9a284e6b58b-li><input type=checkbox id=m-zh-cnblog20190203e68f90e5898dife588a4e696ade5b8aee58aa9cpue58886e694afe9a284e6b58b-check>
<label for=m-zh-cnblog20190203e68f90e5898dife588a4e696ade5b8aee58aa9cpue58886e694afe9a284e6b58b-check><a href=/zh-cn/blog/2019/02/03/%E6%8F%90%E5%89%8Dif%E5%88%A4%E6%96%AD%E5%B8%AE%E5%8A%A9cpu%E5%88%86%E6%94%AF%E9%A2%84%E6%B5%8B/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20190203e68f90e5898dife588a4e696ade5b8aee58aa9cpue58886e694afe9a284e6b58b><span>提前if判断帮助CPU分支预测</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20190107e6b585e8b088-rpc-li><input type=checkbox id=m-zh-cnblog20190107e6b585e8b088-rpc-check>
<label for=m-zh-cnblog20190107e6b585e8b088-rpc-check><a href=/zh-cn/blog/2019/01/07/%E6%B5%85%E8%B0%88-rpc/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20190107e6b585e8b088-rpc><span>浅谈 RPC</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20181027dubboe69c8de58aa1e58886e7bb84e5928ce78988e69cace8819ae59088-li><input type=checkbox id=m-zh-cnblog20181027dubboe69c8de58aa1e58886e7bb84e5928ce78988e69cace8819ae59088-check>
<label for=m-zh-cnblog20181027dubboe69c8de58aa1e58886e7bb84e5928ce78988e69cace8819ae59088-check><a href=/zh-cn/blog/2018/10/27/dubbo%E6%9C%8D%E5%8A%A1%E5%88%86%E7%BB%84%E5%92%8C%E7%89%88%E6%9C%AC%E8%81%9A%E5%90%88/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20181027dubboe69c8de58aa1e58886e7bb84e5928ce78988e69cace8819ae59088><span>Dubbo服务分组和版本聚合</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20181005dubbo-e58d8fe8aeaee8afa6e8a7a3-li><input type=checkbox id=m-zh-cnblog20181005dubbo-e58d8fe8aeaee8afa6e8a7a3-check>
<label for=m-zh-cnblog20181005dubbo-e58d8fe8aeaee8afa6e8a7a3-check><a href=/zh-cn/blog/2018/10/05/dubbo-%E5%8D%8F%E8%AE%AE%E8%AF%A6%E8%A7%A3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20181005dubbo-e58d8fe8aeaee8afa6e8a7a3><span>Dubbo 协议详解</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180930dubboe4b88ekubernetese99b86e68890-li><input type=checkbox id=m-zh-cnblog20180930dubboe4b88ekubernetese99b86e68890-check>
<label for=m-zh-cnblog20180930dubboe4b88ekubernetese99b86e68890-check><a href=/zh-cn/blog/2018/09/30/dubbo%E4%B8%8Ekubernetes%E9%9B%86%E6%88%90/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180930dubboe4b88ekubernetese99b86e68890><span>Dubbo与Kubernetes集成</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180920dubbo-mesh-service-meshe79a84e5ae9ee8b7b5e4b88ee68ea2e7b4a2-li><input type=checkbox id=m-zh-cnblog20180920dubbo-mesh-service-meshe79a84e5ae9ee8b7b5e4b88ee68ea2e7b4a2-check>
<label for=m-zh-cnblog20180920dubbo-mesh-service-meshe79a84e5ae9ee8b7b5e4b88ee68ea2e7b4a2-check><a href=/zh-cn/blog/2018/09/20/dubbo-mesh-service-mesh%E7%9A%84%E5%AE%9E%E8%B7%B5%E4%B8%8E%E6%8E%A2%E7%B4%A2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180920dubbo-mesh-service-meshe79a84e5ae9ee8b7b5e4b88ee68ea2e7b4a2><span>Dubbo Mesh | Service Mesh的实践与探索</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180902e5a682e4bd95e59fbae4ba8edubboe5ae9ee78eb0e585a8e5bc82e6ada5e8b083e794a8e993be-li><input type=checkbox id=m-zh-cnblog20180902e5a682e4bd95e59fbae4ba8edubboe5ae9ee78eb0e585a8e5bc82e6ada5e8b083e794a8e993be-check>
<label for=m-zh-cnblog20180902e5a682e4bd95e59fbae4ba8edubboe5ae9ee78eb0e585a8e5bc82e6ada5e8b083e794a8e993be-check><a href=/zh-cn/blog/2018/09/02/%E5%A6%82%E4%BD%95%E5%9F%BA%E4%BA%8Edubbo%E5%AE%9E%E7%8E%B0%E5%85%A8%E5%BC%82%E6%AD%A5%E8%B0%83%E7%94%A8%E9%93%BE/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180902e5a682e4bd95e59fbae4ba8edubboe5ae9ee78eb0e585a8e5bc82e6ada5e8b083e794a8e993be><span>如何基于Dubbo实现全异步调用链</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180822dubbo-e99b86e7bea4e5aeb9e99499-li><input type=checkbox id=m-zh-cnblog20180822dubbo-e99b86e7bea4e5aeb9e99499-check>
<label for=m-zh-cnblog20180822dubbo-e99b86e7bea4e5aeb9e99499-check><a href=/zh-cn/blog/2018/08/22/dubbo-%E9%9B%86%E7%BE%A4%E5%AE%B9%E9%94%99/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180822dubbo-e99b86e7bea4e5aeb9e99499><span>Dubbo 集群容错</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180819dubbo-e78eb0e69c89e5bf83e8b7b3e696b9e6a188e680bbe7bb93e4bba5e58f8ae694b9e8bf9be5bbbae8aeae-li><input type=checkbox id=m-zh-cnblog20180819dubbo-e78eb0e69c89e5bf83e8b7b3e696b9e6a188e680bbe7bb93e4bba5e58f8ae694b9e8bf9be5bbbae8aeae-check>
<label for=m-zh-cnblog20180819dubbo-e78eb0e69c89e5bf83e8b7b3e696b9e6a188e680bbe7bb93e4bba5e58f8ae694b9e8bf9be5bbbae8aeae-check><a href=/zh-cn/blog/2018/08/19/dubbo-%E7%8E%B0%E6%9C%89%E5%BF%83%E8%B7%B3%E6%96%B9%E6%A1%88%E6%80%BB%E7%BB%93%E4%BB%A5%E5%8F%8A%E6%94%B9%E8%BF%9B%E5%BB%BA%E8%AE%AE/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180819dubbo-e78eb0e69c89e5bf83e8b7b3e696b9e6a188e680bbe7bb93e4bba5e58f8ae694b9e8bf9be5bbbae8aeae><span>Dubbo 现有心跳方案总结以及改进建议</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180815dubbo27-e4b889e5a4a7e696b0e789b9e680a7e8afa6e8a7a3-li><input type=checkbox id=m-zh-cnblog20180815dubbo27-e4b889e5a4a7e696b0e789b9e680a7e8afa6e8a7a3-check>
<label for=m-zh-cnblog20180815dubbo27-e4b889e5a4a7e696b0e789b9e680a7e8afa6e8a7a3-check><a href=/zh-cn/blog/2018/08/15/dubbo2.7-%E4%B8%89%E5%A4%A7%E6%96%B0%E7%89%B9%E6%80%A7%E8%AF%A6%E8%A7%A3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180815dubbo27-e4b889e5a4a7e696b0e789b9e680a7e8afa6e8a7a3><span>Dubbo2.7 三大新特性详解</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180814dubbo-e585b3e4ba8ee5908ce6ada5e5bc82e6ada5e8b083e794a8e79a84e587a0e7a78de696b9e5bc8f-li><input type=checkbox id=m-zh-cnblog20180814dubbo-e585b3e4ba8ee5908ce6ada5e5bc82e6ada5e8b083e794a8e79a84e587a0e7a78de696b9e5bc8f-check>
<label for=m-zh-cnblog20180814dubbo-e585b3e4ba8ee5908ce6ada5e5bc82e6ada5e8b083e794a8e79a84e587a0e7a78de696b9e5bc8f-check><a href=/zh-cn/blog/2018/08/14/dubbo-%E5%85%B3%E4%BA%8E%E5%90%8C%E6%AD%A5/%E5%BC%82%E6%AD%A5%E8%B0%83%E7%94%A8%E7%9A%84%E5%87%A0%E7%A7%8D%E6%96%B9%E5%BC%8F/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180814dubbo-e585b3e4ba8ee5908ce6ada5e5bc82e6ada5e8b083e794a8e79a84e587a0e7a78de696b9e5bc8f><span>Dubbo 关于同步/异步调用的几种方式</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180814dubbo-e59fbae69cace794a8e6b395-dubbo-consumer-e9858de7bdae-li><input type=checkbox id=m-zh-cnblog20180814dubbo-e59fbae69cace794a8e6b395-dubbo-consumer-e9858de7bdae-check>
<label for=m-zh-cnblog20180814dubbo-e59fbae69cace794a8e6b395-dubbo-consumer-e9858de7bdae-check><a href=/zh-cn/blog/2018/08/14/dubbo-%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95-dubbo-consumer-%E9%85%8D%E7%BD%AE/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180814dubbo-e59fbae69cace794a8e6b395-dubbo-consumer-e9858de7bdae><span>Dubbo 基本用法 - Dubbo Consumer 配置</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180814dubbo-e59fbae7a180e794a8e6b395-provider-e9858de7bdae-li><input type=checkbox id=m-zh-cnblog20180814dubbo-e59fbae7a180e794a8e6b395-provider-e9858de7bdae-check>
<label for=m-zh-cnblog20180814dubbo-e59fbae7a180e794a8e6b395-provider-e9858de7bdae-check><a href=/zh-cn/blog/2018/08/14/dubbo-%E5%9F%BA%E7%A1%80%E7%94%A8%E6%B3%95-provider-%E9%85%8D%E7%BD%AE/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180814dubbo-e59fbae7a180e794a8e6b395-provider-e9858de7bdae><span>Dubbo 基础用法 - Provider 配置</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180814dubbo-e4bc98e99b85e5819ce69cba-li><input type=checkbox id=m-zh-cnblog20180814dubbo-e4bc98e99b85e5819ce69cba-check>
<label for=m-zh-cnblog20180814dubbo-e4bc98e99b85e5819ce69cba-check><a href=/zh-cn/blog/2018/08/14/dubbo-%E4%BC%98%E9%9B%85%E5%81%9C%E6%9C%BA/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180814dubbo-e4bc98e99b85e5819ce69cba><span>Dubbo 优雅停机</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180814dubboe79a84e6b39be58c96e8b083e794a8-li><input type=checkbox id=m-zh-cnblog20180814dubboe79a84e6b39be58c96e8b083e794a8-check>
<label for=m-zh-cnblog20180814dubboe79a84e6b39be58c96e8b083e794a8-check><a href=/zh-cn/blog/2018/08/14/dubbo%E7%9A%84%E6%B3%9B%E5%8C%96%E8%B0%83%E7%94%A8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180814dubboe79a84e6b39be58c96e8b083e794a8><span>Dubbo的泛化调用</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180814spring-boot-dubboe5ba94e794a8e590afe5819ce6ba90e7a081e58886e69e90-li><input type=checkbox id=m-zh-cnblog20180814spring-boot-dubboe5ba94e794a8e590afe5819ce6ba90e7a081e58886e69e90-check>
<label for=m-zh-cnblog20180814spring-boot-dubboe5ba94e794a8e590afe5819ce6ba90e7a081e58886e69e90-check><a href=/zh-cn/blog/2018/08/14/spring-boot-dubbo%E5%BA%94%E7%94%A8%E5%90%AF%E5%81%9C%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180814spring-boot-dubboe5ba94e794a8e590afe5819ce6ba90e7a081e58886e69e90><span>Spring Boot Dubbo应用启停源码分析</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180814e9809ae8bf87qose5afb9e69c8de58aa1e8bf9be8a18ce58aa8e68081e68ea7e588b6-li><input type=checkbox id=m-zh-cnblog20180814e9809ae8bf87qose5afb9e69c8de58aa1e8bf9be8a18ce58aa8e68081e68ea7e588b6-check>
<label for=m-zh-cnblog20180814e9809ae8bf87qose5afb9e69c8de58aa1e8bf9be8a18ce58aa8e68081e68ea7e588b6-check><a href=/zh-cn/blog/2018/08/14/%E9%80%9A%E8%BF%87qos%E5%AF%B9%E6%9C%8D%E5%8A%A1%E8%BF%9B%E8%A1%8C%E5%8A%A8%E6%80%81%E6%8E%A7%E5%88%B6/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180814e9809ae8bf87qose5afb9e69c8de58aa1e8bf9be8a18ce58aa8e68081e68ea7e588b6><span>通过QoS对服务进行动态控制</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180810dubboe79a84e8b49fe8bdbde59d87e8a1a1-li><input type=checkbox id=m-zh-cnblog20180810dubboe79a84e8b49fe8bdbde59d87e8a1a1-check>
<label for=m-zh-cnblog20180810dubboe79a84e8b49fe8bdbde59d87e8a1a1-check><a href=/zh-cn/blog/2018/08/10/dubbo%E7%9A%84%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180810dubboe79a84e8b49fe8bdbde59d87e8a1a1><span>Dubbo的负载均衡</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180807dubbo-e6b3a8e8a7a3e9a9b1e58aa8-li><input type=checkbox id=m-zh-cnblog20180807dubbo-e6b3a8e8a7a3e9a9b1e58aa8-check>
<label for=m-zh-cnblog20180807dubbo-e6b3a8e8a7a3e9a9b1e58aa8-check><a href=/zh-cn/blog/2018/08/07/dubbo-%E6%B3%A8%E8%A7%A3%E9%A9%B1%E5%8A%A8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180807dubbo-e6b3a8e8a7a3e9a9b1e58aa8><span>Dubbo 注解驱动</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180807dubbo-101-li><input type=checkbox id=m-zh-cnblog20180807dubbo-101-check>
<label for=m-zh-cnblog20180807dubbo-101-check><a href=/zh-cn/blog/2018/08/07/dubbo-101/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180807dubbo-101><span>第一个 Dubbo 应用</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180807e4bdbfe794a8jdk17e7bc96e8af91e8bf90e8a18cdubbo-2714e9a1b9e79bae-li><input type=checkbox id=m-zh-cnblog20180807e4bdbfe794a8jdk17e7bc96e8af91e8bf90e8a18cdubbo-2714e9a1b9e79bae-check>
<label for=m-zh-cnblog20180807e4bdbfe794a8jdk17e7bc96e8af91e8bf90e8a18cdubbo-2714e9a1b9e79bae-check><a href=/zh-cn/blog/2018/08/07/%E4%BD%BF%E7%94%A8jdk17%E7%BC%96%E8%AF%91%E8%BF%90%E8%A1%8Cdubbo-2.7.14%E9%A1%B9%E7%9B%AE/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180807e4bdbfe794a8jdk17e7bc96e8af91e8bf90e8a18cdubbo-2714e9a1b9e79bae><span>使用jdk17编译运行dubbo 2.7.14项目</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180807e59ca8-dubbo-e4b8ade4bdbfe794a8e6b3a8e8a7a3-li><input type=checkbox id=m-zh-cnblog20180807e59ca8-dubbo-e4b8ade4bdbfe794a8e6b3a8e8a7a3-check>
<label for=m-zh-cnblog20180807e59ca8-dubbo-e4b8ade4bdbfe794a8e6b3a8e8a7a3-check><a href=/zh-cn/blog/2018/08/07/%E5%9C%A8-dubbo-%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%B3%A8%E8%A7%A3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180807e59ca8-dubbo-e4b8ade4bdbfe794a8e6b3a8e8a7a3><span>在 Dubbo 中使用注解</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180722dubbo-27x-repackage-e5908ee79a84e585bce5aeb9e5ae9ee78eb0e696b9e6a188-li><input type=checkbox id=m-zh-cnblog20180722dubbo-27x-repackage-e5908ee79a84e585bce5aeb9e5ae9ee78eb0e696b9e6a188-check>
<label for=m-zh-cnblog20180722dubbo-27x-repackage-e5908ee79a84e585bce5aeb9e5ae9ee78eb0e696b9e6a188-check><a href=/zh-cn/blog/2018/07/22/dubbo-2.7.x-repackage-%E5%90%8E%E7%9A%84%E5%85%BC%E5%AE%B9%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%A1%88/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180722dubbo-27x-repackage-e5908ee79a84e585bce5aeb9e5ae9ee78eb0e696b9e6a188><span>Dubbo 2.7.x repackage 后的兼容实现方案</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180712dubbo-e4b88ae4b88be69687e4bfa1e681af-li><input type=checkbox id=m-zh-cnblog20180712dubbo-e4b88ae4b88be69687e4bfa1e681af-check>
<label for=m-zh-cnblog20180712dubbo-e4b88ae4b88be69687e4bfa1e681af-check><a href=/zh-cn/blog/2018/07/12/dubbo-%E4%B8%8A%E4%B8%8B%E6%96%87%E4%BF%A1%E6%81%AF/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180712dubbo-e4b88ae4b88be69687e4bfa1e681af><span>Dubbo 上下文信息</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180701e7acace4b880e4b8aa-dubbo-filter-li><input type=checkbox id=m-zh-cnblog20180701e7acace4b880e4b8aa-dubbo-filter-check>
<label for=m-zh-cnblog20180701e7acace4b880e4b8aa-dubbo-filter-check><a href=/zh-cn/blog/2018/07/01/%E7%AC%AC%E4%B8%80%E4%B8%AA-dubbo-filter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180701e7acace4b880e4b8aa-dubbo-filter><span>第一个 Dubbo Filter</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180626e59b9ee5a3b0e6b58be8af95-li><input type=checkbox id=m-zh-cnblog20180626e59b9ee5a3b0e6b58be8af95-check>
<label for=m-zh-cnblog20180626e59b9ee5a3b0e6b58be8af95-check><a href=/zh-cn/blog/2018/06/26/%E5%9B%9E%E5%A3%B0%E6%B5%8B%E8%AF%95/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180626e59b9ee5a3b0e6b58be8af95><span>回声测试</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180603e4bba5-dubbo-e4b8bae4be8be8818ae8818ae5a682e4bd95e59091e5bc80e6ba90e9a1b9e79baee5819ae8b4a1e78cae-li><input type=checkbox id=m-zh-cnblog20180603e4bba5-dubbo-e4b8bae4be8be8818ae8818ae5a682e4bd95e59091e5bc80e6ba90e9a1b9e79baee5819ae8b4a1e78cae-check>
<label for=m-zh-cnblog20180603e4bba5-dubbo-e4b8bae4be8be8818ae8818ae5a682e4bd95e59091e5bc80e6ba90e9a1b9e79baee5819ae8b4a1e78cae-check><a href=/zh-cn/blog/2018/06/03/%E4%BB%A5-dubbo-%E4%B8%BA%E4%BE%8B%E8%81%8A%E8%81%8A%E5%A6%82%E4%BD%95%E5%90%91%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E5%81%9A%E8%B4%A1%E7%8C%AE/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180603e4bba5-dubbo-e4b8bae4be8be8818ae8818ae5a682e4bd95e59091e5bc80e6ba90e9a1b9e79baee5819ae8b4a1e78cae><span>以 Dubbo 为例,聊聊如何向开源项目做贡献</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180521dubbo-e5a496e983a8e58c96e9858de7bdae-li><input type=checkbox id=m-zh-cnblog20180521dubbo-e5a496e983a8e58c96e9858de7bdae-check>
<label for=m-zh-cnblog20180521dubbo-e5a496e983a8e58c96e9858de7bdae-check><a href=/zh-cn/blog/2018/05/21/dubbo-%E5%A4%96%E9%83%A8%E5%8C%96%E9%85%8D%E7%BD%AE/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180521dubbo-e5a496e983a8e58c96e9858de7bdae><span>Dubbo 外部化配置</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20180101dubbo-e58d9ae5aea2e69687e6a1a3e4b8ade69687e68e92e78988e68c87e58d97-li><input type=checkbox id=m-zh-cnblog20180101dubbo-e58d9ae5aea2e69687e6a1a3e4b8ade69687e68e92e78988e68c87e58d97-check>
<label for=m-zh-cnblog20180101dubbo-e58d9ae5aea2e69687e6a1a3e4b8ade69687e68e92e78988e68c87e58d97-check><a href=/zh-cn/blog/2018/01/01/dubbo-%E5%8D%9A%E5%AE%A2%E6%96%87%E6%A1%A3%E4%B8%AD%E6%96%87%E6%8E%92%E7%89%88%E6%8C%87%E5%8D%97/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20180101dubbo-e58d9ae5aea2e69687e6a1a3e4b8ade69687e68e92e78988e68c87e58d97><span>Dubbo 博客文档中文排版指南</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnblogjavacodeanalysis-li><input type=checkbox id=m-zh-cnblogjavacodeanalysis-check>
<label for=m-zh-cnblogjavacodeanalysis-check><a href=/zh-cn/blog/java/codeanalysis/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnblogjavacodeanalysis><span>源码分析</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnblogjavacodeanalysismetrics-li><input type=checkbox id=m-zh-cnblogjavacodeanalysismetrics-check>
<label for=m-zh-cnblogjavacodeanalysismetrics-check><a href=/zh-cn/blog/java/codeanalysis/metrics/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnblogjavacodeanalysismetrics><span>dubbo-metrics 指标模块源码浅析</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20230428e5bc95e8a880-li><input type=checkbox id=m-zh-cnblog20230428e5bc95e8a880-check>
<label for=m-zh-cnblog20230428e5bc95e8a880-check><a href=/zh-cn/blog/2023/04/28/%E5%BC%95%E8%A8%80/ title=引言 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20230428e5bc95e8a880><span>0-引言</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog202304281-e68c87e6a087e6a0b7e69cace79a84e694b6e99b86e4b88ee5ad98e582a8-li><input type=checkbox id=m-zh-cnblog202304281-e68c87e6a087e6a0b7e69cace79a84e694b6e99b86e4b88ee5ad98e582a8-check>
<label for=m-zh-cnblog202304281-e68c87e6a087e6a0b7e69cace79a84e694b6e99b86e4b88ee5ad98e582a8-check><a href=/zh-cn/blog/2023/04/28/1-%E6%8C%87%E6%A0%87%E6%A0%B7%E6%9C%AC%E7%9A%84%E6%94%B6%E9%9B%86%E4%B8%8E%E5%AD%98%E5%82%A8/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog202304281-e68c87e6a087e6a0b7e69cace79a84e694b6e99b86e4b88ee5ad98e582a8><span>1-指标样本的收集与存储</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog202304282-e68c87e6a087e694b6e99b86e599a8e79a84e68c87e6a087e98787e99b86e6b581e7a88b-li><input type=checkbox id=m-zh-cnblog202304282-e68c87e6a087e694b6e99b86e599a8e79a84e68c87e6a087e98787e99b86e6b581e7a88b-check>
<label for=m-zh-cnblog202304282-e68c87e6a087e694b6e99b86e599a8e79a84e68c87e6a087e98787e99b86e6b581e7a88b-check><a href=/zh-cn/blog/2023/04/28/2-%E6%8C%87%E6%A0%87%E6%94%B6%E9%9B%86%E5%99%A8%E7%9A%84%E6%8C%87%E6%A0%87%E9%87%87%E9%9B%86%E6%B5%81%E7%A8%8B/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog202304282-e68c87e6a087e694b6e99b86e599a8e79a84e68c87e6a087e98787e99b86e6b581e7a88b><span>2-指标收集器的指标采集流程</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog202304283-e68c87e6a087e79b91e590ace6b3a8e5868ce6a2b3e79086-li><input type=checkbox id=m-zh-cnblog202304283-e68c87e6a087e79b91e590ace6b3a8e5868ce6a2b3e79086-check>
<label for=m-zh-cnblog202304283-e68c87e6a087e79b91e590ace6b3a8e5868ce6a2b3e79086-check><a href=/zh-cn/blog/2023/04/28/3-%E6%8C%87%E6%A0%87%E7%9B%91%E5%90%AC%E6%B3%A8%E5%86%8C%E6%A2%B3%E7%90%86/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog202304283-e68c87e6a087e79b91e590ace6b3a8e5868ce6a2b3e79086><span>3-指标监听注册梳理</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog202304284-e68c87e6a087e8bdace68da2e4b88ee5afbce587ba-li><input type=checkbox id=m-zh-cnblog202304284-e68c87e6a087e8bdace68da2e4b88ee5afbce587ba-check>
<label for=m-zh-cnblog202304284-e68c87e6a087e8bdace68da2e4b88ee5afbce587ba-check><a href=/zh-cn/blog/2023/04/28/4-%E6%8C%87%E6%A0%87%E8%BD%AC%E6%8D%A2%E4%B8%8E%E5%AF%BC%E5%87%BA/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog202304284-e68c87e6a087e8bdace68da2e4b88ee5afbce587ba><span>4-指标转换与导出</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnblogjavacodeanalysis308-li><input type=checkbox id=m-zh-cnblogjavacodeanalysis308-check>
<label for=m-zh-cnblogjavacodeanalysis308-check><a href=/zh-cn/blog/java/codeanalysis/3.0.8/ title="Dubbo 3.0.8 源码解析" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnblogjavacodeanalysis308><span>Dubbo3 [v3.0.8] 源码解析</span></a></label><ul class="ul-4 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022082222-dubbo3e6b688e8b4b9e88085e887aae58aa8e6849fe5ba94e586b3e7ad96e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0e58e9fe79086-li><input type=checkbox id=m-zh-cnblog2022082222-dubbo3e6b688e8b4b9e88085e887aae58aa8e6849fe5ba94e586b3e7ad96e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0e58e9fe79086-check>
<label for=m-zh-cnblog2022082222-dubbo3e6b688e8b4b9e88085e887aae58aa8e6849fe5ba94e586b3e7ad96e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0e58e9fe79086-check><a href=/zh-cn/blog/2022/08/22/22-dubbo3%E6%B6%88%E8%B4%B9%E8%80%85%E8%87%AA%E5%8A%A8%E6%84%9F%E5%BA%94%E5%86%B3%E7%AD%96%E5%BA%94%E7%94%A8%E7%BA%A7%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0%E5%8E%9F%E7%90%86/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022082222-dubbo3e6b688e8b4b9e88085e887aae58aa8e6849fe5ba94e586b3e7ad96e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0e58e9fe79086><span>22-Dubbo3消费者自动感应决策应用级服务发现原理</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022082121-dubbo3e6b688e8b4b9e88085e5bc95e794a8e69c8de58aa1e585a5e58fa3-li><input type=checkbox id=m-zh-cnblog2022082121-dubbo3e6b688e8b4b9e88085e5bc95e794a8e69c8de58aa1e585a5e58fa3-check>
<label for=m-zh-cnblog2022082121-dubbo3e6b688e8b4b9e88085e5bc95e794a8e69c8de58aa1e585a5e58fa3-check><a href=/zh-cn/blog/2022/08/21/21-dubbo3%E6%B6%88%E8%B4%B9%E8%80%85%E5%BC%95%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%85%A5%E5%8F%A3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022082121-dubbo3e6b688e8b4b9e88085e5bc95e794a8e69c8de58aa1e585a5e58fa3><span>21-Dubbo3消费者引用服务入口</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022082020-dubbo3e69c8de58aa1e5bc95e794a8e9858de7bdaereferenceconfig-li><input type=checkbox id=m-zh-cnblog2022082020-dubbo3e69c8de58aa1e5bc95e794a8e9858de7bdaereferenceconfig-check>
<label for=m-zh-cnblog2022082020-dubbo3e69c8de58aa1e5bc95e794a8e9858de7bdaereferenceconfig-check><a href=/zh-cn/blog/2022/08/20/20-dubbo3%E6%9C%8D%E5%8A%A1%E5%BC%95%E7%94%A8%E9%85%8D%E7%BD%AEreferenceconfig/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022082020-dubbo3e69c8de58aa1e5bc95e794a8e9858de7bdaereferenceconfig><span>20-Dubbo3服务引用配置ReferenceConfig</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022081919-e9878de696b0e69da5e8bf87e4bb8ee4b880e4b8aae69c8de58aa1e6b688e8b4b9e88085e79a84demoe8afb4e8b5b7-li><input type=checkbox id=m-zh-cnblog2022081919-e9878de696b0e69da5e8bf87e4bb8ee4b880e4b8aae69c8de58aa1e6b688e8b4b9e88085e79a84demoe8afb4e8b5b7-check>
<label for=m-zh-cnblog2022081919-e9878de696b0e69da5e8bf87e4bb8ee4b880e4b8aae69c8de58aa1e6b688e8b4b9e88085e79a84demoe8afb4e8b5b7-check><a href=/zh-cn/blog/2022/08/19/19-%E9%87%8D%E6%96%B0%E6%9D%A5%E8%BF%87%E4%BB%8E%E4%B8%80%E4%B8%AA%E6%9C%8D%E5%8A%A1%E6%B6%88%E8%B4%B9%E8%80%85%E7%9A%84demo%E8%AF%B4%E8%B5%B7/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022081919-e9878de696b0e69da5e8bf87e4bb8ee4b880e4b8aae69c8de58aa1e6b688e8b4b9e88085e79a84demoe8afb4e8b5b7><span>19 重新来过从一个服务消费者的Demo说起</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022081818-dubbo3e58583e695b0e68daee69c8de58aa1metadataservicee79a84e5afbce587ba-li><input type=checkbox id=m-zh-cnblog2022081818-dubbo3e58583e695b0e68daee69c8de58aa1metadataservicee79a84e5afbce587ba-check>
<label for=m-zh-cnblog2022081818-dubbo3e58583e695b0e68daee69c8de58aa1metadataservicee79a84e5afbce587ba-check><a href=/zh-cn/blog/2022/08/18/18-dubbo3%E5%85%83%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1metadataservice%E7%9A%84%E5%AF%BC%E5%87%BA/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022081818-dubbo3e58583e695b0e68daee69c8de58aa1metadataservicee79a84e5afbce587ba><span>18-Dubbo3元数据服务MetadataService的导出</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022081717-dubboe69c8de58aa1e68f90e4be9be88085e79a84e58f8ce6b3a8e5868ce58e9fe79086-li><input type=checkbox id=m-zh-cnblog2022081717-dubboe69c8de58aa1e68f90e4be9be88085e79a84e58f8ce6b3a8e5868ce58e9fe79086-check>
<label for=m-zh-cnblog2022081717-dubboe69c8de58aa1e68f90e4be9be88085e79a84e58f8ce6b3a8e5868ce58e9fe79086-check><a href=/zh-cn/blog/2022/08/17/17-dubbo%E6%9C%8D%E5%8A%A1%E6%8F%90%E4%BE%9B%E8%80%85%E7%9A%84%E5%8F%8C%E6%B3%A8%E5%86%8C%E5%8E%9F%E7%90%86/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022081717-dubboe69c8de58aa1e68f90e4be9be88085e79a84e58f8ce6b3a8e5868ce58e9fe79086><span>17-Dubbo服务提供者的双注册原理</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022081616-e6a8a1e59d97e58f91e5b883e599a8e58f91e5b883e69c8de58aa1e585a8e8bf87e7a88b-li><input type=checkbox id=m-zh-cnblog2022081616-e6a8a1e59d97e58f91e5b883e599a8e58f91e5b883e69c8de58aa1e585a8e8bf87e7a88b-check>
<label for=m-zh-cnblog2022081616-e6a8a1e59d97e58f91e5b883e599a8e58f91e5b883e69c8de58aa1e585a8e8bf87e7a88b-check><a href=/zh-cn/blog/2022/08/16/16-%E6%A8%A1%E5%9D%97%E5%8F%91%E5%B8%83%E5%99%A8%E5%8F%91%E5%B8%83%E6%9C%8D%E5%8A%A1%E5%85%A8%E8%BF%87%E7%A8%8B/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022081616-e6a8a1e59d97e58f91e5b883e599a8e58f91e5b883e69c8de58aa1e585a8e8bf87e7a88b><span>16-模块发布器发布服务全过程</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022081515-dubboe79a84e4b889e5a4a7e4b8ade5bf83e4b98be58583e695b0e68daee4b8ade5bf83e6ba90e7a081e8a7a3e69e90-li><input type=checkbox id=m-zh-cnblog2022081515-dubboe79a84e4b889e5a4a7e4b8ade5bf83e4b98be58583e695b0e68daee4b8ade5bf83e6ba90e7a081e8a7a3e69e90-check>
<label for=m-zh-cnblog2022081515-dubboe79a84e4b889e5a4a7e4b8ade5bf83e4b98be58583e695b0e68daee4b8ade5bf83e6ba90e7a081e8a7a3e69e90-check><a href=/zh-cn/blog/2022/08/15/15-dubbo%E7%9A%84%E4%B8%89%E5%A4%A7%E4%B8%AD%E5%BF%83%E4%B9%8B%E5%85%83%E6%95%B0%E6%8D%AE%E4%B8%AD%E5%BF%83%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022081515-dubboe79a84e4b889e5a4a7e4b8ade5bf83e4b98be58583e695b0e68daee4b8ade5bf83e6ba90e7a081e8a7a3e69e90><span>15-Dubbo的三大中心之元数据中心源码解析</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022081414-dubboe9858de7bdaee58aa0e8bdbde585a8e8a7a3e69e90-li><input type=checkbox id=m-zh-cnblog2022081414-dubboe9858de7bdaee58aa0e8bdbde585a8e8a7a3e69e90-check>
<label for=m-zh-cnblog2022081414-dubboe9858de7bdaee58aa0e8bdbde585a8e8a7a3e69e90-check><a href=/zh-cn/blog/2022/08/14/14-dubbo%E9%85%8D%E7%BD%AE%E5%8A%A0%E8%BD%BD%E5%85%A8%E8%A7%A3%E6%9E%90/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022081414-dubboe9858de7bdaee58aa0e8bdbde585a8e8a7a3e69e90><span>14-Dubbo配置加载全解析</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022081313-dubboe79a84e4b889e5a4a7e4b8ade5bf83e4b98be9858de7bdaee4b8ade5bf83-li><input type=checkbox id=m-zh-cnblog2022081313-dubboe79a84e4b889e5a4a7e4b8ade5bf83e4b98be9858de7bdaee4b8ade5bf83-check>
<label for=m-zh-cnblog2022081313-dubboe79a84e4b889e5a4a7e4b8ade5bf83e4b98be9858de7bdaee4b8ade5bf83-check><a href=/zh-cn/blog/2022/08/13/13-dubbo%E7%9A%84%E4%B8%89%E5%A4%A7%E4%B8%AD%E5%BF%83%E4%B9%8B%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022081313-dubboe79a84e4b889e5a4a7e4b8ade5bf83e4b98be9858de7bdaee4b8ade5bf83><span>13-Dubbo的三大中心之配置中心</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022081212-e585a8e5b180e8a786e9878ee69da5e79c8bdubbo3e79a84e69c8de58aa1e590afe58aa8e7949fe591bde591a8e69c9f-li><input type=checkbox id=m-zh-cnblog2022081212-e585a8e5b180e8a786e9878ee69da5e79c8bdubbo3e79a84e69c8de58aa1e590afe58aa8e7949fe591bde591a8e69c9f-check>
<label for=m-zh-cnblog2022081212-e585a8e5b180e8a786e9878ee69da5e79c8bdubbo3e79a84e69c8de58aa1e590afe58aa8e7949fe591bde591a8e69c9f-check><a href=/zh-cn/blog/2022/08/12/12-%E5%85%A8%E5%B1%80%E8%A7%86%E9%87%8E%E6%9D%A5%E7%9C%8Bdubbo3%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%90%AF%E5%8A%A8%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022081212-e585a8e5b180e8a786e9878ee69da5e79c8bdubbo3e79a84e69c8de58aa1e590afe58aa8e7949fe591bde591a8e69c9f><span>12 全局视野来看Dubbo3的服务启动生命周期</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022081111-dubboe590afe58aa8e599a8dubbobootstrape6b7bbe58aa0e58d8fe8aeaee9858de7bdaee4bfa1e681afprotocolconfig-li><input type=checkbox id=m-zh-cnblog2022081111-dubboe590afe58aa8e599a8dubbobootstrape6b7bbe58aa0e58d8fe8aeaee9858de7bdaee4bfa1e681afprotocolconfig-check>
<label for=m-zh-cnblog2022081111-dubboe590afe58aa8e599a8dubbobootstrape6b7bbe58aa0e58d8fe8aeaee9858de7bdaee4bfa1e681afprotocolconfig-check><a href=/zh-cn/blog/2022/08/11/11-dubbo%E5%90%AF%E5%8A%A8%E5%99%A8dubbobootstrap%E6%B7%BB%E5%8A%A0%E5%8D%8F%E8%AE%AE%E9%85%8D%E7%BD%AE%E4%BF%A1%E6%81%AFprotocolconfig/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022081111-dubboe590afe58aa8e599a8dubbobootstrape6b7bbe58aa0e58d8fe8aeaee9858de7bdaee4bfa1e681afprotocolconfig><span>11-Dubbo启动器DubboBootstrap添加协议配置信息ProtocolConfig</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022081010-dubboe590afe58aa8e599a8dubbobootstrape6b7bbe58aa0e6b3a8e5868ce4b8ade5bf83e9858de7bdaee4bfa1e681afregistryconfig-li><input type=checkbox id=m-zh-cnblog2022081010-dubboe590afe58aa8e599a8dubbobootstrape6b7bbe58aa0e6b3a8e5868ce4b8ade5bf83e9858de7bdaee4bfa1e681afregistryconfig-check>
<label for=m-zh-cnblog2022081010-dubboe590afe58aa8e599a8dubbobootstrape6b7bbe58aa0e6b3a8e5868ce4b8ade5bf83e9858de7bdaee4bfa1e681afregistryconfig-check><a href=/zh-cn/blog/2022/08/10/10-dubbo%E5%90%AF%E5%8A%A8%E5%99%A8dubbobootstrap%E6%B7%BB%E5%8A%A0%E6%B3%A8%E5%86%8C%E4%B8%AD%E5%BF%83%E9%85%8D%E7%BD%AE%E4%BF%A1%E6%81%AFregistryconfig/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022081010-dubboe590afe58aa8e599a8dubbobootstrape6b7bbe58aa0e6b3a8e5868ce4b8ade5bf83e9858de7bdaee4bfa1e681afregistryconfig><span>10-Dubbo启动器DubboBootstrap添加注册中心配置信息RegistryConfig</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog202208099-dubboe590afe58aa8e599a8dubbobootstrape6b7bbe58aa0e5ba94e794a8e7a88be5ba8fe79a84e9858de7bdaee4bfa1e681afapplicationconfig-li><input type=checkbox id=m-zh-cnblog202208099-dubboe590afe58aa8e599a8dubbobootstrape6b7bbe58aa0e5ba94e794a8e7a88be5ba8fe79a84e9858de7bdaee4bfa1e681afapplicationconfig-check>
<label for=m-zh-cnblog202208099-dubboe590afe58aa8e599a8dubbobootstrape6b7bbe58aa0e5ba94e794a8e7a88be5ba8fe79a84e9858de7bdaee4bfa1e681afapplicationconfig-check><a href=/zh-cn/blog/2022/08/09/9-dubbo%E5%90%AF%E5%8A%A8%E5%99%A8dubbobootstrap%E6%B7%BB%E5%8A%A0%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E9%85%8D%E7%BD%AE%E4%BF%A1%E6%81%AFapplicationconfig/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog202208099-dubboe590afe58aa8e599a8dubbobootstrape6b7bbe58aa0e5ba94e794a8e7a88be5ba8fe79a84e9858de7bdaee4bfa1e681afapplicationconfig><span>9-Dubbo启动器DubboBootstrap添加应用程序的配置信息ApplicationConfig</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog202208088-dubboe590afe58aa8e599a8dubbobootstrape5809fe58aa9e58f8ce9878de6a0a1e9aa8ce99481e79a84e58d95e4be8be6a8a1e5bc8fe8bf9be8a18ce5afb9e8b1a1e79a84e5889de5a78be58c96-li><input type=checkbox id=m-zh-cnblog202208088-dubboe590afe58aa8e599a8dubbobootstrape5809fe58aa9e58f8ce9878de6a0a1e9aa8ce99481e79a84e58d95e4be8be6a8a1e5bc8fe8bf9be8a18ce5afb9e8b1a1e79a84e5889de5a78be58c96-check>
<label for=m-zh-cnblog202208088-dubboe590afe58aa8e599a8dubbobootstrape5809fe58aa9e58f8ce9878de6a0a1e9aa8ce99481e79a84e58d95e4be8be6a8a1e5bc8fe8bf9be8a18ce5afb9e8b1a1e79a84e5889de5a78be58c96-check><a href=/zh-cn/blog/2022/08/08/8-dubbo%E5%90%AF%E5%8A%A8%E5%99%A8dubbobootstrap%E5%80%9F%E5%8A%A9%E5%8F%8C%E9%87%8D%E6%A0%A1%E9%AA%8C%E9%94%81%E7%9A%84%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F%E8%BF%9B%E8%A1%8C%E5%AF%B9%E8%B1%A1%E7%9A%84%E5%88%9D%E5%A7%8B%E5%8C%96/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog202208088-dubboe590afe58aa8e599a8dubbobootstrape5809fe58aa9e58f8ce9878de6a0a1e9aa8ce99481e79a84e58d95e4be8be6a8a1e5bc8fe8bf9be8a18ce5afb9e8b1a1e79a84e5889de5a78be58c96><span>8-Dubbo启动器DubboBootstrap借助双重校验锁的单例模式进行对象的初始化</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog202208077-dubboe79a84spie689a9e5b195e69cbae588b6e4b98be887aae58aa8e6bf80e6b4bbe689a9e5b195activatee6ba90e7a081e8a7a3e69e90-li><input type=checkbox id=m-zh-cnblog202208077-dubboe79a84spie689a9e5b195e69cbae588b6e4b98be887aae58aa8e6bf80e6b4bbe689a9e5b195activatee6ba90e7a081e8a7a3e69e90-check>
<label for=m-zh-cnblog202208077-dubboe79a84spie689a9e5b195e69cbae588b6e4b98be887aae58aa8e6bf80e6b4bbe689a9e5b195activatee6ba90e7a081e8a7a3e69e90-check><a href=/zh-cn/blog/2022/08/07/7-dubbo%E7%9A%84spi%E6%89%A9%E5%B1%95%E6%9C%BA%E5%88%B6%E4%B9%8B%E8%87%AA%E5%8A%A8%E6%BF%80%E6%B4%BB%E6%89%A9%E5%B1%95activate%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog202208077-dubboe79a84spie689a9e5b195e69cbae588b6e4b98be887aae58aa8e6bf80e6b4bbe689a9e5b195activatee6ba90e7a081e8a7a3e69e90><span>7-Dubbo的SPI扩展机制之自动激活扩展Activate源码解析</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022080606-dubboe79a84spie689a9e5b195e69cbae588b6e4b98be699aee9809ae689a9e5b195e5afb9e8b1a1e79a84e5889be5bbbae4b88ewrappere69cbae588b6e79a84e6ba90e7a081e8a7a3e69e90-li><input type=checkbox id=m-zh-cnblog2022080606-dubboe79a84spie689a9e5b195e69cbae588b6e4b98be699aee9809ae689a9e5b195e5afb9e8b1a1e79a84e5889be5bbbae4b88ewrappere69cbae588b6e79a84e6ba90e7a081e8a7a3e69e90-check>
<label for=m-zh-cnblog2022080606-dubboe79a84spie689a9e5b195e69cbae588b6e4b98be699aee9809ae689a9e5b195e5afb9e8b1a1e79a84e5889be5bbbae4b88ewrappere69cbae588b6e79a84e6ba90e7a081e8a7a3e69e90-check><a href=/zh-cn/blog/2022/08/06/06-dubbo%E7%9A%84spi%E6%89%A9%E5%B1%95%E6%9C%BA%E5%88%B6%E4%B9%8B%E6%99%AE%E9%80%9A%E6%89%A9%E5%B1%95%E5%AF%B9%E8%B1%A1%E7%9A%84%E5%88%9B%E5%BB%BA%E4%B8%8Ewrapper%E6%9C%BA%E5%88%B6%E7%9A%84%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ title=06-Dubbo的SPI扩展机制之普通扩展对象的创建与Wrapper机制的源码解析 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022080606-dubboe79a84spie689a9e5b195e69cbae588b6e4b98be699aee9809ae689a9e5b195e5afb9e8b1a1e79a84e5889be5bbbae4b88ewrappere69cbae588b6e79a84e6ba90e7a081e8a7a3e69e90><span>6-Dubbo的SPI扩展机制之普通扩展对象的创建与Wrapper机制的源码解析</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022080505-e887aae98082e5ba94e689a9e5b195e5afb9e8b1a1e79a84e5889be5bbbagetadaptiveextensione696b9e6b395-li><input type=checkbox id=m-zh-cnblog2022080505-e887aae98082e5ba94e689a9e5b195e5afb9e8b1a1e79a84e5889be5bbbagetadaptiveextensione696b9e6b395-check>
<label for=m-zh-cnblog2022080505-e887aae98082e5ba94e689a9e5b195e5afb9e8b1a1e79a84e5889be5bbbagetadaptiveextensione696b9e6b395-check><a href=/zh-cn/blog/2022/08/05/05-%E8%87%AA%E9%80%82%E5%BA%94%E6%89%A9%E5%B1%95%E5%AF%B9%E8%B1%A1%E7%9A%84%E5%88%9B%E5%BB%BAgetadaptiveextension%E6%96%B9%E6%B3%95/ title=05-自适应扩展对象的创建getAdaptiveExtension方法 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022080505-e887aae98082e5ba94e689a9e5b195e5afb9e8b1a1e79a84e5889be5bbbagetadaptiveextensione696b9e6b395><span>5-自适应扩展对象的创建getAdaptiveExtension方法</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022080404-dubboe79a84e689a9e5b195e69cbae588b6-li><input type=checkbox id=m-zh-cnblog2022080404-dubboe79a84e689a9e5b195e69cbae588b6-check>
<label for=m-zh-cnblog2022080404-dubboe79a84e689a9e5b195e69cbae588b6-check><a href=/zh-cn/blog/2022/08/04/04-dubbo%E7%9A%84%E6%89%A9%E5%B1%95%E6%9C%BA%E5%88%B6/ title=04-Dubbo的扩展机制 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022080404-dubboe79a84e689a9e5b195e69cbae588b6><span>4-Dubbo的扩展机制</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022080303-e6a186e69eb6e5ba94e794a8e7a88be5ba8fe6a8a1e59d97e9a286e59f9fe6a8a1e59e8bmodele5afb9e8b1a1e79a84e5889de5a78be58c96-li><input type=checkbox id=m-zh-cnblog2022080303-e6a186e69eb6e5ba94e794a8e7a88be5ba8fe6a8a1e59d97e9a286e59f9fe6a8a1e59e8bmodele5afb9e8b1a1e79a84e5889de5a78be58c96-check>
<label for=m-zh-cnblog2022080303-e6a186e69eb6e5ba94e794a8e7a88be5ba8fe6a8a1e59d97e9a286e59f9fe6a8a1e59e8bmodele5afb9e8b1a1e79a84e5889de5a78be58c96-check><a href=/zh-cn/blog/2022/08/03/03-%E6%A1%86%E6%9E%B6%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%A8%A1%E5%9D%97%E9%A2%86%E5%9F%9F%E6%A8%A1%E5%9E%8Bmodel%E5%AF%B9%E8%B1%A1%E7%9A%84%E5%88%9D%E5%A7%8B%E5%8C%96/ title=03-框架,应用程序,模块领域模型Model对象的初始化 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022080303-e6a186e69eb6e5ba94e794a8e7a88be5ba8fe6a8a1e59d97e9a286e59f9fe6a8a1e59e8bmodele5afb9e8b1a1e79a84e5889de5a78be58c96><span>3-框架,应用程序,模块领域模型Model对象的初始化</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022080202-e590afe58aa8e69c8de58aa1e5898de69c8de58aa1e9858de7bdaeserviceconfige7b1bbe59e8be698afe5a682e4bd95e5889de5a78be58c96e79a84-li><input type=checkbox id=m-zh-cnblog2022080202-e590afe58aa8e69c8de58aa1e5898de69c8de58aa1e9858de7bdaeserviceconfige7b1bbe59e8be698afe5a682e4bd95e5889de5a78be58c96e79a84-check>
<label for=m-zh-cnblog2022080202-e590afe58aa8e69c8de58aa1e5898de69c8de58aa1e9858de7bdaeserviceconfige7b1bbe59e8be698afe5a682e4bd95e5889de5a78be58c96e79a84-check><a href=/zh-cn/blog/2022/08/02/02-%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1%E5%89%8D%E6%9C%8D%E5%8A%A1%E9%85%8D%E7%BD%AEserviceconfig%E7%B1%BB%E5%9E%8B%E6%98%AF%E5%A6%82%E4%BD%95%E5%88%9D%E5%A7%8B%E5%8C%96%E7%9A%84/ title=02-启动服务前服务配置ServiceConfig类型是如何初始化的? class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022080202-e590afe58aa8e69c8de58aa1e5898de69c8de58aa1e9858de7bdaeserviceconfige7b1bbe59e8be698afe5a682e4bd95e5889de5a78be58c96e79a84><span>2-ServiceConfig类型是如何初始化的?</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog2022080101-e4bb8ee4b880e4b8aae69c8de58aa1e68f90e4be9be88085e79a84demoe8afb4e8b5b7-li><input type=checkbox id=m-zh-cnblog2022080101-e4bb8ee4b880e4b8aae69c8de58aa1e68f90e4be9be88085e79a84demoe8afb4e8b5b7-check>
<label for=m-zh-cnblog2022080101-e4bb8ee4b880e4b8aae69c8de58aa1e68f90e4be9be88085e79a84demoe8afb4e8b5b7-check><a href=/zh-cn/blog/2022/08/01/01-%E4%BB%8E%E4%B8%80%E4%B8%AA%E6%9C%8D%E5%8A%A1%E6%8F%90%E4%BE%9B%E8%80%85%E7%9A%84demo%E8%AF%B4%E8%B5%B7/ title="01 从一个服务提供者的Demo说起" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog2022080101-e4bb8ee4b880e4b8aae69c8de58aa1e68f90e4be9be88085e79a84demoe8afb4e8b5b7><span>1-从一个服务提供者的Demo说起</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog10101dubbo-3-e4b8ade79a84e4b889e5b182e9858de7bdaee99a94e7a6bb-li><input type=checkbox id=m-zh-cnblog10101dubbo-3-e4b8ade79a84e4b889e5b182e9858de7bdaee99a94e7a6bb-check>
<label for=m-zh-cnblog10101dubbo-3-e4b8ade79a84e4b889e5b182e9858de7bdaee99a94e7a6bb-check><a href=/zh-cn/blog/1/01/01/dubbo-3-%E4%B8%AD%E7%9A%84%E4%B8%89%E5%B1%82%E9%85%8D%E7%BD%AE%E9%9A%94%E7%A6%BB/ title="Dubbo 3 中的三层配置隔离" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog10101dubbo-3-e4b8ade79a84e4b889e5b182e9858de7bdaee99a94e7a6bb><span>配置隔离</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20221228dubbo-3-e4b98b-triple-e6b581e68ea7e58f8de58e8be58e9fe79086e8a7a3e69e90-li><input type=checkbox id=m-zh-cnblog20221228dubbo-3-e4b98b-triple-e6b581e68ea7e58f8de58e8be58e9fe79086e8a7a3e69e90-check>
<label for=m-zh-cnblog20221228dubbo-3-e4b98b-triple-e6b581e68ea7e58f8de58e8be58e9fe79086e8a7a3e69e90-check><a href=/zh-cn/blog/2022/12/28/dubbo-3-%E4%B9%8B-triple-%E6%B5%81%E6%8E%A7%E5%8F%8D%E5%8E%8B%E5%8E%9F%E7%90%86%E8%A7%A3%E6%9E%90/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20221228dubbo-3-e4b98b-triple-e6b581e68ea7e58f8de58e8be58e9fe79086e8a7a3e69e90><span>Dubbo 3 之 Triple 流控反压原理解析</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20221219triple-e58d8fe8aeaee694afe68c81-java-e5bc82e5b8b8e59b9ee4bca0e79a84e8aebee8aea1e4b88ee5ae9ee78eb0-li><input type=checkbox id=m-zh-cnblog20221219triple-e58d8fe8aeaee694afe68c81-java-e5bc82e5b8b8e59b9ee4bca0e79a84e8aebee8aea1e4b88ee5ae9ee78eb0-check>
<label for=m-zh-cnblog20221219triple-e58d8fe8aeaee694afe68c81-java-e5bc82e5b8b8e59b9ee4bca0e79a84e8aebee8aea1e4b88ee5ae9ee78eb0-check><a href=/zh-cn/blog/2022/12/19/triple-%E5%8D%8F%E8%AE%AE%E6%94%AF%E6%8C%81-java-%E5%BC%82%E5%B8%B8%E5%9B%9E%E4%BC%A0%E7%9A%84%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%AE%9E%E7%8E%B0/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20221219triple-e58d8fe8aeaee694afe68c81-java-e5bc82e5b8b8e59b9ee4bca0e79a84e8aebee8aea1e4b88ee5ae9ee78eb0><span>Triple 协议支持 Java 异常回传的设计与实现</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20220623e6b585e69e90-dubbo-30-e4b8ade68ea5e58fa3e7baa7e59cb0e59d80e68ea8e98081e680a7e883bde79a84e4bc98e58c96-li><input type=checkbox id=m-zh-cnblog20220623e6b585e69e90-dubbo-30-e4b8ade68ea5e58fa3e7baa7e59cb0e59d80e68ea8e98081e680a7e883bde79a84e4bc98e58c96-check>
<label for=m-zh-cnblog20220623e6b585e69e90-dubbo-30-e4b8ade68ea5e58fa3e7baa7e59cb0e59d80e68ea8e98081e680a7e883bde79a84e4bc98e58c96-check><a href=/zh-cn/blog/2022/06/23/%E6%B5%85%E6%9E%90-dubbo-3.0-%E4%B8%AD%E6%8E%A5%E5%8F%A3%E7%BA%A7%E5%9C%B0%E5%9D%80%E6%8E%A8%E9%80%81%E6%80%A7%E8%83%BD%E7%9A%84%E4%BC%98%E5%8C%96/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20220623e6b585e69e90-dubbo-30-e4b8ade68ea5e58fa3e7baa7e59cb0e59d80e68ea8e98081e680a7e883bde79a84e4bc98e58c96><span>浅析 Dubbo 3.0 中接口级地址推送性能的优化</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210602dubbo3-e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0-li><input type=checkbox id=m-zh-cnblog20210602dubbo3-e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0-check>
<label for=m-zh-cnblog20210602dubbo3-e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0-check><a href=/zh-cn/blog/2021/06/02/dubbo3-%E5%BA%94%E7%94%A8%E7%BA%A7%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0/ title="Dubbo3 应用级服务发现" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210602dubbo3-e5ba94e794a8e7baa7e69c8de58aa1e58f91e78eb0><span>应用级服务发现</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20191017dubbo-e4b8ade79a84-url-e7bb9fe4b880e6a8a1e59e8b-li><input type=checkbox id=m-zh-cnblog20191017dubbo-e4b8ade79a84-url-e7bb9fe4b880e6a8a1e59e8b-check>
<label for=m-zh-cnblog20191017dubbo-e4b8ade79a84-url-e7bb9fe4b880e6a8a1e59e8b-check><a href=/zh-cn/blog/2019/10/17/dubbo-%E4%B8%AD%E7%9A%84-url-%E7%BB%9F%E4%B8%80%E6%A8%A1%E5%9E%8B/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20191017dubbo-e4b8ade79a84-url-e7bb9fe4b880e6a8a1e59e8b><span>Dubbo 中的 URL 统一模型</span></a></label></li></ul></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnbloggolang-li><input type=checkbox id=m-zh-cnbloggolang-check>
<label for=m-zh-cnbloggolang-check><a href=/zh-cn/blog/golang/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnbloggolang><span>Golang</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210220dubbo-go-e799bde8af9de69687-li><input type=checkbox id=m-zh-cnblog20210220dubbo-go-e799bde8af9de69687-check>
<label for=m-zh-cnblog20210220dubbo-go-e799bde8af9de69687-check><a href=/zh-cn/blog/2021/02/20/dubbo-go-%E7%99%BD%E8%AF%9D%E6%96%87/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210220dubbo-go-e799bde8af9de69687><span>dubbo-go 白话文</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210115dubbo-goe6ba90e7a081e7ac94e8aeb0e4ba8ce5aea2e688b7e7abafe8b083e794a8e8bf87e7a88b-li><input type=checkbox id=m-zh-cnblog20210115dubbo-goe6ba90e7a081e7ac94e8aeb0e4ba8ce5aea2e688b7e7abafe8b083e794a8e8bf87e7a88b-check>
<label for=m-zh-cnblog20210115dubbo-goe6ba90e7a081e7ac94e8aeb0e4ba8ce5aea2e688b7e7abafe8b083e794a8e8bf87e7a88b-check><a href=/zh-cn/blog/2021/01/15/dubbo-go%E6%BA%90%E7%A0%81%E7%AC%94%E8%AE%B0%E4%BA%8C%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%B0%83%E7%94%A8%E8%BF%87%E7%A8%8B/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210115dubbo-goe6ba90e7a081e7ac94e8aeb0e4ba8ce5aea2e688b7e7abafe8b083e794a8e8bf87e7a88b><span>dubbo-go源码笔记(二)客户端调用过程</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210115dubbogo-30e789b5e6898b-grpc-e8b5b0e59091e4ba91e58e9fe7949fe697b6e4bba3-li><input type=checkbox id=m-zh-cnblog20210115dubbogo-30e789b5e6898b-grpc-e8b5b0e59091e4ba91e58e9fe7949fe697b6e4bba3-check>
<label for=m-zh-cnblog20210115dubbogo-30e789b5e6898b-grpc-e8b5b0e59091e4ba91e58e9fe7949fe697b6e4bba3-check><a href=/zh-cn/blog/2021/01/15/dubbogo-3.0%E7%89%B5%E6%89%8B-grpc-%E8%B5%B0%E5%90%91%E4%BA%91%E5%8E%9F%E7%94%9F%E6%97%B6%E4%BB%A3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210115dubbogo-30e789b5e6898b-grpc-e8b5b0e59091e4ba91e58e9fe7949fe697b6e4bba3><span>dubbogo 3.0:牵手 gRPC 走向云原生时代</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210115e58886e5b883e5bc8fe4ba8be58aa1e6a186e69eb6-seata-golang-e9809ae4bfa1e6a8a1e59e8be8afa6e8a7a3-li><input type=checkbox id=m-zh-cnblog20210115e58886e5b883e5bc8fe4ba8be58aa1e6a186e69eb6-seata-golang-e9809ae4bfa1e6a8a1e59e8be8afa6e8a7a3-check>
<label for=m-zh-cnblog20210115e58886e5b883e5bc8fe4ba8be58aa1e6a186e69eb6-seata-golang-e9809ae4bfa1e6a8a1e59e8be8afa6e8a7a3-check><a href=/zh-cn/blog/2021/01/15/%E5%88%86%E5%B8%83%E5%BC%8F%E4%BA%8B%E5%8A%A1%E6%A1%86%E6%9E%B6-seata-golang-%E9%80%9A%E4%BF%A1%E6%A8%A1%E5%9E%8B%E8%AF%A6%E8%A7%A3/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210115e58886e5b883e5bc8fe4ba8be58aa1e6a186e69eb6-seata-golang-e9809ae4bfa1e6a8a1e59e8be8afa6e8a7a3><span>分布式事务框架 seata-golang 通信模型详解</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210114dubbo-go-e58fafe4bfa1e8b083e794a8e5ae9ee78eb0-li><input type=checkbox id=m-zh-cnblog20210114dubbo-go-e58fafe4bfa1e8b083e794a8e5ae9ee78eb0-check>
<label for=m-zh-cnblog20210114dubbo-go-e58fafe4bfa1e8b083e794a8e5ae9ee78eb0-check><a href=/zh-cn/blog/2021/01/14/dubbo-go-%E5%8F%AF%E4%BF%A1%E8%B0%83%E7%94%A8%E5%AE%9E%E7%8E%B0/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210114dubbo-go-e58fafe4bfa1e8b083e794a8e5ae9ee78eb0><span>dubbo-go 可信调用实现</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210114dubbo-go-e6ba90e7a081e7ac94e8aeb0e4b880server-e7abafe5bc80e590afe69c8de58aa1e8bf87e7a88b-li><input type=checkbox id=m-zh-cnblog20210114dubbo-go-e6ba90e7a081e7ac94e8aeb0e4b880server-e7abafe5bc80e590afe69c8de58aa1e8bf87e7a88b-check>
<label for=m-zh-cnblog20210114dubbo-go-e6ba90e7a081e7ac94e8aeb0e4b880server-e7abafe5bc80e590afe69c8de58aa1e8bf87e7a88b-check><a href=/zh-cn/blog/2021/01/14/dubbo-go-%E6%BA%90%E7%A0%81%E7%AC%94%E8%AE%B0%E4%B8%80server-%E7%AB%AF%E5%BC%80%E5%90%AF%E6%9C%8D%E5%8A%A1%E8%BF%87%E7%A8%8B/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210114dubbo-go-e6ba90e7a081e7ac94e8aeb0e4b880server-e7abafe5bc80e590afe69c8de58aa1e8bf87e7a88b><span>Dubbo-go 源码笔记(一)Server 端开启服务过程</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210114dubbo-go-e4b8ad-rest-e58d8fe8aeaee5ae9ee78eb0-li><input type=checkbox id=m-zh-cnblog20210114dubbo-go-e4b8ad-rest-e58d8fe8aeaee5ae9ee78eb0-check>
<label for=m-zh-cnblog20210114dubbo-go-e4b8ad-rest-e58d8fe8aeaee5ae9ee78eb0-check><a href=/zh-cn/blog/2021/01/14/dubbo-go-%E4%B8%AD-rest-%E5%8D%8F%E8%AE%AE%E5%AE%9E%E7%8E%B0/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210114dubbo-go-e4b8ad-rest-e58d8fe8aeaee5ae9ee78eb0><span>dubbo-go 中 REST 协议实现</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210114dubbo-go-e4b8ade5b086-kubernets-e58e9fe4bd9ce4b8bae6b3a8e5868ce4b8ade79a84e8aebee8aea1e5928ce5ae9ee78eb0-li><input type=checkbox id=m-zh-cnblog20210114dubbo-go-e4b8ade5b086-kubernets-e58e9fe4bd9ce4b8bae6b3a8e5868ce4b8ade79a84e8aebee8aea1e5928ce5ae9ee78eb0-check>
<label for=m-zh-cnblog20210114dubbo-go-e4b8ade5b086-kubernets-e58e9fe4bd9ce4b8bae6b3a8e5868ce4b8ade79a84e8aebee8aea1e5928ce5ae9ee78eb0-check><a href=/zh-cn/blog/2021/01/14/dubbo-go-%E4%B8%AD%E5%B0%86-kubernets-%E5%8E%9F%E4%BD%9C%E4%B8%BA%E6%B3%A8%E5%86%8C%E4%B8%AD%E7%9A%84%E8%AE%BE%E8%AE%A1%E5%92%8C%E5%AE%9E%E7%8E%B0/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210114dubbo-go-e4b8ade5b086-kubernets-e58e9fe4bd9ce4b8bae6b3a8e5868ce4b8ade79a84e8aebee8aea1e5928ce5ae9ee78eb0><span>dubbo-go 中将 Kubernets 原⽣作为注册中⼼的设计和实现</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210114dubbo-goe5ba94e794a8e7bbb4e5baa6e6b3a8e5868ce6a8a1e59e8b-li><input type=checkbox id=m-zh-cnblog20210114dubbo-goe5ba94e794a8e7bbb4e5baa6e6b3a8e5868ce6a8a1e59e8b-check>
<label for=m-zh-cnblog20210114dubbo-goe5ba94e794a8e7bbb4e5baa6e6b3a8e5868ce6a8a1e59e8b-check><a href=/zh-cn/blog/2021/01/14/dubbo-go%E5%BA%94%E7%94%A8%E7%BB%B4%E5%BA%A6%E6%B3%A8%E5%86%8C%E6%A8%A1%E5%9E%8B/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210114dubbo-goe5ba94e794a8e7bbb4e5baa6e6b3a8e5868ce6a8a1e59e8b><span>Dubbo-go应用维度注册模型</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210114go-e78988e69cace585a5-dubbo-e7949fe68081e4b880e591a8e5b9b4-li><input type=checkbox id=m-zh-cnblog20210114go-e78988e69cace585a5-dubbo-e7949fe68081e4b880e591a8e5b9b4-check>
<label for=m-zh-cnblog20210114go-e78988e69cace585a5-dubbo-e7949fe68081e4b880e591a8e5b9b4-check><a href=/zh-cn/blog/2021/01/14/go-%E7%89%88%E6%9C%AC%E5%85%A5-dubbo-%E7%94%9F%E6%80%81%E4%B8%80%E5%91%A8%E5%B9%B4/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210114go-e78988e69cace585a5-dubbo-e7949fe68081e4b880e591a8e5b9b4><span>Go 版本入 Dubbo 生态一周年</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210114e8aeb0e4b880e6aca1e59ca8-mosn-e5afb9-dubbodubbo-go-hessian2-e79a84e680a7e883bde4bc98e58c96-li><input type=checkbox id=m-zh-cnblog20210114e8aeb0e4b880e6aca1e59ca8-mosn-e5afb9-dubbodubbo-go-hessian2-e79a84e680a7e883bde4bc98e58c96-check>
<label for=m-zh-cnblog20210114e8aeb0e4b880e6aca1e59ca8-mosn-e5afb9-dubbodubbo-go-hessian2-e79a84e680a7e883bde4bc98e58c96-check><a href=/zh-cn/blog/2021/01/14/%E8%AE%B0%E4%B8%80%E6%AC%A1%E5%9C%A8-mosn-%E5%AF%B9-dubbodubbo-go-hessian2-%E7%9A%84%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210114e8aeb0e4b880e6aca1e59ca8-mosn-e5afb9-dubbodubbo-go-hessian2-e79a84e680a7e883bde4bc98e58c96><span>记一次在 mosn 对 dubbo、dubbo-go-hessian2 的性能优化</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210114e8a7a3e69e84-dubbo-go-e79a84e6a0b8e5bf83e6b3a8e5868ce5bc95e6938e-nacos-li><input type=checkbox id=m-zh-cnblog20210114e8a7a3e69e84-dubbo-go-e79a84e6a0b8e5bf83e6b3a8e5868ce5bc95e6938e-nacos-check>
<label for=m-zh-cnblog20210114e8a7a3e69e84-dubbo-go-e79a84e6a0b8e5bf83e6b3a8e5868ce5bc95e6938e-nacos-check><a href=/zh-cn/blog/2021/01/14/%E8%A7%A3%E6%9E%84-dubbo-go-%E7%9A%84%E6%A0%B8%E5%BF%83%E6%B3%A8%E5%86%8C%E5%BC%95%E6%93%8E-nacos/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210114e8a7a3e69e84-dubbo-go-e79a84e6a0b8e5bf83e6b3a8e5868ce5bc95e6938e-nacos><span>解构 Dubbo-go 的核心注册引擎 Nacos</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210114e5bfabe9809fe4b88ae6898b-dubbo-go-li><input type=checkbox id=m-zh-cnblog20210114e5bfabe9809fe4b88ae6898b-dubbo-go-check>
<label for=m-zh-cnblog20210114e5bfabe9809fe4b88ae6898b-dubbo-go-check><a href=/zh-cn/blog/2021/01/14/%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B-dubbo-go/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210114e5bfabe9809fe4b88ae6898b-dubbo-go><span>快速上手 dubbo-go</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210114e6b682e9b8a6e699bae883bd-dubbo-go-e4babfe7baa7e6b581e9878fe79a84e5ae9ee8b7b5e4b88ee68ea2e7b4a2-li><input type=checkbox id=m-zh-cnblog20210114e6b682e9b8a6e699bae883bd-dubbo-go-e4babfe7baa7e6b581e9878fe79a84e5ae9ee8b7b5e4b88ee68ea2e7b4a2-check>
<label for=m-zh-cnblog20210114e6b682e9b8a6e699bae883bd-dubbo-go-e4babfe7baa7e6b581e9878fe79a84e5ae9ee8b7b5e4b88ee68ea2e7b4a2-check><a href=/zh-cn/blog/2021/01/14/%E6%B6%82%E9%B8%A6%E6%99%BA%E8%83%BD-dubbo-go-%E4%BA%BF%E7%BA%A7%E6%B5%81%E9%87%8F%E7%9A%84%E5%AE%9E%E8%B7%B5%E4%B8%8E%E6%8E%A2%E7%B4%A2/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210114e6b682e9b8a6e699bae883bd-dubbo-go-e4babfe7baa7e6b581e9878fe79a84e5ae9ee8b7b5e4b88ee68ea2e7b4a2><span>涂鸦智能 dubbo-go 亿级流量的实践与探索</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210112dubbo-go-e4b8ade5a682e4bd95e5ae9ee78eb0e8b7afe794b1e8a784e58899e58a9fe883bd-li><input type=checkbox id=m-zh-cnblog20210112dubbo-go-e4b8ade5a682e4bd95e5ae9ee78eb0e8b7afe794b1e8a784e58899e58a9fe883bd-check>
<label for=m-zh-cnblog20210112dubbo-go-e4b8ade5a682e4bd95e5ae9ee78eb0e8b7afe794b1e8a784e58899e58a9fe883bd-check><a href=/zh-cn/blog/2021/01/12/dubbo-go-%E4%B8%AD%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E8%B7%AF%E7%94%B1%E8%A7%84%E5%88%99%E5%8A%9F%E8%83%BD/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210112dubbo-go-e4b8ade5a682e4bd95e5ae9ee78eb0e8b7afe794b1e8a784e58899e58a9fe883bd><span>dubbo-go 中如何实现路由规则功能</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210112e8aeb0e4b880e6aca1e5afb9-dubbo-go-hessian2-e79a84e680a7e883bde4bc98e58c96-li><input type=checkbox id=m-zh-cnblog20210112e8aeb0e4b880e6aca1e5afb9-dubbo-go-hessian2-e79a84e680a7e883bde4bc98e58c96-check>
<label for=m-zh-cnblog20210112e8aeb0e4b880e6aca1e5afb9-dubbo-go-hessian2-e79a84e680a7e883bde4bc98e58c96-check><a href=/zh-cn/blog/2021/01/12/%E8%AE%B0%E4%B8%80%E6%AC%A1%E5%AF%B9-dubbo-go-hessian2-%E7%9A%84%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210112e8aeb0e4b880e6aca1e5afb9-dubbo-go-hessian2-e79a84e680a7e883bde4bc98e58c96><span>记一次对 dubbo-go-hessian2 的性能优化</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210111dubbo-go-e8b8a9e59d91e8aeb0-li><input type=checkbox id=m-zh-cnblog20210111dubbo-go-e8b8a9e59d91e8aeb0-check>
<label for=m-zh-cnblog20210111dubbo-go-e8b8a9e59d91e8aeb0-check><a href=/zh-cn/blog/2021/01/11/dubbo-go-%E8%B8%A9%E5%9D%91%E8%AE%B0/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210111dubbo-go-e8b8a9e59d91e8aeb0><span>Dubbo Go 踩坑记</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210111dubbo-go-e79a84e5898de4b896e4bb8ae7949f-li><input type=checkbox id=m-zh-cnblog20210111dubbo-go-e79a84e5898de4b896e4bb8ae7949f-check>
<label for=m-zh-cnblog20210111dubbo-go-e79a84e5898de4b896e4bb8ae7949f-check><a href=/zh-cn/blog/2021/01/11/dubbo-go-%E7%9A%84%E5%89%8D%E4%B8%96%E4%BB%8A%E7%94%9F/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210111dubbo-go-e79a84e5898de4b896e4bb8ae7949f><span>Dubbo Go 的前世今生</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210111e586b2e4b88ae4ba91e58e9fe7949fdubbo-e58f91e5b883-go-e78988e69cac-li><input type=checkbox id=m-zh-cnblog20210111e586b2e4b88ae4ba91e58e9fe7949fdubbo-e58f91e5b883-go-e78988e69cac-check>
<label for=m-zh-cnblog20210111e586b2e4b88ae4ba91e58e9fe7949fdubbo-e58f91e5b883-go-e78988e69cac-check><a href=/zh-cn/blog/2021/01/11/%E5%86%B2%E4%B8%8A%E4%BA%91%E5%8E%9F%E7%94%9Fdubbo-%E5%8F%91%E5%B8%83-go-%E7%89%88%E6%9C%AC/ title="冲上云原生,Dubbo 发布 Go 版本" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210111e586b2e4b88ae4ba91e58e9fe7949fdubbo-e58f91e5b883-go-e78988e69cac><span>Dubbo Go 发布</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210111dubbo-go-e5bfabe9809fe5bc80e5a78b-li><input type=checkbox id=m-zh-cnblog20210111dubbo-go-e5bfabe9809fe5bc80e5a78b-check>
<label for=m-zh-cnblog20210111dubbo-go-e5bfabe9809fe5bc80e5a78b-check><a href=/zh-cn/blog/2021/01/11/dubbo-go-%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210111dubbo-go-e5bfabe9809fe5bc80e5a78b><span>Dubbo Go 快速开始</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210111dubbo-go-e4b8ad-metrics-e79a84e8aebee8aea1-li><input type=checkbox id=m-zh-cnblog20210111dubbo-go-e4b8ad-metrics-e79a84e8aebee8aea1-check>
<label for=m-zh-cnblog20210111dubbo-go-e4b8ad-metrics-e79a84e8aebee8aea1-check><a href=/zh-cn/blog/2021/01/11/dubbo-go-%E4%B8%AD-metrics-%E7%9A%84%E8%AE%BE%E8%AE%A1/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210111dubbo-go-e4b8ad-metrics-e79a84e8aebee8aea1><span>Dubbo Go 中 metrics 的设计</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210111dubbo-go-e4b8ade79a84-tps-limit-e8aebee8aea1e4b88ee5ae9ee78eb0-li><input type=checkbox id=m-zh-cnblog20210111dubbo-go-e4b8ade79a84-tps-limit-e8aebee8aea1e4b88ee5ae9ee78eb0-check>
<label for=m-zh-cnblog20210111dubbo-go-e4b8ade79a84-tps-limit-e8aebee8aea1e4b88ee5ae9ee78eb0-check><a href=/zh-cn/blog/2021/01/11/dubbo-go-%E4%B8%AD%E7%9A%84-tps-limit-%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%AE%9E%E7%8E%B0/ title="Dubbo Go 中的 TPS Limit 设计与实现" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210111dubbo-go-e4b8ade79a84-tps-limit-e8aebee8aea1e4b88ee5ae9ee78eb0><span>dubbo-go tps limit</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210111dubbo-go-e4b8ade5a682e4bd95e5ae9ee78eb0e8bf9ce7a88be9858de7bdaee7aea1e79086-li><input type=checkbox id=m-zh-cnblog20210111dubbo-go-e4b8ade5a682e4bd95e5ae9ee78eb0e8bf9ce7a88be9858de7bdaee7aea1e79086-check>
<label for=m-zh-cnblog20210111dubbo-go-e4b8ade5a682e4bd95e5ae9ee78eb0e8bf9ce7a88be9858de7bdaee7aea1e79086-check><a href=/zh-cn/blog/2021/01/11/dubbo-go-%E4%B8%AD%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E8%BF%9C%E7%A8%8B%E9%85%8D%E7%BD%AE%E7%AE%A1%E7%90%86/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210111dubbo-go-e4b8ade5a682e4bd95e5ae9ee78eb0e8bf9ce7a88be9858de7bdaee7aea1e79086><span>dubbo-go 中如何实现远程配置管理?</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210111dubbo-go-getty-e5bc80e58f91e697a5e5bf97-li><input type=checkbox id=m-zh-cnblog20210111dubbo-go-getty-e5bc80e58f91e697a5e5bf97-check>
<label for=m-zh-cnblog20210111dubbo-go-getty-e5bc80e58f91e697a5e5bf97-check><a href=/zh-cn/blog/2021/01/11/dubbo-go-getty-%E5%BC%80%E5%8F%91%E6%97%A5%E5%BF%97/ title="Dubbo Go Getty 开发日志" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210111dubbo-go-getty-e5bc80e58f91e697a5e5bf97><span>getty 开发日志</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210111e697a0e7bc9de8a194e68ea5-grpc-e4b88e-dubbo-go-li><input type=checkbox id=m-zh-cnblog20210111e697a0e7bc9de8a194e68ea5-grpc-e4b88e-dubbo-go-check>
<label for=m-zh-cnblog20210111e697a0e7bc9de8a194e68ea5-grpc-e4b88e-dubbo-go-check><a href=/zh-cn/blog/2021/01/11/%E6%97%A0%E7%BC%9D%E8%A1%94%E6%8E%A5-grpc-%E4%B8%8E-dubbo-go/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210111e697a0e7bc9de8a194e68ea5-grpc-e4b88e-dubbo-go><span>无缝衔接 gRPC 与 dubbo-go</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210111e59ca8dubbo-goe4b8ade4bdbfe794a8sentinel-li><input type=checkbox id=m-zh-cnblog20210111e59ca8dubbo-goe4b8ade4bdbfe794a8sentinel-check>
<label for=m-zh-cnblog20210111e59ca8dubbo-goe4b8ade4bdbfe794a8sentinel-check><a href=/zh-cn/blog/2021/01/11/%E5%9C%A8dubbo-go%E4%B8%AD%E4%BD%BF%E7%94%A8sentinel/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210111e59ca8dubbo-goe4b8ade4bdbfe794a8sentinel><span>在dubbo-go中使用sentinel</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnblogrust-li><input type=checkbox id=m-zh-cnblogrust-check>
<label for=m-zh-cnblogrust-check><a href=/zh-cn/blog/rust/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnblogrust><span>Rust</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20221023apache-dubbo-e5a49ae8afade8a880e4bd93e7b3bbe5868de6b7bbe696b0e59198e9a696e4b8aa-rust-e8afade8a880e78988e69cace6ada3e5bc8fe58f91e5b883-li><input type=checkbox id=m-zh-cnblog20221023apache-dubbo-e5a49ae8afade8a880e4bd93e7b3bbe5868de6b7bbe696b0e59198e9a696e4b8aa-rust-e8afade8a880e78988e69cace6ada3e5bc8fe58f91e5b883-check>
<label for=m-zh-cnblog20221023apache-dubbo-e5a49ae8afade8a880e4bd93e7b3bbe5868de6b7bbe696b0e59198e9a696e4b8aa-rust-e8afade8a880e78988e69cace6ada3e5bc8fe58f91e5b883-check><a href=/zh-cn/blog/2022/10/23/apache-dubbo-%E5%A4%9A%E8%AF%AD%E8%A8%80%E4%BD%93%E7%B3%BB%E5%86%8D%E6%B7%BB%E6%96%B0%E5%91%98%E9%A6%96%E4%B8%AA-rust-%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC%E6%AD%A3%E5%BC%8F%E5%8F%91%E5%B8%83/ title="Apache Dubbo 多语言体系再添新员:首个 Rust 语言版本正式发布" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20221023apache-dubbo-e5a49ae8afade8a880e4bd93e7b3bbe5868de6b7bbe696b0e59198e9a696e4b8aa-rust-e8afade8a880e78988e69cace6ada3e5bc8fe58f91e5b883><span>Dubbo 发布首个 Rust 语言版本实现</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cnblogpixiu-li><input type=checkbox id=m-zh-cnblogpixiu-check>
<label for=m-zh-cnblogpixiu-check><a href=/zh-cn/blog/pixiu/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cnblogpixiu><span>Pixiu</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20220219e8b088e8b088pixiue79a84filter-li><input type=checkbox id=m-zh-cnblog20220219e8b088e8b088pixiue79a84filter-check>
<label for=m-zh-cnblog20220219e8b088e8b088pixiue79a84filter-check><a href=/zh-cn/blog/2022/02/19/%E8%B0%88%E8%B0%88pixiu%E7%9A%84filter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20220219e8b088e8b088pixiue79a84filter><span>谈谈Pixiu的Filter</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20210825dubbo-e8b7a8e8afade8a880e8b083e794a8e7a59ee585bddubbo-go-pixiu-li><input type=checkbox id=m-zh-cnblog20210825dubbo-e8b7a8e8afade8a880e8b083e794a8e7a59ee585bddubbo-go-pixiu-check>
<label for=m-zh-cnblog20210825dubbo-e8b7a8e8afade8a880e8b083e794a8e7a59ee585bddubbo-go-pixiu-check><a href=/zh-cn/blog/2021/08/25/dubbo-%E8%B7%A8%E8%AF%AD%E8%A8%80%E8%B0%83%E7%94%A8%E7%A5%9E%E5%85%BDdubbo-go-pixiu/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20210825dubbo-e8b7a8e8afade8a880e8b083e794a8e7a59ee585bddubbo-go-pixiu><span>Dubbo 跨语言调用神兽:dubbo-go-pixiu</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20231007apache-dubbo-e9a696e4b8aa-nodejs-30-alpha-e78988e69cace6ada3e5bc8fe58f91e5b883-li><input type=checkbox id=m-zh-cnblog20231007apache-dubbo-e9a696e4b8aa-nodejs-30-alpha-e78988e69cace6ada3e5bc8fe58f91e5b883-check>
<label for=m-zh-cnblog20231007apache-dubbo-e9a696e4b8aa-nodejs-30-alpha-e78988e69cace6ada3e5bc8fe58f91e5b883-check><a href=/zh-cn/blog/2023/10/07/apache-dubbo-%E9%A6%96%E4%B8%AA-node.js-3.0-alpha-%E7%89%88%E6%9C%AC%E6%AD%A3%E5%BC%8F%E5%8F%91%E5%B8%83/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20231007apache-dubbo-e9a696e4b8aa-nodejs-30-alpha-e78988e69cace6ada3e5bc8fe58f91e5b883><span>Apache Dubbo 首个 Node.js 3.0-alpha 版本正式发布</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cnblog20231007web-e6b58fe8a788e599a8e9a1b5e99da2e4b99fe883bde8aebfe997aedubbogrpce5beaee69c8de58aa1dubbo-js-alphae78988e69cace6ada3e5bc8fe58f91e5b883-li><input type=checkbox id=m-zh-cnblog20231007web-e6b58fe8a788e599a8e9a1b5e99da2e4b99fe883bde8aebfe997aedubbogrpce5beaee69c8de58aa1dubbo-js-alphae78988e69cace6ada3e5bc8fe58f91e5b883-check>
<label for=m-zh-cnblog20231007web-e6b58fe8a788e599a8e9a1b5e99da2e4b99fe883bde8aebfe997aedubbogrpce5beaee69c8de58aa1dubbo-js-alphae78988e69cace6ada3e5bc8fe58f91e5b883-check><a href=/zh-cn/blog/2023/10/07/web-%E6%B5%8F%E8%A7%88%E5%99%A8%E9%A1%B5%E9%9D%A2%E4%B9%9F%E8%83%BD%E8%AE%BF%E9%97%AEdubbogrpc%E5%BE%AE%E6%9C%8D%E5%8A%A1dubbo-js-alpha%E7%89%88%E6%9C%AC%E6%AD%A3%E5%BC%8F%E5%8F%91%E5%B8%83/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cnblog20231007web-e6b58fe8a788e599a8e9a1b5e99da2e4b99fe883bde8aebfe997aedubbogrpce5beaee69c8de58aa1dubbo-js-alphae78988e69cace6ada3e5bc8fe58f91e5b883><span>Web 浏览器页面也能访问dubbo、grpc微服务?Dubbo-js alpha版本正式发布</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/zh-cn/blog/>博客</a></li><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/zh-cn/blog/java/>Java</a></li><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/zh-cn/blog/java/demos/>功能演示</a></li><li class="breadcrumb-item active" aria-current=page><a href=https://cn.dubbo.apache.org/zh-cn/blog/2019/10/28/dubbo-%E5%9C%A8%E8%B7%A8%E8%AF%AD%E8%A8%80%E5%92%8C%E5%8D%8F%E8%AE%AE%E7%A9%BF%E9%80%8F%E6%80%A7%E6%96%B9%E5%90%91%E4%B8%8A%E7%9A%84%E6%8E%A2%E7%B4%A2%E6%94%AF%E6%8C%81-http/2-grpc-%E5%92%8C-protobuf/ aria-disabled=true class="btn-link disabled">支持 HTTP/2 gRPC 和 Protobuf</a></li></ol></nav><section id=deprecation-warning><div class="content deprecation-warning pageinfo outdated-blog"><p>该文章内容发布已经超过一年,请注意检查文章中内容是否过时。</p></div></section><div class=td-content><h1>Dubbo 在跨语言和协议穿透性方向上的探索:支持 HTTP/2 gRPC 和 Protobuf</h1><div class=lead>本文整理自刘军在 Dubbo 成都 meetup 上分享的《Dubbo 在多语言和协议穿透性方向上的探索》。</div><div class="td-byline mb-4"><time datetime=2019-10-28 class=text-muted>Monday, October 28, 2019</time></div><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5><ul class=taxonomy-terms><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/java/ data-taxonomy-term=java><span class=taxonomy-label>Java</span></a></li></ul></div></header><p>本文总体上可分为基础产品简介、Dubbo 对 gRPC (HTTP/2) 和 Protobuf 的支持及示例演示三部分,在简介部分介绍了 Dubbo、HTTP/2、gRPC、Protobuf 的基本概念和特点;第二部分介绍了 Dubbo 为何要支持 gRPC (HTTP/2) 和 Protobuf,以及这种支持为 gRPC 和 Dubbo 开发带来的好处与不同;第三部分通过两个实例分别演示了 Dubbo gRPC 和 Dubbo Protobuf 的使用方式。</p><h2 id=基本介绍>基本介绍</h2><h3 id=dubbo-协议>Dubbo 协议</h3><p>从协议层面展开,以下是当前 2.7 版本支持的 Dubbo 协议</p><p><img src=/imgs/blog/grpc/dubbo-ptotocol.png alt=image-20191029103919557></p><p>众所周知,Dubbo 协议是直接定义在 TCP 传输层协议之上,由于 TCP 高可靠全双工的特点,为 Dubbo 协议的定义提供了最大的灵活性,但同时也正是因为这样的灵活性,RPC 协议普遍都是定制化的私有协议,Dubbo 同样也面临这个问题。在这里我们着重讲一下 Dubbo 在协议通用性方面值得改进的地方,关于协议详细解析请参见<a href=/zh-cn/blog/2018/10/05/dubbo-%E5%8D%8F%E8%AE%AE%E8%AF%A6%E8%A7%A3/>官网博客</a></p><ul><li>Dubbo 协议体 Body 中有一个可扩展的 attachments 部分,这给 RPC 方法之外额外传递附加属性提供了可能,是一个很好的设计。但是类似的 Header 部分,却缺少类似的可扩展 attachments,这点可参考 HTTP 定义的 Ascii Header 设计,将 Body Attachments 和 Header Attachments 做职责划分。</li><li>Body 协议体中的一些 RPC 请求定位符如 Service Name、Method Name、Version 等,可以提到 Header 中,和具体的序列化协议解耦,以更好的被网络基础设施识别或用于流量管控。</li><li>扩展性不够好,欠缺协议升级方面的设计,如 Header 头中没有预留的状态标识位,或者像 HTTP 有专为协议升级或协商设计的特殊 packet。</li><li>在 Java 版本的代码实现上,不够精简和通用。如在链路传输中,存在一些语言绑定的内容;消息体中存在冗余内容,如 Service Name 在 Body 和 Attachments 中都存在。</li></ul><h3 id=http1>HTTP/1</h3><p>相比于直接构建与 TPC 传输层的私有 RPC 协议,构建于 HTTP 之上的远程调用解决方案会有更好的通用性,如WebServices 或 REST 架构,使用 HTTP + JSON 可以说是一个事实标准的解决方案。</p><p>之所以选择构建在 HTTP 之上,我认为有两个最大的优势:</p><ol><li>HTTP 的语义和可扩展性能很好的满足 RPC 调用需求。</li><li>通用性,HTTP 协议几乎被网络上的所有设备所支持,具有很好的协议穿透性。</li></ol><p><img src=/imgs/blog/grpc/http1.png alt=image-20191029113404906></p><p>具体来说,HTTP/1 的优势和限制是:</p><ul><li><p>典型的 Request – Response 模型,一个链路上一次只能有一个等待的 Request 请求</p></li><li><p>HTTP/1 支持 Keep-Alive 链接,避免了链接重复创建开销</p></li><li><p>Human Readable Headers,使用更通用、更易于人类阅读的头部传输格式</p></li><li><p>无直接 Server Push 支持,需要使用 Polling Long-Polling 等变通模式</p></li></ul><h3 id=http2>HTTP/2</h3><p>HTTP/2 保留了 HTTP/1 的所有语义,在保持兼容的同时,在通信模型和传输效率上做了很大的改进。</p><p><img src=/imgs/blog/grpc/http2.png alt=image-20191029113416731></p><ul><li><p>支持单条链路上的 Multiplexing,相比于 Request - Response 独占链路,基于 Frame 实现更高效利用链路</p></li><li><p>Request - Stream 语义,原生支持 Server Push 和 Stream 数据传输</p></li><li><p>Flow Control,单条 Stream 粒度的和整个链路粒度的流量控制</p></li><li><p>头部压缩 HPACK</p></li><li><p>Binary Frame</p></li><li><p>原生 TLS 支持</p></li></ul><h3 id=grpc>gRPC</h3><p>上面提到了在 HTTP 及 TCP 协议之上构建 RPC 协议各自的优缺点,相比于 Dubbo 构建于 TPC 传输层之上,Google 选择将 gRPC 直接定义在 HTTP/2 协议之上,关于 gRPC 的 <a href=https://grpc.io/docs/what-is-grpc/introduction/>基本介绍</a><a href="https://grpc.io/blog/principles/?spm=ata.13261165.0.0.2be55017XbUhs8">设计愿景</a> 请参考以上两篇文章,我这里仅摘取 设计愿景 中几个能反映 gRPC 设计目的特性来做简单说明。</p><ul><li><p>Coverage & Simplicity,协议设计和框架实现要足够通用和简单,能运行在任何设备之上,甚至一些资源首先的如 IoT、Mobile 等设备。</p></li><li><p>Interoperability & Reach,要构建在更通用的协议之上,协议本身要能被网络上几乎所有的基础设施所支持。</p></li><li><p>General Purpose & Performant,要在场景和性能间做好平衡,首先协议本身要是适用于各种场景的,同时也要尽量有高的性能。</p></li><li><p>Payload Agnostic,协议上传输的负载要保持语言和平台中立。</p></li><li><p>Streaming,要支持 Request - Response、Request - Stream、Bi-Steam 等通信模型。</p></li><li><p>Flow Control,协议自身具备流量感知和限制的能力。</p></li><li><p>Metadata Exchange,在 RPC 服务定义之外,提供额外附加数据传输的能力。</p></li></ul><p>总的来说,在这样的设计理念指导下,gRPC 最终被设计为一个跨语言、跨平台的、通用的、高性能的、基于 HTTP/2 的 RPC 协议和框架。</p><h3 id=protobuf>Protobuf</h3><p><a href=https://developers.google.com/protocol-buffers/docs/overview>Protocol buffers (Protobuf)</a> 是 Google 推出的一个跨平台、语言中立的结构化数据描述和序列化的产品,它定义了一套结构化数据定义的协议,同时也提供了相应的 <a href=https://github.com/protocolbuffers/protobuf/releases/tag/v3.10.0>Compiler</a> 工具,用来将语言中立的描述转化为相应语言的具体描述。</p><p>它的一些特性包括:</p><ul><li><p>跨语言 跨平台,语言中立的数据描述格式,默认提供了生成多种语言的 Compiler 工具。</p></li><li><p>安全性,由于反序列化的范围和输出内容格式都是 Compiler 在编译时预生成的,因此绕过了类似 Java Deserialization Vulnarability 的问题。</p></li><li><p>二进制 高性能</p></li><li><p>强类型</p></li><li><p>字段变更向后兼容</p></li></ul><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-gdscript3 data-lang=gdscript3><span style=display:flex><span>message Person {
</span></span><span style=display:flex><span> required string name <span style=color:#719e07>=</span> <span style=color:#2aa198>1</span>;
</span></span><span style=display:flex><span> required int32 id <span style=color:#719e07>=</span> <span style=color:#2aa198>2</span>;
</span></span><span style=display:flex><span> optional string email <span style=color:#719e07>=</span> <span style=color:#2aa198>3</span>;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#719e07>enum</span> PhoneType {
</span></span><span style=display:flex><span> MOBILE <span style=color:#719e07>=</span> <span style=color:#2aa198>0</span>;
</span></span><span style=display:flex><span> HOME <span style=color:#719e07>=</span> <span style=color:#2aa198>1</span>;
</span></span><span style=display:flex><span> WORK <span style=color:#719e07>=</span> <span style=color:#2aa198>2</span>;
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> message PhoneNumber {
</span></span><span style=display:flex><span> required string number <span style=color:#719e07>=</span> <span style=color:#2aa198>1</span>;
</span></span><span style=display:flex><span> optional PhoneType type <span style=color:#719e07>=</span> <span style=color:#2aa198>2</span> [default <span style=color:#719e07>=</span> HOME];
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> repeated PhoneNumber phone <span style=color:#719e07>=</span> <span style=color:#2aa198>4</span>;
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>除了结构化数据描述之外,Protobuf 还支持定义 RPC 服务,它允许我们定义一个 <code>.proto</code> 的服务描述文件,进而利用 Protobuf Compiler 工具生成特定语言和 RPC 框架的接口和 stub。后续将要具体讲到的 gRPC + Protobuf、Dubbo-gRPC + Protobuf 以及 Dubbo + Protobuf 都是通过定制 Compiler 类实现的。</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-fallback data-lang=fallback><span style=display:flex><span>service SearchService {
</span></span><span style=display:flex><span> rpc Search (SearchRequest) returns (SearchResponse);
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h2 id=dubbo-所做的支持>Dubbo 所做的支持</h2><p>跨语言的服务开发涉及到多个方面,从服务定义、RPC 协议到序列化协议都要做到语言中立,同时还针对每种语言有对应的 SDK 实现。虽然得益于社区的贡献,现在 Dubbo 在多语言 SDK 实现上逐步有了起色,已经提供了包括 Java, Go, PHP, C#, Python, NodeJs, C 等版本的客户端或全量实现版本,但在以上提到的跨语言友好型方面,以上三点还是有很多可改进之处。</p><ul><li><p>协议,上面我们已经分析过 Dubbo 协议既有的缺点,如果能在 HTTP/2 之上构建应用层协议,则无疑能避免这些弊端,同时最大可能的提高协议的穿透性,避免网关等协议转换组件的存在,更有利于链路上的流量管控。考虑到 gRPC 是构建在 HTTP/2 之上,并且已经是云原生领域推荐的通信协议,Dubbo 在第一阶段选择了直接支持 gRPC 协议作为当前的 HTTP/2 解决方案。我们也知道 gRPC 框架自身的弊端在于易用性不足以及服务治理能力欠缺(这也是目前绝大多数厂商不会直接裸用 gRPC 框架的原因),通过将其集成进 Dubbo 框架,用户可以方便的使用 Dubbo 编程模型 + Dubbo 服务治理 + gRPC 协议通信的组合。</p></li><li><p>服务定义,当前 Dubbo 的服务定义和具体的编程语言绑定,没有提供一种语言中立的服务描述格式,比如 Java 就是定义 Interface 接口,到了其他语言又得重新以另外的格式定义一遍。因此 Dubbo 通过支持 Protobuf 实现了语言中立的服务定义。</p></li><li><p>序列化,Dubbo 当前支持的序列化包括 Json、Hessian2、Kryo、FST、Java 等,而这其中支持跨语言的只有 Json、Hessian2,通用的 Json 有固有的性能问题,而 Hessian2 无论在效率还是多语言 SDK 方面都有所欠缺。为此,Dubbo 通过支持 Protobuf 序列化来提供更高效、易用的跨语言序列化方案。</p></li></ul><h2 id=示例>示例</h2><h3 id=示例-1使用-dubbo-开发-grpc-服务>示例 1,使用 Dubbo 开发 gRPC 服务</h3><p><a href=https://grpc.io/>gRPC</a> 是 Google 开源的构建在 HTTP/2 之上的一个 PRC 通信协议。Dubbo 依赖其灵活的协议扩展机制,增加了对 gRPC (HTTP/2) 协议的支持。</p><p>目前的支持限定在 Dubbo Java 语言版本,后续 Go 语言或其他语言版本将会以类似方式提供支持。下面,通过一个<a href=https://github.com/apache/dubbo-samples/tree/925c3d150d9030bc72988564e4f97eca1f6fcb89/3-extensions/protocol/dubbo-samples-grpc>简单的示例</a>来演示如何在 Dubbo 中使用 gRPC 协议通信。</p><h4 id=1-定义服务-idl>1. 定义服务 IDL</h4><p>首先,通过标准的 Protobuf 协议定义服务如下:</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-go data-lang=go><span style=display:flex><span>syntax = <span style=color:#2aa198>&#34;proto3&#34;</span>;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>option java_multiple_files = <span style=color:#cb4b16>true</span>;
</span></span><span style=display:flex><span>option java_package = <span style=color:#2aa198>&#34;io.grpc.examples.helloworld&#34;</span>;
</span></span><span style=display:flex><span>option java_outer_classname = <span style=color:#2aa198>&#34;HelloWorldProto&#34;</span>;
</span></span><span style=display:flex><span>option objc_class_prefix = <span style=color:#2aa198>&#34;HLW&#34;</span>;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>package</span> helloworld;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>// The greeting service definition.
</span></span></span><span style=display:flex><span><span style=color:#586e75></span>service Greeter {
</span></span><span style=display:flex><span> <span style=color:#586e75>// Sends a greeting
</span></span></span><span style=display:flex><span><span style=color:#586e75></span> rpc <span style=color:#268bd2>SayHello</span> (HelloRequest) <span style=color:#268bd2>returns</span> (HelloReply) {}
</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>// The request message containing the user&#39;s name.
</span></span></span><span style=display:flex><span><span style=color:#586e75></span>message HelloRequest {
</span></span><span style=display:flex><span> <span style=color:#dc322f>string</span> name = <span style=color:#2aa198>1</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>// The response message containing the greetings
</span></span></span><span style=display:flex><span><span style=color:#586e75></span>message HelloReply {
</span></span><span style=display:flex><span> <span style=color:#dc322f>string</span> message = <span style=color:#2aa198>1</span>;
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>在此,我们定义了一个只有一个方法 sayHello 的 Greeter 服务,同时定义了方法的入参和出参,</p><h4 id=2-pcompiler-生成-stub>2. PCompiler 生成 Stub</h4><ol><li>定义 Maven Protobuf Compiler 插件工具。这里我们扩展了 Protobuf 的 Compiler 工具,以用来生成 Dubbo 特有的 RPC stub,此当前以 Maven 插件的形式发布。</li></ol><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=display:flex><span><span style=color:#268bd2>&lt;plugin&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;groupId&gt;</span>org.xolstice.maven.plugins<span style=color:#268bd2>&lt;/groupId&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;artifactId&gt;</span>protobuf-maven-plugin<span style=color:#268bd2>&lt;/artifactId&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;version&gt;</span>0.5.1<span style=color:#268bd2>&lt;/version&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;configuration&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;protocArtifact&gt;</span>com.google.protobuf:protoc:3.7.1:exe:${os.detected.classifier}
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/protocArtifact&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;pluginId&gt;</span>dubbo-grpc-java<span style=color:#268bd2>&lt;/pluginId&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;pluginArtifact&gt;</span>org.apache.dubbo:protoc-gen-dubbo-java:1.19.0-SNAPSHOT:exe:${os.detected.classifier}<span style=color:#268bd2>&lt;/pluginArtifact&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;outputDirectory&gt;</span>build/generated/source/proto/main/java<span style=color:#268bd2>&lt;/outputDirectory&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;clearOutputDirectory&gt;</span>false<span style=color:#268bd2>&lt;/clearOutputDirectory&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;pluginParameter&gt;</span>grpc<span style=color:#268bd2>&lt;/pluginParameter&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/configuration&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;executions&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;execution&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;goals&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;goal&gt;</span>compile<span style=color:#268bd2>&lt;/goal&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;goal&gt;</span>compile-custom<span style=color:#268bd2>&lt;/goal&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/goals&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/execution&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/executions&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;/plugin&gt;</span>
</span></span></code></pre></div><p>其中,</p><p>pluginArtifact 指定了 Dubbo 定制版本的 Java Protobuf Compiler 插件,通过这个插件来在编译过程中生成 Dubbo 定制版本的 gRPC stub。</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-xml data-lang=xml><span style=display:flex><span> <span style=color:#268bd2>&lt;pluginArtifact&gt;</span>org.apache.dubbo:protoc-gen-dubbo-java:1.19.0-SNAPSHOT:exe:${os.detected.classifier}<span style=color:#268bd2>&lt;/pluginArtifact&gt;</span>
</span></span></code></pre></div><p>由于 <code>protoc-gen-dubbo-java</code> 支持 gRPC 和 Dubbo 两种协议,可生成的 stub 类型,默认值是 gRPC,关于 dubbo 协议的使用可参见 <a href=/zh-cn/overview/mannual/java-sdk/quick-start/idl/>使用 Protobuf 开发 Dubbo 服务</a></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-xml data-lang=xml><span style=display:flex><span><span style=color:#268bd2>&lt;pluginParameter&gt;</span>grpc<span style=color:#268bd2>&lt;/pluginParameter&gt;</span>
</span></span></code></pre></div><ol start=2><li><p>生成 Java Bean 和 Dubbo-gRPC stub</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:#586e75># 运行以下 maven 命令</span>
</span></span><span style=display:flex><span>$ mvn clean compile
</span></span></code></pre></div><p>生成的 Stub 和消息类 如下:
<img src=/imgs/blog/grpc/compiler-classes.png alt=image-20191026130516896></p><p>重点关注 GreeterGrpc ,包含了所有 gRPC 标准的 stub 类/方法,同时增加了 Dubbo 特定的接口,之后 Provider 端的服务暴露和 Consumer 端的服务调用都将依赖这个接口。</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * Code generated for Dubbo
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>IGreeter</span> {
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>default</span> <span style=color:#268bd2>public</span> io.grpc.examples.helloworld.HelloReply <span style=color:#268bd2>sayHello</span>(io.grpc.examples.helloworld.HelloRequest request) {
</span></span><span style=display:flex><span> <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> UnsupportedOperationException(<span style=color:#2aa198>&#34;No need to override this method, extend XxxImplBase and override all methods it allows.&#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:#719e07>default</span> <span style=color:#268bd2>public</span> com.google.common.util.concurrent.ListenableFuture<span style=color:#719e07>&lt;</span>io.grpc.examples.helloworld.HelloReply<span style=color:#719e07>&gt;</span> <span style=color:#268bd2>sayHelloAsync</span>(
</span></span><span style=display:flex><span> io.grpc.examples.helloworld.HelloRequest request) {
</span></span><span style=display:flex><span> <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> UnsupportedOperationException(<span style=color:#2aa198>&#34;No need to override this method, extend XxxImplBase and override all methods it allows.&#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:#dc322f>void</span> <span style=color:#268bd2>sayHello</span>(io.grpc.examples.helloworld.HelloRequest request,
</span></span><span style=display:flex><span> io.grpc.stub.StreamObserver<span style=color:#719e07>&lt;</span>io.grpc.examples.helloworld.HelloReply<span style=color:#719e07>&gt;</span> responseObserver);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div></li></ol><h4 id=3-业务逻辑开发>3. 业务逻辑开发</h4><p>继承 <code>GreeterGrpc.GreeterImplBase</code> (来自第 2 步),编写业务逻辑,这点和原生 gRPC 是一致的。</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:#719e07>package</span> org.apache.dubbo.samples.basic.impl;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> io.grpc.examples.helloworld.GreeterGrpc;
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> io.grpc.examples.helloworld.HelloReply;
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> io.grpc.examples.helloworld.HelloRequest;
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> io.grpc.stub.StreamObserver;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>GrpcGreeterImpl</span> <span style=color:#268bd2>extends</span> GreeterGrpc.GreeterImplBase {
</span></span><span style=display:flex><span> <span style=color:#268bd2>@Override</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>sayHello</span>(HelloRequest request, StreamObserver<span style=color:#719e07>&lt;</span>HelloReply<span style=color:#719e07>&gt;</span> responseObserver) {
</span></span><span style=display:flex><span> System.out.println(<span style=color:#2aa198>&#34;Received request from client.&#34;</span>);
</span></span><span style=display:flex><span> System.out.println(<span style=color:#2aa198>&#34;Executing thread is &#34;</span> <span style=color:#719e07>+</span> Thread.currentThread().getName());
</span></span><span style=display:flex><span> HelloReply reply <span style=color:#719e07>=</span> HelloReply.newBuilder()
</span></span><span style=display:flex><span> .setMessage(<span style=color:#2aa198>&#34;Hello &#34;</span> <span style=color:#719e07>+</span> request.getName()).build();
</span></span><span style=display:flex><span> responseObserver.onNext(reply);
</span></span><span style=display:flex><span> responseObserver.onCompleted();
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h4 id=4-provider-端暴露-dubbo-服务>4. Provider 端暴露 Dubbo 服务</h4><p>以 Spring XML 为例</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-xml data-lang=xml><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:application</span> name=<span style=color:#2aa198>&#34;demo-provider&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>&lt;!-- 指定服务暴露协议为 gRPC --&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:protocol</span> id=<span style=color:#2aa198>&#34;grpc&#34;</span> name=<span style=color:#2aa198>&#34;grpc&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:registry</span> address=<span style=color:#2aa198>&#34;zookeeper://${zookeeper.address:127.0.0.1}:2181&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;bean</span> id=<span style=color:#2aa198>&#34;greeter&#34;</span> class=<span style=color:#2aa198>&#34;org.apache.dubbo.samples.basic.impl.GrpcGreeterImpl&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>&lt;!-- 指定 protoc-gen-dubbo-java 生成的接口 --&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:service</span> interface=<span style=color:#2aa198>&#34;io.grpc.examples.helloworld.GreeterGrpc$IGreeter&#34;</span> ref=<span style=color:#2aa198>&#34;greeter&#34;</span> protocol=<span style=color:#2aa198>&#34;grpc&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>static</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>main</span>(String<span style=color:#719e07>[]</span> args) <span style=color:#268bd2>throws</span> Exception {
</span></span><span style=display:flex><span> ClassPathXmlApplicationContext context <span style=color:#719e07>=</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>new</span> ClassPathXmlApplicationContext(<span style=color:#2aa198>&#34;spring/dubbo-demo-provider.xml&#34;</span>);
</span></span><span style=display:flex><span> context.start();
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> System.out.println(<span style=color:#2aa198>&#34;dubbo service started&#34;</span>);
</span></span><span style=display:flex><span> <span style=color:#719e07>new</span> CountDownLatch(1).await();
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h4 id=5-引用-dubbo-服务>5. 引用 Dubbo 服务</h4><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:application</span> name=<span style=color:#2aa198>&#34;demo-consumer&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:registry</span> address=<span style=color:#2aa198>&#34;zookeeper://${zookeeper.address:127.0.0.1}:2181&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>&lt;!-- 指定 protoc-gen-dubbo-java 生成的接口 --&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:reference</span> id=<span style=color:#2aa198>&#34;greeter&#34;</span> interface=<span style=color:#2aa198>&#34;io.grpc.examples.helloworld.GreeterGrpc$IGreeter&#34;</span> protocol=<span style=color:#2aa198>&#34;grpc&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>static</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>main</span>(String<span style=color:#719e07>[]</span> args) <span style=color:#268bd2>throws</span> IOException {
</span></span><span style=display:flex><span> ClassPathXmlApplicationContext context <span style=color:#719e07>=</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>new</span> ClassPathXmlApplicationContext(<span style=color:#2aa198>&#34;spring/dubbo-demo-consumer.xml&#34;</span>);
</span></span><span style=display:flex><span> context.start();
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> GreeterGrpc.IGreeter greeter <span style=color:#719e07>=</span> (GreeterGrpc.IGreeter) context.getBean(<span style=color:#2aa198>&#34;greeter&#34;</span>);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> HelloReply reply <span style=color:#719e07>=</span> greeter.sayHello(HelloRequest.newBuilder().setName(<span style=color:#2aa198>&#34;world!&#34;</span>).build());
</span></span><span style=display:flex><span> System.out.println(<span style=color:#2aa198>&#34;Result: &#34;</span> <span style=color:#719e07>+</span> reply.getMessage());
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> System.in.read();
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h4 id=示例1附高级用法>示例1附:高级用法</h4><p><strong>一、异步调用</strong></p><p>再来看一遍 <code>protoc-gen-dubbo-java</code> 生成的接口:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * Code generated for Dubbo
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>IGreeter</span> {
</span></span><span style=display:flex><span> <span style=color:#719e07>default</span> <span style=color:#268bd2>public</span> HelloReply <span style=color:#268bd2>sayHello</span>(HelloRequest request) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// ......</span>
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#719e07>default</span> <span style=color:#268bd2>public</span> ListenableFuture<span style=color:#719e07>&lt;</span>HelloReply<span style=color:#719e07>&gt;</span> <span style=color:#268bd2>sayHelloAsync</span>(HelloRequest request) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// ......</span>
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>sayHello</span>(HelloRequest request, StreamObserver<span style=color:#719e07>&lt;</span>HelloReply<span style=color:#719e07>&gt;</span> responseObserver);
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>这里为 sayHello 方法生成了三种类型的重载方法,分别用于同步调用、异步调用和流式调用,如果消费端要进行异步调用,直接调用 sayHelloAsync() 即可:</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>static</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>main</span>(String<span style=color:#719e07>[]</span> args) <span style=color:#268bd2>throws</span> IOException {
</span></span><span style=display:flex><span> <span style=color:#586e75>// ...</span>
</span></span><span style=display:flex><span> GreeterGrpc.IGreeter greeter <span style=color:#719e07>=</span> (GreeterGrpc.IGreeter) context.getBean(<span style=color:#2aa198>&#34;greeter&#34;</span>);
</span></span><span style=display:flex><span> ListenableFuture<span style=color:#719e07>&lt;</span>HelloReply<span style=color:#719e07>&gt;</span> future <span style=color:#719e07>=</span>
</span></span><span style=display:flex><span> greeter.sayHelloAsync(HelloRequest.newBuilder().setName(<span style=color:#2aa198>&#34;world!&#34;</span>).build());
</span></span><span style=display:flex><span> <span style=color:#586e75>// ...</span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p><strong>二、高级配置</strong></p><p>由于当前实现方式是直接集成了 gRPC-java SDK,因此很多配置还没有和 Dubbo 侧对齐,或者还没有以 Dubbo 的配置形式开放,因此,为了提供最大的灵活性,我们直接把 gRPC-java 的配置接口暴露了出来。</p><p>绝大多数场景下,你可能并不会用到以下扩展,因为它们更多的是对 gRPC 协议的拦截或者 HTTP/2 层面的配置。同时使用这些扩展点可能需要对 HTTP/2 或 gRPC 有基本的了解。</p><p><strong>扩展点</strong></p><p>目前支持的扩展点如下:</p><ul><li><p>org.apache.dubbo.rpc.protocol.grpc.interceptors.ClientInterceptor</p></li><li><p>org.apache.dubbo.rpc.protocol.grpc.interceptors.GrpcConfigurator</p></li><li><p>org.apache.dubbo.rpc.protocol.grpc.interceptors.ServerInterceptor</p></li><li><p>org.apache.dubbo.rpc.protocol.grpc.interceptors.ServerTransportFilter</p></li></ul><p>GrpcConfigurator 是最通用的扩展点,我们以此为例来说明一下,其基本定义如下:</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>interface</span> <span style=color:#268bd2>GrpcConfigurator</span> {
</span></span><span style=display:flex><span> <span style=color:#586e75>// 用来定制 gRPC NettyServerBuilder</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>default</span> NettyServerBuilder <span style=color:#268bd2>configureServerBuilder</span>(NettyServerBuilder builder, URL url) {
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> builder;
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#586e75>// 用来定制 gRPC NettyChannelBuilder</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>default</span> NettyChannelBuilder <span style=color:#268bd2>configureChannelBuilder</span>(NettyChannelBuilder builder, URL url) {
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> builder;
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#586e75>// 用来定制 gRPC CallOptions, 定义某个服务在每次请求间传递数据</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>default</span> CallOptions <span style=color:#268bd2>configureCallOptions</span>(CallOptions options, URL url) {
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> options;
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>以下是一个示例扩展实现:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>MyGrpcConfigurator</span> <span style=color:#268bd2>implements</span> GrpcConfigurator {
</span></span><span style=display:flex><span> <span style=color:#268bd2>private</span> <span style=color:#268bd2>final</span> ExecutorService executor <span style=color:#719e07>=</span> Executors
</span></span><span style=display:flex><span> .newFixedThreadPool(200, <span style=color:#719e07>new</span> NamedThreadFactory(<span style=color:#2aa198>&#34;Customized-grpc&#34;</span>, <span style=color:#cb4b16>true</span>));
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>@Override</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> NettyServerBuilder <span style=color:#268bd2>configureServerBuilder</span>(NettyServerBuilder builder, URL url) {
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> builder.executor(executor);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>@Override</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> NettyChannelBuilder <span style=color:#268bd2>configureChannelBuilder</span>(NettyChannelBuilder builder, URL url)
</span></span><span style=display:flex><span> {
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> builder.flowControlWindow(10);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>@Override</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> CallOptions <span style=color:#268bd2>configureCallOptions</span>(CallOptions options, URL url) {
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> options.withOption(CallOptions.Key.create(<span style=color:#2aa198>&#34;key&#34;</span>), <span style=color:#2aa198>&#34;value&#34;</span>);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>配置为 Dubbo SPI,`resources/META-INF/services 增加配置文件</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-properties data-lang=properties><span style=display:flex><span>default<span style=color:#719e07>=</span><span style=color:#2aa198>org.apache.dubbo.samples.basic.comtomize.MyGrpcConfigurator</span>
</span></span></code></pre></div><ol><li><p>指定 Provider 端线程池</p><p>默认用的是 Dubbo 的线程池,有 fixed (默认)、cached、direct 等类型。以下演示了切换为业务自定义线程池。</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>private</span> <span style=color:#268bd2>final</span> ExecutorService executor <span style=color:#719e07>=</span> Executors
</span></span><span style=display:flex><span> .newFixedThreadPool(200, <span style=color:#719e07>new</span> NamedThreadFactory(<span style=color:#2aa198>&#34;Customized-grpc&#34;</span>, <span style=color:#cb4b16>true</span>));
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> NettyServerBuilder <span style=color:#268bd2>configureServerBuilder</span>(NettyServerBuilder builder, URL url)
</span></span><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> builder.executor(executor);
</span></span><span style=display:flex><span>}
</span></span></code></pre></div></li><li><p>指定 Consumer 端限流值</p><p>设置 Consumer 限流值为 10</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>@Override</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> NettyChannelBuilder <span style=color:#268bd2>configureChannelBuilder</span>(NettyChannelBuilder builder, URL url)
</span></span><span style=display:flex><span>{
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> builder.flowControlWindow(10);
</span></span><span style=display:flex><span>}
</span></span></code></pre></div></li><li><p>传递附加参数</p><p>DemoService 服务调用传递 key</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>@Override</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> CallOptions <span style=color:#268bd2>configureCallOptions</span>(CallOptions options, URL url) {
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (url.getServiceInterface().equals(<span style=color:#2aa198>&#34;xxx.DemoService&#34;</span>)) {
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> options.withOption(CallOptions.Key.create(<span style=color:#2aa198>&#34;key&#34;</span>), <span style=color:#2aa198>&#34;value&#34;</span>);
</span></span><span style=display:flex><span> } <span style=color:#719e07>else</span> {
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> options;
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div></li></ol><p><strong>三、TLS 配置</strong></p><p>配置方式和 Dubbo 提供的通用的 <a href=/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/security/tls/>TLS 支持</a>一致,具体请参见文档</p><h3 id=示例-2-使用-protobuf-开发-dubbo-服务>示例 2, 使用 Protobuf 开发 Dubbo 服务</h3><p>下面,我们以一个<a href=https://github.com/apache/dubbo-samples/tree/master/3-extensions/serialization/dubbo-samples-protobuf>具体的示例</a>来看一下基于 Protobuf 的 Dubbo 服务开发流程。</p><h4 id=1-定义服务>1. 定义服务</h4><p>通过标准 Protobuf 定义服务</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-go data-lang=go><span style=display:flex><span>syntax = <span style=color:#2aa198>&#34;proto3&#34;</span>;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>option java_multiple_files = <span style=color:#cb4b16>true</span>;
</span></span><span style=display:flex><span>option java_package = <span style=color:#2aa198>&#34;org.apache.dubbo.demo&#34;</span>;
</span></span><span style=display:flex><span>option java_outer_classname = <span style=color:#2aa198>&#34;DemoServiceProto&#34;</span>;
</span></span><span style=display:flex><span>option objc_class_prefix = <span style=color:#2aa198>&#34;DEMOSRV&#34;</span>;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>package</span> demoservice;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>// The demo service definition.
</span></span></span><span style=display:flex><span><span style=color:#586e75></span>service DemoService {
</span></span><span style=display:flex><span> rpc <span style=color:#268bd2>SayHello</span> (HelloRequest) <span style=color:#268bd2>returns</span> (HelloReply) {}
</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>// The request message containing the user&#39;s name.
</span></span></span><span style=display:flex><span><span style=color:#586e75></span>message HelloRequest {
</span></span><span style=display:flex><span> <span style=color:#dc322f>string</span> name = <span style=color:#2aa198>1</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>// The response message containing the greetings
</span></span></span><span style=display:flex><span><span style=color:#586e75></span>message HelloReply {
</span></span><span style=display:flex><span> <span style=color:#dc322f>string</span> message = <span style=color:#2aa198>1</span>;
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>这里定义了一个 DemoService 服务,服务只包含一个 sayHello 方法,同时定义了方法的入参和出参。</p><h4 id=2-compiler-编译服务>2. Compiler 编译服务</h4><ol><li>引入 Protobuf Compiler Maven 插件,同时指定 <code>protoc-gen-dubbo-java</code> RPC 扩展</li></ol><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=display:flex><span><span style=color:#268bd2>&lt;plugin&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;groupId&gt;</span>org.xolstice.maven.plugins<span style=color:#268bd2>&lt;/groupId&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;artifactId&gt;</span>protobuf-maven-plugin<span style=color:#268bd2>&lt;/artifactId&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;version&gt;</span>0.5.1<span style=color:#268bd2>&lt;/version&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;configuration&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;protocArtifact&gt;</span>com.google.protobuf:protoc:3.7.1:exe:${os.detected.classifier}
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/protocArtifact&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;pluginId&gt;</span>dubbo-grpc-java<span style=color:#268bd2>&lt;/pluginId&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;pluginArtifact&gt;</span>org.apache.dubbo:protoc-gen-dubbo-java:1.19.0-SNAPSHOT:exe:${os.detected.classifier}<span style=color:#268bd2>&lt;/pluginArtifact&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;outputDirectory&gt;</span>build/generated/source/proto/main/java<span style=color:#268bd2>&lt;/outputDirectory&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;clearOutputDirectory&gt;</span>false<span style=color:#268bd2>&lt;/clearOutputDirectory&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;pluginParameter&gt;</span>dubbo<span style=color:#268bd2>&lt;/pluginParameter&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/configuration&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;executions&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;execution&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;goals&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;goal&gt;</span>compile<span style=color:#268bd2>&lt;/goal&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;goal&gt;</span>compile-custom<span style=color:#268bd2>&lt;/goal&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/goals&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/execution&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/executions&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;/plugin&gt;</span>
</span></span></code></pre></div><p>注意,这里与 <a href=https://github.com/apache/dubbo-samples/tree/925c3d150d9030bc72988564e4f97eca1f6fcb89/3-extensions/protocol/dubbo-samples-grpc>Dubbo 对 gRPC</a> 支持部分的区别在于:
<code>&lt;pluginParameter>dubbo&lt;/pluginParameter></code></p><ol start=2><li><p>生成 Dubbo stub</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-shell data-lang=shell><span style=display:flex><span><span style=color:#586e75># 运行以下 maven 命令</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>$mvn</span> clean compile
</span></span></code></pre></div><p>生成的 Java 类如下:</p><p><img src=/imgs/blog/grpc/compiler-protobuf.png alt=image-20191028201240976></p><p>DemoServiceDubbo 为 Dubbo 定制的 stub</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>DemoServiceDubbo</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> AtomicBoolean registered <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> AtomicBoolean();
</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> Class<span style=color:#719e07>&lt;?&gt;</span> init() {
</span></span><span style=display:flex><span> Class<span style=color:#719e07>&lt;?&gt;</span> clazz <span style=color:#719e07>=</span> <span style=color:#cb4b16>null</span>;
</span></span><span style=display:flex><span> <span style=color:#719e07>try</span> {
</span></span><span style=display:flex><span> clazz <span style=color:#719e07>=</span> Class.forName(DemoServiceDubbo.class.getName());
</span></span><span style=display:flex><span> <span style=color:#719e07>if</span> (registered.compareAndSet(<span style=color:#cb4b16>false</span>, <span style=color:#cb4b16>true</span>)) {
</span></span><span style=display:flex><span> org.apache.dubbo.common.serialize.protobuf.support.ProtobufUtils.marshaller(
</span></span><span style=display:flex><span> org.apache.dubbo.demo.HelloRequest.getDefaultInstance());
</span></span><span style=display:flex><span> org.apache.dubbo.common.serialize.protobuf.support.ProtobufUtils.marshaller(
</span></span><span style=display:flex><span> org.apache.dubbo.demo.HelloReply.getDefaultInstance());
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> } <span style=color:#719e07>catch</span> (ClassNotFoundException e) {
</span></span><span style=display:flex><span> <span style=color:#586e75>// ignore </span>
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> clazz;
</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>private</span> <span style=color:#268bd2>DemoServiceDubbo</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:#268bd2>final</span> String SERVICE_NAME <span style=color:#719e07>=</span> <span style=color:#2aa198>&#34;demoservice.DemoService&#34;</span>;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * Code generated for Dubbo
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>IDemoService</span> {
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>static</span> Class<span style=color:#719e07>&lt;?&gt;</span> clazz <span style=color:#719e07>=</span> init();
</span></span><span style=display:flex><span> org.apache.dubbo.demo.HelloReply <span style=color:#268bd2>sayHello</span>(org.apache.dubbo.demo.HelloRequest request);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> java.util.concurrent.CompletableFuture<span style=color:#719e07>&lt;</span>org.apache.dubbo.demo.HelloReply<span style=color:#719e07>&gt;</span> <span style=color:#268bd2>sayHelloAsync</span>(
</span></span><span style=display:flex><span> org.apache.dubbo.demo.HelloRequest request);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>最值得注意的是 <code>IDemoService</code> 接口,它会作为 Dubbo 服务定义基础接口。</p></li></ol><h4 id=3-开发业务逻辑>3. 开发业务逻辑</h4><p>从这一步开始,所有开发流程就和直接定义 Java 接口一样了。实现接口定义业务逻辑。</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>class</span> <span style=color:#268bd2>DemoServiceImpl</span> <span style=color:#268bd2>implements</span> DemoServiceDubbo.IDemoService {
</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(DemoServiceImpl.class);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>@Override</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> HelloReply <span style=color:#268bd2>sayHello</span>(HelloRequest request) {
</span></span><span style=display:flex><span> logger.info(<span style=color:#2aa198>&#34;Hello &#34;</span> <span style=color:#719e07>+</span> request.getName() <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;, request from consumer: &#34;</span> <span style=color:#719e07>+</span> RpcContext.getContext().getRemoteAddress());
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> HelloReply.newBuilder()
</span></span><span style=display:flex><span> .setMessage(<span style=color:#2aa198>&#34;Hello &#34;</span> <span style=color:#719e07>+</span> request.getName() <span style=color:#719e07>+</span> <span style=color:#2aa198>&#34;, response from provider: &#34;</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>+</span> RpcContext.getContext().getLocalAddress())
</span></span><span style=display:flex><span> .build();
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>@Override</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> CompletableFuture<span style=color:#719e07>&lt;</span>HelloReply<span style=color:#719e07>&gt;</span> <span style=color:#268bd2>sayHelloAsync</span>(HelloRequest request) {
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> CompletableFuture.completedFuture(sayHello(request));
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h4 id=4-配置-provider>4. 配置 Provider</h4><p>暴露 Dubbo 服务</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-xml data-lang=xml><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:application</span> name=<span style=color:#2aa198>&#34;demo-provider&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:registry</span> address=<span style=color:#2aa198>&#34;zookeeper://127.0.0.1:2181&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:protocol</span> name=<span style=color:#2aa198>&#34;dubbo&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;bean</span> id=<span style=color:#2aa198>&#34;demoService&#34;</span> class=<span style=color:#2aa198>&#34;org.apache.dubbo.demo.provider.DemoServiceImpl&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:service</span> interface=<span style=color:#2aa198>&#34;org.apache.dubbo.demo.DemoServiceDubbo$IDemoService&#34;</span> ref=<span style=color:#2aa198>&#34;demoService&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>static</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>main</span>(String<span style=color:#719e07>[]</span> args) <span style=color:#268bd2>throws</span> Exception {
</span></span><span style=display:flex><span> ClassPathXmlApplicationContext context <span style=color:#719e07>=</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>new</span> ClassPathXmlApplicationContext(<span style=color:#2aa198>&#34;spring/dubbo-provider.xml&#34;</span>);
</span></span><span style=display:flex><span> context.start();
</span></span><span style=display:flex><span> System.in.read();
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h4 id=5-配置-consumer>5. 配置 Consumer</h4><p>引用 Dubbo 服务</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-xml data-lang=xml><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:application</span> name=<span style=color:#2aa198>&#34;demo-consumer&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:registry</span> address=<span style=color:#2aa198>&#34;zookeeper://127.0.0.1:2181&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;dubbo:reference</span> id=<span style=color:#2aa198>&#34;demoService&#34;</span> check=<span style=color:#2aa198>&#34;false&#34;</span> interface=<span style=color:#2aa198>&#34;org.apache.dubbo.demo.DemoServiceDubbo$IDemoService&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>static</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>main</span>(String<span style=color:#719e07>[]</span> args) <span style=color:#268bd2>throws</span> Exception {
</span></span><span style=display:flex><span> ClassPathXmlApplicationContext context <span style=color:#719e07>=</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>new</span> ClassPathXmlApplicationContext(<span style=color:#2aa198>&#34;spring/dubbo-consumer.xml&#34;</span>);
</span></span><span style=display:flex><span> context.start();
</span></span><span style=display:flex><span> IDemoService demoService <span style=color:#719e07>=</span> context.getBean(<span style=color:#2aa198>&#34;demoService&#34;</span>, IDemoService.class);
</span></span><span style=display:flex><span> HelloRequest request <span style=color:#719e07>=</span> HelloRequest.newBuilder().setName(<span style=color:#2aa198>&#34;Hello&#34;</span>).build();
</span></span><span style=display:flex><span> HelloReply reply <span style=color:#719e07>=</span> demoService.sayHello(request);
</span></span><span style=display:flex><span> System.out.println(<span style=color:#2aa198>&#34;result: &#34;</span> <span style=color:#719e07>+</span> reply.getMessage());
</span></span><span style=display:flex><span> System.in.read();
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5"><li><a href=/zh-cn/blog/2019/10/22/%E6%9C%AC%E5%9C%B0%E5%AD%98%E6%A0%B9%E5%92%8C%E6%9C%AC%E5%9C%B0%E4%BC%AA%E8%A3%85/ aria-label="上一页 - 本地存根和本地伪装" class="btn btn-primary"><span class=mr-1></span>上一页</a></li><li><a href=/zh-cn/blog/2019/11/01/dubbo%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BC%82%E6%AD%A5%E6%8E%A5%E5%8F%A3%E7%9A%84%E5%AE%9E%E7%8E%B0%E8%83%8C%E6%99%AF%E5%92%8C%E5%AE%9E%E8%B7%B5/ aria-label="下一页 - Dubbo客户端异步接口的实现背景和实践" class="btn btn-primary">下一页<span class=ml-1></span></a></li></ul></div><div id=pre-footer><h2>反馈</h2><p class=feedback--prompt>此页是否对您有帮助?</p><button class="btn btn-primary mb-4 feedback--yes"></button>
<button class="btn btn-primary mb-4 feedback--no"></button></div><script>const yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled"),no.disabled=!0,no.classList.add("feedback--button__disabled")};yes.addEventListener("click",()=>{sendFeedback(1),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")}),no.addEventListener("click",()=>{sendFeedback(0),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")})</script></main><div class="d-none d-xl-block col-xl-2 td-toc d-print-none"><div class="td-page-meta ml-2 pb-1 pt-2 mb-0"><a href=https://github.com/apache/dubbo-website/edit/master/content/zh-cn/blog/java/demos/dubbo-supporting-grpc-http2-and-protobuf.md target=_blank><i class="fa fa-edit fa-fw"></i> 编辑此页</a>
<a href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/blog/java/demos/dubbo-supporting-grpc-http2-and-protobuf.md?filename=change-me.md&amp;value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the+page+%28weight+controls+how+its+ordered+amongst+other+pages+in+the+same+directory%3B+lowest+number+first%29.%0A%2A+Add+a+good+commit+message+at+the+bottom+of+the+page+%28%3C80+characters%3B+use+the+extended+description+field+for+more+detail%29.%0A%2A+Create+a+new+branch+so+you+can+preview+your+new+file+and+request+a+review+via+Pull+Request.%0A" target=_blank><i class="fa fa-edit fa-fw"></i> 创建子页面</a>
<a href="https://github.com/apache/dubbo-website/issues/new?title=Dubbo%20%e5%9c%a8%e8%b7%a8%e8%af%ad%e8%a8%80%e5%92%8c%e5%8d%8f%e8%ae%ae%e7%a9%bf%e9%80%8f%e6%80%a7%e6%96%b9%e5%90%91%e4%b8%8a%e7%9a%84%e6%8e%a2%e7%b4%a2%ef%bc%9a%e6%94%af%e6%8c%81%20HTTP/2%20gRPC%20%e5%92%8c%20Protobuf" target=_blank><i class="fab fa-github fa-fw"></i> 登记问题</a>
<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i> 提交项目问题</a></div><nav id=TableOfContents><ul><li><a href=#基本介绍>基本介绍</a><ul><li><a href=#dubbo-协议>Dubbo 协议</a></li><li><a href=#http1>HTTP/1</a></li><li><a href=#http2>HTTP/2</a></li><li><a href=#grpc>gRPC</a></li><li><a href=#protobuf>Protobuf</a></li></ul></li><li><a href=#dubbo-所做的支持>Dubbo 所做的支持</a></li><li><a href=#示例>示例</a><ul><li><a href=#示例-1使用-dubbo-开发-grpc-服务>示例 1,使用 Dubbo 开发 gRPC 服务</a></li><li><a href=#示例-2-使用-protobuf-开发-dubbo-服务>示例 2, 使用 Protobuf 开发 Dubbo 服务</a></li></ul></li></ul></nav><div class="taxonomy taxonomy-terms-cloud taxo-tags"><h5 class=taxonomy-title>Tags</h5><ul class=taxonomy-terms><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/apachecon2023/ data-taxonomy-term=apachecon2023><span class=taxonomy-label>apachecon2023</span><span class=taxonomy-count>7</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/browser/ data-taxonomy-term=browser><span class=taxonomy-label>browser</span><span class=taxonomy-count>1</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/dubbo-aot/ data-taxonomy-term=dubbo-aot><span class=taxonomy-label>dubbo aot</span><span class=taxonomy-count>1</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/dubbo-js/ data-taxonomy-term=dubbo-js><span class=taxonomy-label>dubbo-js</span><span class=taxonomy-count>2</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/ecosystem/ data-taxonomy-term=ecosystem><span class=taxonomy-label>ecosystem</span><span class=taxonomy-count>2</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/go/ data-taxonomy-term=go><span class=taxonomy-label>Go</span><span class=taxonomy-count>28</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/graalvm/ data-taxonomy-term=graalvm><span class=taxonomy-label>GraalVM</span><span class=taxonomy-count>1</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/java/ data-taxonomy-term=java><span class=taxonomy-label>Java</span><span class=taxonomy-count>92</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/metrics/ data-taxonomy-term=metrics><span class=taxonomy-label>metrics</span><span class=taxonomy-count>2</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/native-image/ data-taxonomy-term=native-image><span class=taxonomy-label>Native Image</span><span class=taxonomy-count>2</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/node.js/ data-taxonomy-term=node.js><span class=taxonomy-label>node.js</span><span class=taxonomy-count>2</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/observability/ data-taxonomy-term=observability><span class=taxonomy-label>observability</span><span class=taxonomy-count>2</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/opensergo/ data-taxonomy-term=opensergo><span class=taxonomy-label>opensergo</span><span class=taxonomy-count>1</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/pixiu/ data-taxonomy-term=pixiu><span class=taxonomy-label>Pixiu</span><span class=taxonomy-count>2</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/proposals/ data-taxonomy-term=proposals><span class=taxonomy-label>Proposals</span><span class=taxonomy-count>2</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/protocol/ data-taxonomy-term=protocol><span class=taxonomy-label>protocol</span><span class=taxonomy-count>1</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/release-notes/ data-taxonomy-term=release-notes><span class=taxonomy-label>Release Notes</span><span class=taxonomy-count>11</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/rust/ data-taxonomy-term=rust><span class=taxonomy-label>Rust</span><span class=taxonomy-count>1</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/seata/ data-taxonomy-term=seata><span class=taxonomy-label>seata</span><span class=taxonomy-count>1</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/spring-cloud/ data-taxonomy-term=spring-cloud><span class=taxonomy-label>spring-cloud</span><span class=taxonomy-count>1</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/tracing/ data-taxonomy-term=tracing><span class=taxonomy-label>tracing</span><span class=taxonomy-count>2</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/triple/ data-taxonomy-term=triple><span class=taxonomy-label>triple</span><span class=taxonomy-count>1</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/web/ data-taxonomy-term=web><span class=taxonomy-label>web</span><span class=taxonomy-count>1</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/%E6%94%BF%E9%87%87%E4%BA%91/ data-taxonomy-term=%E6%94%BF%E9%87%87%E4%BA%91><span class=taxonomy-label>政采云</span><span class=taxonomy-count>1</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/%E6%96%B0%E9%97%BB%E5%8A%A8%E6%80%81/ data-taxonomy-term=%E6%96%B0%E9%97%BB%E5%8A%A8%E6%80%81><span class=taxonomy-label>新闻动态</span><span class=taxonomy-count>24</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/ data-taxonomy-term=%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90><span class=taxonomy-label>源码解析</span><span class=taxonomy-count>34</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/%E7%94%9F%E6%80%81/ data-taxonomy-term=%E7%94%9F%E6%80%81><span class=taxonomy-label>生态</span><span class=taxonomy-count>14</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/%E7%94%A8%E6%88%B7%E6%A1%88%E4%BE%8B/ data-taxonomy-term=%E7%94%A8%E6%88%B7%E6%A1%88%E4%BE%8B><span class=taxonomy-label>用户案例</span><span class=taxonomy-count>11</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/zh-cn/tags/%E7%BD%91%E5%85%B3/ data-taxonomy-term=%E7%BD%91%E5%85%B3><span class=taxonomy-label>网关</span><span class=taxonomy-count>4</span></a></li></ul></div></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. 保留所有权利</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>