This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site-v2
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git


The following commit(s) were added to refs/heads/asf-site-v2 by this push:
     new 1721815dfc deploy: b66e7b9e655efedc2bd69ba66a17f706b359a1d2
1721815dfc is described below

commit 1721815dfc09d96580b1e973b91871c327a0a471
Author: AlbumenJ <[email protected]>
AuthorDate: Sun Jun 18 05:43:47 2023 +0000

    deploy: b66e7b9e655efedc2bd69ba66a17f706b359a1d2
---
 sitemap.xml                                        |   2 +-
 .../protocol/triple/guide/index.html               | 362 ++++++++++-----------
 .../reference-manual/protocol/triple/index.xml     | 160 +++++----
 .../protocol/triple/migration/index.html           |  11 +-
 .../protocol/triple/streaming/index.html           |   6 +-
 zh-cn/sitemap.xml                                  |   2 +-
 6 files changed, 270 insertions(+), 273 deletions(-)

diff --git a/sitemap.xml b/sitemap.xml
index 5df258515c..4bc1d3ca2b 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><sitemapindex 
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9";><sitemap><loc>https://dubbo.apache.org/zh-cn/sitemap.xml</loc><lastmod>2023-06-18T13:38:13+08:00</lastmod></sitemap><sitemap><loc>https://dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-05-10T11:59:30+08:00</lastmod></sitemap></sitemapindex>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><sitemapindex 
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9";><sitemap><loc>https://dubbo.apache.org/zh-cn/sitemap.xml</loc><lastmod>2023-06-18T13:38:48+08:00</lastmod></sitemap><sitemap><loc>https://dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-05-10T11:59:30+08:00</lastmod></sitemap></sitemapindex>
\ No newline at end of file
diff --git 
a/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/guide/index.html
 
b/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/guide/index.html
index 0a02c34dd3..82d6557d43 100644
--- 
a/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/guide/index.html
+++ 
b/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/guide/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS 
content="INDEX, FOLLOW"><link rel=canonical 
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/guide/><meta
 charset=utf-8><meta name=viewport 
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta 
name=generator content="Hugo 0.113.0"><link rel="shortcut icon" type=image/png 
href=/imgs/favicon.png><link rel=apple-touch-icon 
href=/favicons/apple-touch-icon-180x180.p [...]
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS 
content="INDEX, FOLLOW"><link rel=canonical 
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/guide/><meta
 charset=utf-8><meta name=viewport 
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta 
name=generator content="Hugo 0.113.0"><link rel="shortcut icon" type=image/png 
href=/imgs/favicon.png><link rel=apple-touch-icon 
href=/favicons/apple-touch-icon-180x180.p [...]
 <script>var 
doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function 
gtag(){dataLayer.push(arguments)}gtag("js",new 
Date),gtag("config","G-1TFHM5YBH0",{anonymize_ip:!1})}</script><link 
rel=preload 
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
 as=style><link 
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
 rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js 
integrity="sha256-9/a [...]
 <link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta 
name=theme-color content="#326ce5"><link rel=stylesheet 
href=/css/feature-states.css><meta name=description content="协议使用方式"><meta 
property="og:description" content="协议使用方式"><meta name=twitter:description 
content="协议使用方式"><meta property="og:url" 
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/guide/";><meta
 property="og:title" content="协议使用方式"><meta name=twitter [...]
 <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=" 
[...]
@@ -670,213 +670,213 @@
 <label for=m-zh-cnoverviewreferenceprotocols-check><a 
href=/zh-cn/overview/reference/protocols/ class="align-left pl-0 
td-sidebar-link td-sidebar-link__section" 
id=m-zh-cnoverviewreferenceprotocols><span>协议规范</span></a></label><ul 
class="ul-3 foldable"><li class="td-sidebar-nav__section-title 
td-sidebar-nav__section without-child" 
id=m-zh-cnoverviewreferenceprotocolstriple-li><input type=checkbox 
id=m-zh-cnoverviewreferenceprotocolstriple-check>
 <label for=m-zh-cnoverviewreferenceprotocolstriple-check><a 
href=/zh-cn/overview/reference/protocols/triple/ title="Triple 协议设计理念与规范" 
class="align-left pl-0 td-sidebar-link td-sidebar-link__page" 
id=m-zh-cnoverviewreferenceprotocolstriple><span>Triple 
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title 
td-sidebar-nav__section without-child" 
id=m-zh-cnoverviewreferenceprotocolstcp-li><input type=checkbox 
id=m-zh-cnoverviewreferenceprotocolstcp-check>
 <label for=m-zh-cnoverviewreferenceprotocolstcp-check><a 
href=/zh-cn/overview/reference/protocols/tcp/ class="align-left pl-0 
td-sidebar-link td-sidebar-link__page" 
id=m-zh-cnoverviewreferenceprotocolstcp><span>Dubbo2 
协议规范</span></a></label></li><li class="td-sidebar-nav__section-title 
td-sidebar-nav__section without-child" 
id=m-zh-cnoverviewreferenceprotocolshttp-li><input type=checkbox 
id=m-zh-cnoverviewreferenceprotocolshttp-check>
-<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a 
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0 
td-sidebar-link td-sidebar-link__page" 
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP 
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
 class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb 
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a 
href=https://dubbo.apache.org/zh-cn/o [...]
+<label for=m-zh-cnoverviewreferenceprotocolshttp-check><a 
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0 
td-sidebar-link td-sidebar-link__page" 
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP 
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
 class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb 
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a 
href=https://dubbo.apache.org/zh-cn/o [...]
 </span></span><span style=display:flex><span>
-</span></span><span style=display:flex><span><span 
style=color:#719e07>option</span> java_multiple_files <span 
style=color:#719e07>=</span> <span style=color:#cb4b16>true</span>;
-</span></span><span style=display:flex><span><span 
style=color:#719e07>option</span> java_package <span 
style=color:#719e07>=</span> <span 
style=color:#2aa198>&#34;org.apache.dubbo.hello&#34;</span>;
-</span></span><span style=display:flex><span><span 
style=color:#719e07>option</span> java_outer_classname <span 
style=color:#719e07>=</span> <span 
style=color:#2aa198>&#34;HelloWorldProto&#34;</span>;
-</span></span><span style=display:flex><span><span 
style=color:#719e07>option</span> objc_class_prefix <span 
style=color:#719e07>=</span> <span style=color:#2aa198>&#34;HLW&#34;</span>;
+</span></span><span style=display:flex><span>    <span 
style=color:#719e07>option</span> java_multiple_files <span 
style=color:#719e07>=</span> <span style=color:#cb4b16>true</span>;
+</span></span><span style=display:flex><span>    <span 
style=color:#719e07>option</span> java_package <span 
style=color:#719e07>=</span> <span 
style=color:#2aa198>&#34;org.apache.dubbo.hello&#34;</span>;
+</span></span><span style=display:flex><span>    <span 
style=color:#719e07>option</span> java_outer_classname <span 
style=color:#719e07>=</span> <span 
style=color:#2aa198>&#34;HelloWorldProto&#34;</span>;
+</span></span><span style=display:flex><span>    <span 
style=color:#719e07>option</span> objc_class_prefix <span 
style=color:#719e07>=</span> <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 
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 
request message containing the user&#39;s name.
-</span></span></span><span style=display:flex><span><span 
style=color:#586e75></span><span style=color:#268bd2>message</span> <span 
style=color:#268bd2>HelloRequest</span> {
-</span></span><span style=display:flex><span>  <span 
style=color:#dc322f>string</span> name <span style=color:#719e07>=</span> <span 
style=color:#2aa198>1</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>    <span style=color:#268bd2>message</span> <span 
style=color:#268bd2>HelloRequest</span> {
+</span></span><span style=display:flex><span>      <span 
style=color:#dc322f>string</span> name <span style=color:#719e07>=</span> <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><span style=color:#268bd2>message</span> <span 
style=color:#268bd2>HelloReply</span> {
-</span></span><span style=display:flex><span>  <span 
style=color:#dc322f>string</span> <span style=color:#268bd2>message</span> 
<span style=color:#719e07>=</span> <span style=color:#2aa198>1</span>;
-</span></span><span style=display:flex><span>}
-</span></span></code></pre></div></li><li><p>添加编译 protobuf 的 extension 和 
plugin (以 maven 为例)</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;extensions&gt;</span>
-</span></span><span style=display:flex><span>            <span 
style=color:#268bd2>&lt;extension&gt;</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#268bd2>&lt;groupId&gt;</span>kr.motd.maven<span 
style=color:#268bd2>&lt;/groupId&gt;</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#268bd2>&lt;artifactId&gt;</span>os-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>1.6.1<span 
style=color:#268bd2>&lt;/version&gt;</span>
-</span></span><span style=display:flex><span>            <span 
style=color:#268bd2>&lt;/extension&gt;</span>
-</span></span><span style=display:flex><span>        <span 
style=color:#268bd2>&lt;/extensions&gt;</span>
-</span></span><span style=display:flex><span>        <span 
style=color:#268bd2>&lt;plugins&gt;</span>
-</span></span><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.6.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
 style=color:#268bd2>&lt;/protocArtifact&gt;</span>
-</span></span><span style=display:flex><span>                    <span 
style=color:#268bd2>&lt;pluginId&gt;</span>triple-java<span 
style=color:#268bd2>&lt;/pluginId&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;/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>test-compile<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><span style=display:flex><span>        <span 
style=color:#268bd2>&lt;/plugins&gt;</span>
-</span></span></code></pre></div></li><li><p>构建/ 编译生成 protobuf Message 
类</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>mvn clean 
install
-</span></span></code></pre></div></li></ol><h3 id=unary-方式>Unary 方式</h3><ol 
start=4><li><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:#719e07>import</span> org.apache.dubbo.hello.HelloReply<span 
style=color:#719e07>;</span>
-</span></span><span style=display:flex><span><span 
style=color:#719e07>import</span> org.apache.dubbo.hello.HelloRequest<span 
style=color:#719e07>;</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>    <span style=color:#268bd2>message</span> <span 
style=color:#268bd2>HelloReply</span> {
+</span></span><span style=display:flex><span>      <span 
style=color:#dc322f>string</span> <span style=color:#268bd2>message</span> 
<span style=color:#719e07>=</span> <span style=color:#2aa198>1</span>;
+</span></span><span style=display:flex><span>    }
+</span></span></code></pre></div><ol start=2><li>添加编译 protobuf 的 extension 和 
plugin (以 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;extensions&gt;</span>
+</span></span><span style=display:flex><span>                <span 
style=color:#268bd2>&lt;extension&gt;</span>
+</span></span><span style=display:flex><span>                    <span 
style=color:#268bd2>&lt;groupId&gt;</span>kr.motd.maven<span 
style=color:#268bd2>&lt;/groupId&gt;</span>
+</span></span><span style=display:flex><span>                    <span 
style=color:#268bd2>&lt;artifactId&gt;</span>os-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>1.6.1<span 
style=color:#268bd2>&lt;/version&gt;</span>
+</span></span><span style=display:flex><span>                <span 
style=color:#268bd2>&lt;/extension&gt;</span>
+</span></span><span style=display:flex><span>            <span 
style=color:#268bd2>&lt;/extensions&gt;</span>
+</span></span><span style=display:flex><span>            <span 
style=color:#268bd2>&lt;plugins&gt;</span>
+</span></span><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.6.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
 style=color:#268bd2>&lt;/protocArtifact&gt;</span>
+</span></span><span style=display:flex><span>                        <span 
style=color:#268bd2>&lt;pluginId&gt;</span>triple-java<span 
style=color:#268bd2>&lt;/pluginId&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;/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>test-compile<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><span style=display:flex><span>            <span 
style=color:#268bd2>&lt;/plugins&gt;</span>
+</span></span></code></pre></div><ol start=3><li>构建/ 编译生成 protobuf Message 
类</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-shell data-lang=shell><span style=display:flex><span>mvn clean 
install
+</span></span></code></pre></div><h3 id=unary-方式>Unary 方式</h3><ol 
start=4><li>编写 Java 接口</li></ol><div class=highlight><pre tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-java data-lang=java><span style=display:flex><span>    <span 
style=color:#719e07>import</span> org.apache.dubbo.hello.HelloReply<span 
style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>    <span 
style=color:#719e07>import</span> org.apache.dubbo.hello.HelloRequest<span 
style=color:#719e07>;</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>interface</span> 
<span style=color:#268bd2>IGreeter</span> <span style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>    <span style=color:#586e75>/**
-</span></span></span><span style=display:flex><span><span style=color:#586e75> 
    * &lt;pre&gt;
-</span></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> 
    * &lt;/pre&gt;
-</span></span></span><span style=display:flex><span><span style=color:#586e75> 
    */</span>
-</span></span><span style=display:flex><span>    HelloReply <span 
style=color:#268bd2>sayHello</span><span 
style=color:#719e07>(</span>HelloRequest request<span 
style=color:#719e07>);</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 style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>        <span 
style=color:#586e75>/**
+</span></span></span><span style=display:flex><span><span style=color:#586e75> 
        * &lt;pre&gt;
+</span></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> 
        * &lt;/pre&gt;
+</span></span></span><span style=display:flex><span><span style=color:#586e75> 
        */</span>
+</span></span><span style=display:flex><span>        HelloReply <span 
style=color:#268bd2>sayHello</span><span 
style=color:#719e07>(</span>HelloRequest request<span 
style=color:#719e07>);</span>
 </span></span><span style=display:flex><span>
-</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
-</span></span></code></pre></div></li><li><p>创建 Provider</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><span 
style=color:#719e07>(</span>String<span style=color:#719e07>[]</span> ar [...]
-</span></span><span style=display:flex><span>        ServiceConfig<span 
style=color:#719e07>&lt;</span>IGreeter<span style=color:#719e07>&gt;</span> 
service <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> 
ServiceConfig<span style=color:#719e07>&lt;&gt;();</span>
-</span></span><span style=display:flex><span>        service<span 
style=color:#719e07>.</span>setInterface<span 
style=color:#719e07>(</span>IGreeter<span 
style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>        service<span 
style=color:#719e07>.</span>setRef<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> IGreeter1Impl<span 
style=color:#719e07>());</span>
-</span></span><span style=display:flex><span>        <span 
style=color:#586e75>// 这里需要显示声明使用的协议为triple 
-</span></span></span><span style=display:flex><span><span 
style=color:#586e75></span>        service<span 
style=color:#719e07>.</span>setProtocol<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> ProtocolConfig<span 
style=color:#719e07>(</span>CommonConstants<span 
style=color:#719e07>.</span>TRIPLE<span style=color:#719e07>,</span> <span 
style=color:#2aa198>50051</span><span style=color:#719e07>));</span>
-</span></span><span style=display:flex><span>        service<span 
style=color:#719e07>.</span>setApplication<span 
style=color:#719e07>(</span><span style=color:#719e07>new</span> 
ApplicationConfig<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;demo-provider&#34;</span><span 
style=color:#719e07>));</span>
-</span></span><span style=display:flex><span>        service<span 
style=color:#719e07>.</span>setRegistry<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> RegistryConfig<span 
style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;zookeeper://127.0.0.1:2181&#34;</span><span 
style=color:#719e07>));</span>
-</span></span><span style=display:flex><span>        service<span 
style=color:#719e07>.</span>export<span style=color:#719e07>();</span>
-</span></span><span style=display:flex><span>        System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;dubbo service 
started&#34;</span><span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>        <span 
style=color:#719e07>new</span> CountDownLatch<span 
style=color:#719e07>(</span><span style=color:#2aa198>1</span><span 
style=color:#719e07>).</span>await<span style=color:#719e07>();</span>
 </span></span><span style=display:flex><span>    <span 
style=color:#719e07>}</span>
-</span></span></code></pre></div></li><li><p>创建 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:#268bd2>public</span> <span style=color:#268bd2>static</span> <span 
style=color:#dc322f>void</span> <span style=color:#268bd2>main</span><span 
style=color:#719e07>(</span>String<span style=color:#719e07>[]</span> args<s 
[...]
-</span></span><span style=display:flex><span>    ReferenceConfig<span 
style=color:#719e07>&lt;</span>IGreeter<span style=color:#719e07>&gt;</span> 
ref <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> 
ReferenceConfig<span style=color:#719e07>&lt;&gt;();</span>
-</span></span><span style=display:flex><span>    ref<span 
style=color:#719e07>.</span>setInterface<span 
style=color:#719e07>(</span>IGreeter<span 
style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>    ref<span 
style=color:#719e07>.</span>setCheck<span style=color:#719e07>(</span><span 
style=color:#cb4b16>false</span><span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>    ref<span 
style=color:#719e07>.</span>setProtocol<span 
style=color:#719e07>(</span>CommonConstants<span 
style=color:#719e07>.</span>TRIPLE<span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>    ref<span 
style=color:#719e07>.</span>setLazy<span style=color:#719e07>(</span><span 
style=color:#cb4b16>true</span><span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>    ref<span 
style=color:#719e07>.</span>setTimeout<span style=color:#719e07>(</span><span 
style=color:#2aa198>100000</span><span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>    ref<span 
style=color:#719e07>.</span>setApplication<span 
style=color:#719e07>(</span><span style=color:#719e07>new</span> 
ApplicationConfig<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;demo-consumer&#34;</span><span 
style=color:#719e07>));</span>
-</span></span><span style=display:flex><span>    ref<span 
style=color:#719e07>.</span>setRegistry<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> RegistryConfig<span 
style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;zookeeper://127.0.0.1:2181&#34;</span><span 
style=color:#719e07>));</span>
-</span></span><span style=display:flex><span>    <span 
style=color:#268bd2>final</span> IGreeter iGreeter <span 
style=color:#719e07>=</span> ref<span style=color:#719e07>.</span>get<span 
style=color:#719e07>();</span>
+</span></span></code></pre></div><ol start=5><li>创建 Provider</li></ol><div 
class=highlight><pre tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-java data-lang=java><span style=display:flex><span>        
<span style=color:#268bd2>public</span> <span style=color:#268bd2>static</span> 
<span style=color:#dc322f>void</span> <span 
style=color:#268bd2>main</span><span style=color:#719e07>(</span>String<span 
style=color:#719e0 [...]
+</span></span><span style=display:flex><span>            ServiceConfig<span 
style=color:#719e07>&lt;</span>IGreeter<span style=color:#719e07>&gt;</span> 
service <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> 
ServiceConfig<span style=color:#719e07>&lt;&gt;();</span>
+</span></span><span style=display:flex><span>            service<span 
style=color:#719e07>.</span>setInterface<span 
style=color:#719e07>(</span>IGreeter<span 
style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>            service<span 
style=color:#719e07>.</span>setRef<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> IGreeter1Impl<span 
style=color:#719e07>());</span>
+</span></span><span style=display:flex><span>            <span 
style=color:#586e75>// 这里需要显示声明使用的协议为triple 
+</span></span></span><span style=display:flex><span><span 
style=color:#586e75></span>            service<span 
style=color:#719e07>.</span>setProtocol<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> ProtocolConfig<span 
style=color:#719e07>(</span>CommonConstants<span 
style=color:#719e07>.</span>TRIPLE<span style=color:#719e07>,</span> <span 
style=color:#2aa198>50051</span><span style=color:#719e07>));</span>
+</span></span><span style=display:flex><span>            service<span 
style=color:#719e07>.</span>setApplication<span 
style=color:#719e07>(</span><span style=color:#719e07>new</span> 
ApplicationConfig<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;demo-provider&#34;</span><span 
style=color:#719e07>));</span>
+</span></span><span style=display:flex><span>            service<span 
style=color:#719e07>.</span>setRegistry<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> RegistryConfig<span 
style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;zookeeper://127.0.0.1:2181&#34;</span><span 
style=color:#719e07>));</span>
+</span></span><span style=display:flex><span>            service<span 
style=color:#719e07>.</span>export<span style=color:#719e07>();</span>
+</span></span><span style=display:flex><span>            System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;dubbo service 
started&#34;</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>            <span 
style=color:#719e07>new</span> CountDownLatch<span 
style=color:#719e07>(</span><span style=color:#2aa198>1</span><span 
style=color:#719e07>).</span>await<span style=color:#719e07>();</span>
+</span></span><span style=display:flex><span>        <span 
style=color:#719e07>}</span>
+</span></span></code></pre></div><ol start=6><li>创建 Consumer</li></ol><div 
class=highlight><pre tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-java data-lang=java><span style=display:flex><span>    <span 
style=color:#268bd2>public</span> <span style=color:#268bd2>static</span> <span 
style=color:#dc322f>void</span> <span style=color:#268bd2>main</span><span 
style=color:#719e07>(</span>String<span style=color:#719e07>[] [...]
+</span></span><span style=display:flex><span>        ReferenceConfig<span 
style=color:#719e07>&lt;</span>IGreeter<span style=color:#719e07>&gt;</span> 
ref <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> 
ReferenceConfig<span style=color:#719e07>&lt;&gt;();</span>
+</span></span><span style=display:flex><span>        ref<span 
style=color:#719e07>.</span>setInterface<span 
style=color:#719e07>(</span>IGreeter<span 
style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>        ref<span 
style=color:#719e07>.</span>setCheck<span style=color:#719e07>(</span><span 
style=color:#cb4b16>false</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>        ref<span 
style=color:#719e07>.</span>setProtocol<span 
style=color:#719e07>(</span>CommonConstants<span 
style=color:#719e07>.</span>TRIPLE<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>        ref<span 
style=color:#719e07>.</span>setLazy<span style=color:#719e07>(</span><span 
style=color:#cb4b16>true</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>        ref<span 
style=color:#719e07>.</span>setTimeout<span style=color:#719e07>(</span><span 
style=color:#2aa198>100000</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>        ref<span 
style=color:#719e07>.</span>setApplication<span 
style=color:#719e07>(</span><span style=color:#719e07>new</span> 
ApplicationConfig<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;demo-consumer&#34;</span><span 
style=color:#719e07>));</span>
+</span></span><span style=display:flex><span>        ref<span 
style=color:#719e07>.</span>setRegistry<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> RegistryConfig<span 
style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;zookeeper://127.0.0.1:2181&#34;</span><span 
style=color:#719e07>));</span>
+</span></span><span style=display:flex><span>        <span 
style=color:#268bd2>final</span> IGreeter iGreeter <span 
style=color:#719e07>=</span> ref<span style=color:#719e07>.</span>get<span 
style=color:#719e07>();</span>
 </span></span><span style=display:flex><span>
-</span></span><span style=display:flex><span>    System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;dubbo ref 
started&#34;</span><span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>    <span 
style=color:#719e07>try</span> <span style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>        <span 
style=color:#268bd2>final</span> HelloReply reply <span 
style=color:#719e07>=</span> iGreeter<span 
style=color:#719e07>.</span>sayHello<span 
style=color:#719e07>(</span>HelloRequest<span 
style=color:#719e07>.</span>newBuilder<span style=color:#719e07>()</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#719e07>.</span>setName<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;name&#34;</span><span style=color:#719e07>)</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#719e07>.</span>build<span style=color:#719e07>());</span>
-</span></span><span style=display:flex><span>        TimeUnit<span 
style=color:#719e07>.</span>SECONDS<span style=color:#719e07>.</span>sleep<span 
style=color:#719e07>(</span><span style=color:#2aa198>1</span><span 
style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>        System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;Reply:&#34;</span> 
<span style=color:#719e07>+</span> reply<span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>    <span 
style=color:#719e07>}</span> <span style=color:#719e07>catch</span> <span 
style=color:#719e07>(</span>Throwable t<span style=color:#719e07>)</span> <span 
style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>        t<span 
style=color:#719e07>.</span>printStackTrace<span style=color:#719e07>();</span>
+</span></span><span style=display:flex><span>        System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;dubbo ref 
started&#34;</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>        <span 
style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>            <span 
style=color:#268bd2>final</span> HelloReply reply <span 
style=color:#719e07>=</span> iGreeter<span 
style=color:#719e07>.</span>sayHello<span 
style=color:#719e07>(</span>HelloRequest<span 
style=color:#719e07>.</span>newBuilder<span style=color:#719e07>()</span>
+</span></span><span style=display:flex><span>                    <span 
style=color:#719e07>.</span>setName<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;name&#34;</span><span style=color:#719e07>)</span>
+</span></span><span style=display:flex><span>                    <span 
style=color:#719e07>.</span>build<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span>            TimeUnit<span 
style=color:#719e07>.</span>SECONDS<span style=color:#719e07>.</span>sleep<span 
style=color:#719e07>(</span><span style=color:#2aa198>1</span><span 
style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>            System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;Reply:&#34;</span> 
<span style=color:#719e07>+</span> reply<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>        <span 
style=color:#719e07>}</span> <span style=color:#719e07>catch</span> <span 
style=color:#719e07>(</span>Throwable t<span style=color:#719e07>)</span> <span 
style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>            t<span 
style=color:#719e07>.</span>printStackTrace<span style=color:#719e07>();</span>
+</span></span><span style=display:flex><span>        <span 
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>        System<span 
style=color:#719e07>.</span>in<span style=color:#719e07>.</span>read<span 
style=color:#719e07>();</span>
 </span></span><span style=display:flex><span>    <span 
style=color:#719e07>}</span>
-</span></span><span style=display:flex><span>    System<span 
style=color:#719e07>.</span>in<span style=color:#719e07>.</span>read<span 
style=color:#719e07>();</span>
-</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
-</span></span></code></pre></div></li><li><p>运行 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:#719e07>&gt;</span> Reply<span 
style=color:#719e07>:</span>message<span style=color:#719e07>:</span> <span 
style=color:#2aa198>&#34;name&#34;</span>
-</span></span></code></pre></div></li></ol><h3 id=stream-方式>stream 方式</h3><ol 
start=8><li><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:#719e07>import</span> org.apache.dubbo.hello.HelloReply<span 
style=color:#719e07>;</span>
-</span></span><span style=display:flex><span><span 
style=color:#719e07>import</span> org.apache.dubbo.hello.HelloRequest<span 
style=color:#719e07>;</span>
+</span></span></code></pre></div><ol start=7><li>运行 Provider 和 Consumer 
,可以看到请求正常返回</li></ol><div class=highlight><pre tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-java data-lang=java><span style=display:flex><span><span 
style=color:#719e07>&gt;</span> Reply<span 
style=color:#719e07>:</span>message<span style=color:#719e07>:</span> <span 
style=color:#2aa198>&#34;name&#34;</span>
+</span></span></code></pre></div><h3 id=stream-方式>stream 方式</h3><ol 
start=8><li>编写 Java 接口</li></ol><div class=highlight><pre tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-java data-lang=java><span style=display:flex><span>    <span 
style=color:#719e07>import</span> org.apache.dubbo.hello.HelloReply<span 
style=color:#719e07>;</span>
+</span></span><span style=display:flex><span>    <span 
style=color:#719e07>import</span> org.apache.dubbo.hello.HelloRequest<span 
style=color:#719e07>;</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>interface</span> 
<span style=color:#268bd2>IGreeter</span> <span style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>    <span style=color:#586e75>/**
-</span></span></span><span style=display:flex><span><span style=color:#586e75> 
        * &lt;pre&gt;
-</span></span></span><span style=display:flex><span><span style=color:#586e75> 
        *  Sends greeting by stream
-</span></span></span><span style=display:flex><span><span style=color:#586e75> 
        * &lt;/pre&gt;
-</span></span></span><span style=display:flex><span><span style=color:#586e75> 
 */</span>
-</span></span><span style=display:flex><span>    StreamObserver<span 
style=color:#719e07>&lt;</span>HelloRequest<span 
style=color:#719e07>&gt;</span> <span style=color:#268bd2>sayHello</span><span 
style=color:#719e07>(</span>StreamObserver<span 
style=color:#719e07>&lt;</span>HelloReply<span style=color:#719e07>&gt;</span> 
replyObserver<span style=color:#719e07>);</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 style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>        <span 
style=color:#586e75>/**
+</span></span></span><span style=display:flex><span><span style=color:#586e75> 
        * &lt;pre&gt;
+</span></span></span><span style=display:flex><span><span style=color:#586e75> 
        *  Sends greeting by stream
+</span></span></span><span style=display:flex><span><span style=color:#586e75> 
        * &lt;/pre&gt;
+</span></span></span><span style=display:flex><span><span style=color:#586e75> 
         */</span>
+</span></span><span style=display:flex><span>      StreamObserver<span 
style=color:#719e07>&lt;</span>HelloRequest<span 
style=color:#719e07>&gt;</span> <span style=color:#268bd2>sayHello</span><span 
style=color:#719e07>(</span>StreamObserver<span 
style=color:#719e07>&lt;</span>HelloReply<span style=color:#719e07>&gt;</span> 
replyObserver<span style=color:#719e07>);</span>
 </span></span><span style=display:flex><span>
-</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
-</span></span></code></pre></div></li><li><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>IStreamGreeterImpl</span> <span 
style=color:#268bd2>implements</span> IStreamGreeter <span 
style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>    <span 
style=color:#719e07>}</span>
+</span></span></code></pre></div><ol start=9><li>编写实现类</li></ol><div 
class=highlight><pre tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-java data-lang=java><span style=display:flex><span>    <span 
style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span 
style=color:#268bd2>IStreamGreeterImpl</span> <span 
style=color:#268bd2>implements</span> IStreamGreeter <span 
style=color:#719e07>{</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> StreamObserver<span 
style=color:#719e07>&lt;</span>HelloRequest<span 
style=color:#719e07>&gt;</span> <span style=color:#268bd2>sayHello</span><span 
style=color:#719e07>(</span>StreamObserver<span 
style=color:#719e07>&lt;</span>HelloReply<span style=color:#719e07>&gt;</span> 
replyObserver<span style=color:#719e07>)</span> <span 
style=color:#719e07>{</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> StreamObserver<span 
style=color:#719e07>&lt;</span>HelloRequest<span 
style=color:#719e07>&gt;</span> <span style=color:#268bd2>sayHello</span><span 
style=color:#719e07>(</span>StreamObserver<span 
style=color:#719e07>&lt;</span>HelloReply<span style=color:#719e07>&gt;</span> 
replyObserver<span style=color:#719e07>)</span> <span 
style=color:#719e07>{</span>
 </span></span><span style=display:flex><span>
-</span></span><span style=display:flex><span>        <span 
style=color:#719e07>return</span> <span style=color:#719e07>new</span> 
StreamObserver<span style=color:#719e07>&lt;</span>HelloRequest<span 
style=color:#719e07>&gt;()</span> <span style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>            <span 
style=color:#268bd2>private</span> List<span 
style=color:#719e07>&lt;</span>HelloReply<span style=color:#719e07>&gt;</span> 
replyList <span style=color:#719e07>=</span> <span 
style=color:#719e07>new</span> ArrayList<span 
style=color:#719e07>&lt;&gt;();</span>
+</span></span><span style=display:flex><span>          <span 
style=color:#719e07>return</span> <span style=color:#719e07>new</span> 
StreamObserver<span style=color:#719e07>&lt;</span>HelloRequest<span 
style=color:#719e07>&gt;()</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>              <span 
style=color:#268bd2>private</span> List<span 
style=color:#719e07>&lt;</span>HelloReply<span style=color:#719e07>&gt;</span> 
replyList <span style=color:#719e07>=</span> <span 
style=color:#719e07>new</span> ArrayList<span 
style=color:#719e07>&lt;&gt;();</span>
 </span></span><span style=display:flex><span>
-</span></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>onNext</span><span style=color:#719e07>(</span>HelloRequest 
helloRequest<span style=color:#719e07>)</span> <span 
style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>                System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;onNext receive 
request name:&#34;</span> <span style=color:#719e07>+</span> helloRequest<span 
style=color:#719e07>.</span>getName<span style=color:#719e07>());</span>
-</span></span><span style=display:flex><span>                replyList<span 
style=color:#719e07>.</span>add<span 
style=color:#719e07>(</span>HelloReply<span 
style=color:#719e07>.</span>newBuilder<span style=color:#719e07>()</span>
-</span></span><span style=display:flex><span>                    <span 
style=color:#719e07>.</span>setMessage<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;receive name:&#34;</span> <span 
style=color:#719e07>+</span> helloRequest<span 
style=color:#719e07>.</span>getName<span style=color:#719e07>())</span>
-</span></span><span style=display:flex><span>                    <span 
style=color:#719e07>.</span>build<span style=color:#719e07>());</span>
-</span></span><span style=display:flex><span>            <span 
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>              <span 
style=color:#268bd2>@Override</span>
+</span></span><span style=display:flex><span>              <span 
style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span 
style=color:#268bd2>onNext</span><span style=color:#719e07>(</span>HelloRequest 
helloRequest<span style=color:#719e07>)</span> <span 
style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                  System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;onNext receive 
request name:&#34;</span> <span style=color:#719e07>+</span> helloRequest<span 
style=color:#719e07>.</span>getName<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span>                  replyList<span 
style=color:#719e07>.</span>add<span 
style=color:#719e07>(</span>HelloReply<span 
style=color:#719e07>.</span>newBuilder<span style=color:#719e07>()</span>
+</span></span><span style=display:flex><span>                      <span 
style=color:#719e07>.</span>setMessage<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;receive name:&#34;</span> <span 
style=color:#719e07>+</span> helloRequest<span 
style=color:#719e07>.</span>getName<span style=color:#719e07>())</span>
+</span></span><span style=display:flex><span>                      <span 
style=color:#719e07>.</span>build<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span>              <span 
style=color:#719e07>}</span>
 </span></span><span style=display:flex><span>
-</span></span><span style=display:flex><span>            <span 
style=color:#268bd2>@Override</span>
-</span></span><span style=display:flex><span>            <span 
style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span 
style=color:#268bd2>onError</span><span style=color:#719e07>(</span>Throwable 
cause<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>                System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;onError&#34;</span><span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>                
replyObserver<span style=color:#719e07>.</span>onError<span 
style=color:#719e07>(</span>cause<span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>            <span 
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>              <span 
style=color:#268bd2>@Override</span>
+</span></span><span style=display:flex><span>              <span 
style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span 
style=color:#268bd2>onError</span><span style=color:#719e07>(</span>Throwable 
cause<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                  System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;onError&#34;</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>                  
replyObserver<span style=color:#719e07>.</span>onError<span 
style=color:#719e07>(</span>cause<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>              <span 
style=color:#719e07>}</span>
 </span></span><span style=display:flex><span>
-</span></span><span style=display:flex><span>            <span 
style=color:#268bd2>@Override</span>
-</span></span><span style=display:flex><span>            <span 
style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span 
style=color:#268bd2>onCompleted</span><span style=color:#719e07>()</span> <span 
style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>                System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;onComplete receive 
request size:&#34;</span> <span style=color:#719e07>+</span> replyList<span 
style=color:#719e07>.</span>size<span style=color:#719e07>());</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#719e07>for</span> <span style=color:#719e07>(</span>HelloReply 
reply <span style=color:#719e07>:</span> replyList<span 
style=color:#719e07>)</span> <span style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>                    
replyObserver<span style=color:#719e07>.</span>onNext<span 
style=color:#719e07>(</span>reply<span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#719e07>}</span>
-</span></span><span style=display:flex><span>                
replyObserver<span style=color:#719e07>.</span>onCompleted<span 
style=color:#719e07>();</span>
-</span></span><span style=display:flex><span>            <span 
style=color:#719e07>}</span>
-</span></span><span style=display:flex><span>        <span 
style=color:#719e07>};</span>
-</span></span><span style=display:flex><span>    <span 
style=color:#719e07>}</span>
-</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
-</span></span></code></pre></div></li><li><p>创建 Provider</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>StreamProvider</span> <span style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>    <span 
style=color:#268bd2>public</span> <span style=color:#268bd2>static</span> <span 
style=color:#dc322f>void</span> <span style=color:#268bd2>main</span><span 
style=color:#719e07>(</span>String<span style=color:#719e07>[]</span> args<span 
style=color:#719e07>)</span> <span style=color:#268bd2>throws</span> 
InterruptedException <span style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>        ServiceConfig<span 
style=color:#719e07>&lt;</span>IStreamGreeter<span 
style=color:#719e07>&gt;</span> service <span style=color:#719e07>=</span> 
<span style=color:#719e07>new</span> ServiceConfig<span 
style=color:#719e07>&lt;&gt;();</span>
-</span></span><span style=display:flex><span>        service<span 
style=color:#719e07>.</span>setInterface<span 
style=color:#719e07>(</span>IStreamGreeter<span 
style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>        service<span 
style=color:#719e07>.</span>setRef<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> IStreamGreeterImpl<span 
style=color:#719e07>());</span>
-</span></span><span style=display:flex><span>        service<span 
style=color:#719e07>.</span>setProtocol<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> ProtocolConfig<span 
style=color:#719e07>(</span>CommonConstants<span 
style=color:#719e07>.</span>TRIPLE<span style=color:#719e07>,</span> <span 
style=color:#2aa198>50051</span><span style=color:#719e07>));</span>
-</span></span><span style=display:flex><span>        service<span 
style=color:#719e07>.</span>setApplication<span 
style=color:#719e07>(</span><span style=color:#719e07>new</span> 
ApplicationConfig<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;stream-provider&#34;</span><span 
style=color:#719e07>));</span>
-</span></span><span style=display:flex><span>        service<span 
style=color:#719e07>.</span>setRegistry<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> RegistryConfig<span 
style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;zookeeper://127.0.0.1:2181&#34;</span><span 
style=color:#719e07>));</span>
-</span></span><span style=display:flex><span>        service<span 
style=color:#719e07>.</span>export<span style=color:#719e07>();</span>
-</span></span><span style=display:flex><span>        System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;dubbo service 
started&#34;</span><span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>        <span 
style=color:#719e07>new</span> CountDownLatch<span 
style=color:#719e07>(</span><span style=color:#2aa198>1</span><span 
style=color:#719e07>).</span>await<span style=color:#719e07>();</span>
-</span></span><span style=display:flex><span>    <span 
style=color:#719e07>}</span>
-</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
-</span></span></code></pre></div></li><li><p>创建 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:#268bd2>public</span> <span style=color:#268bd2>class</span> <span 
style=color:#268bd2>StreamConsumer</span> <span style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>    <span 
style=color:#268bd2>public</span> <span style=color:#268bd2>static</span> <span 
style=color:#dc322f>void</span> <span style=color:#268bd2>main</span><span 
style=color:#719e07>(</span>String<span style=color:#719e07>[]</span> args<span 
style=color:#719e07>)</span> <span style=color:#268bd2>throws</span> 
InterruptedException<span style=color:#719e07>,</span> IOException <span 
style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>        ReferenceConfig<span 
style=color:#719e07>&lt;</span>IStreamGreeter<span 
style=color:#719e07>&gt;</span> ref <span style=color:#719e07>=</span> <span 
style=color:#719e07>new</span> ReferenceConfig<span 
style=color:#719e07>&lt;&gt;();</span>
-</span></span><span style=display:flex><span>        ref<span 
style=color:#719e07>.</span>setInterface<span 
style=color:#719e07>(</span>IStreamGreeter<span 
style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>        ref<span 
style=color:#719e07>.</span>setCheck<span style=color:#719e07>(</span><span 
style=color:#cb4b16>false</span><span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>        ref<span 
style=color:#719e07>.</span>setProtocol<span 
style=color:#719e07>(</span>CommonConstants<span 
style=color:#719e07>.</span>TRIPLE<span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>        ref<span 
style=color:#719e07>.</span>setLazy<span style=color:#719e07>(</span><span 
style=color:#cb4b16>true</span><span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>        ref<span 
style=color:#719e07>.</span>setTimeout<span style=color:#719e07>(</span><span 
style=color:#2aa198>100000</span><span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>        ref<span 
style=color:#719e07>.</span>setApplication<span 
style=color:#719e07>(</span><span style=color:#719e07>new</span> 
ApplicationConfig<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;stream-consumer&#34;</span><span 
style=color:#719e07>));</span>
-</span></span><span style=display:flex><span>        ref<span 
style=color:#719e07>.</span>setRegistry<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> RegistryConfig<span 
style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;zookeeper://mse-6e9fda00-p.zk.mse.aliyuncs.com:2181&#34;</span><span
 style=color:#719e07>));</span>
-</span></span><span style=display:flex><span>        <span 
style=color:#268bd2>final</span> IStreamGreeter iStreamGreeter <span 
style=color:#719e07>=</span> ref<span style=color:#719e07>.</span>get<span 
style=color:#719e07>();</span>
+</span></span><span style=display:flex><span>              <span 
style=color:#268bd2>@Override</span>
+</span></span><span style=display:flex><span>              <span 
style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span 
style=color:#268bd2>onCompleted</span><span style=color:#719e07>()</span> <span 
style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                  System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;onComplete receive 
request size:&#34;</span> <span style=color:#719e07>+</span> replyList<span 
style=color:#719e07>.</span>size<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span>                  <span 
style=color:#719e07>for</span> <span style=color:#719e07>(</span>HelloReply 
reply <span style=color:#719e07>:</span> replyList<span 
style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                      
replyObserver<span style=color:#719e07>.</span>onNext<span 
style=color:#719e07>(</span>reply<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>                  <span 
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>                  
replyObserver<span style=color:#719e07>.</span>onCompleted<span 
style=color:#719e07>();</span>
+</span></span><span style=display:flex><span>              <span 
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>          <span 
style=color:#719e07>};</span>
+</span></span><span style=display:flex><span>      <span 
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>  <span 
style=color:#719e07>}</span>
+</span></span></code></pre></div><ol start=10><li>创建 Provider</li></ol><div 
class=highlight><pre tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-java data-lang=java><span style=display:flex><span>     <span 
style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span 
style=color:#268bd2>StreamProvider</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>      <span 
style=color:#268bd2>public</span> <span style=color:#268bd2>static</span> <span 
style=color:#dc322f>void</span> <span style=color:#268bd2>main</span><span 
style=color:#719e07>(</span>String<span style=color:#719e07>[]</span> args<span 
style=color:#719e07>)</span> <span style=color:#268bd2>throws</span> 
InterruptedException <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>          ServiceConfig<span 
style=color:#719e07>&lt;</span>IStreamGreeter<span 
style=color:#719e07>&gt;</span> service <span style=color:#719e07>=</span> 
<span style=color:#719e07>new</span> ServiceConfig<span 
style=color:#719e07>&lt;&gt;();</span>
+</span></span><span style=display:flex><span>          service<span 
style=color:#719e07>.</span>setInterface<span 
style=color:#719e07>(</span>IStreamGreeter<span 
style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>          service<span 
style=color:#719e07>.</span>setRef<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> IStreamGreeterImpl<span 
style=color:#719e07>());</span>
+</span></span><span style=display:flex><span>          service<span 
style=color:#719e07>.</span>setProtocol<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> ProtocolConfig<span 
style=color:#719e07>(</span>CommonConstants<span 
style=color:#719e07>.</span>TRIPLE<span style=color:#719e07>,</span> <span 
style=color:#2aa198>50051</span><span style=color:#719e07>));</span>
+</span></span><span style=display:flex><span>          service<span 
style=color:#719e07>.</span>setApplication<span 
style=color:#719e07>(</span><span style=color:#719e07>new</span> 
ApplicationConfig<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;stream-provider&#34;</span><span 
style=color:#719e07>));</span>
+</span></span><span style=display:flex><span>          service<span 
style=color:#719e07>.</span>setRegistry<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> RegistryConfig<span 
style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;zookeeper://127.0.0.1:2181&#34;</span><span 
style=color:#719e07>));</span>
+</span></span><span style=display:flex><span>          service<span 
style=color:#719e07>.</span>export<span style=color:#719e07>();</span>
+</span></span><span style=display:flex><span>          System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;dubbo service 
started&#34;</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>          <span 
style=color:#719e07>new</span> CountDownLatch<span 
style=color:#719e07>(</span><span style=color:#2aa198>1</span><span 
style=color:#719e07>).</span>await<span style=color:#719e07>();</span>
+</span></span><span style=display:flex><span>      <span 
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>  <span 
style=color:#719e07>}</span>
+</span></span></code></pre></div><ol start=11><li>创建 Consumer</li></ol><div 
class=highlight><pre tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-java data-lang=java><span style=display:flex><span>     <span 
style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span 
style=color:#268bd2>StreamConsumer</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>      <span 
style=color:#268bd2>public</span> <span style=color:#268bd2>static</span> <span 
style=color:#dc322f>void</span> <span style=color:#268bd2>main</span><span 
style=color:#719e07>(</span>String<span style=color:#719e07>[]</span> args<span 
style=color:#719e07>)</span> <span style=color:#268bd2>throws</span> 
InterruptedException<span style=color:#719e07>,</span> IOException <span 
style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>          ReferenceConfig<span 
style=color:#719e07>&lt;</span>IStreamGreeter<span 
style=color:#719e07>&gt;</span> ref <span style=color:#719e07>=</span> <span 
style=color:#719e07>new</span> ReferenceConfig<span 
style=color:#719e07>&lt;&gt;();</span>
+</span></span><span style=display:flex><span>          ref<span 
style=color:#719e07>.</span>setInterface<span 
style=color:#719e07>(</span>IStreamGreeter<span 
style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>          ref<span 
style=color:#719e07>.</span>setCheck<span style=color:#719e07>(</span><span 
style=color:#cb4b16>false</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>          ref<span 
style=color:#719e07>.</span>setProtocol<span 
style=color:#719e07>(</span>CommonConstants<span 
style=color:#719e07>.</span>TRIPLE<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>          ref<span 
style=color:#719e07>.</span>setLazy<span style=color:#719e07>(</span><span 
style=color:#cb4b16>true</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>          ref<span 
style=color:#719e07>.</span>setTimeout<span style=color:#719e07>(</span><span 
style=color:#2aa198>100000</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>          ref<span 
style=color:#719e07>.</span>setApplication<span 
style=color:#719e07>(</span><span style=color:#719e07>new</span> 
ApplicationConfig<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;stream-consumer&#34;</span><span 
style=color:#719e07>));</span>
+</span></span><span style=display:flex><span>          ref<span 
style=color:#719e07>.</span>setRegistry<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> RegistryConfig<span 
style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;zookeeper://mse-6e9fda00-p.zk.mse.aliyuncs.com:2181&#34;</span><span
 style=color:#719e07>));</span>
+</span></span><span style=display:flex><span>          <span 
style=color:#268bd2>final</span> IStreamGreeter iStreamGreeter <span 
style=color:#719e07>=</span> ref<span style=color:#719e07>.</span>get<span 
style=color:#719e07>();</span>
 </span></span><span style=display:flex><span>
-</span></span><span style=display:flex><span>        System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;dubbo ref 
started&#34;</span><span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>        <span 
style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>          System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;dubbo ref 
started&#34;</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>          <span 
style=color:#719e07>try</span> <span style=color:#719e07>{</span>
 </span></span><span style=display:flex><span>
-</span></span><span style=display:flex><span>            StreamObserver<span 
style=color:#719e07>&lt;</span>HelloRequest<span 
style=color:#719e07>&gt;</span> streamObserver <span 
style=color:#719e07>=</span> iStreamGreeter<span 
style=color:#719e07>.</span>sayHello<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> StreamObserver<span 
style=color:#719e07>&lt;</span>HelloReply<span 
style=color:#719e07>&gt;()</span> <span style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#268bd2>@Override</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span 
style=color:#268bd2>onNext</span><span style=color:#719e07>(</span>HelloReply 
reply<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>                    System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;onNext&#34;</span><span style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>                    System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span>reply<span 
style=color:#719e07>.</span>getMessage<span style=color:#719e07>());</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>              StreamObserver<span 
style=color:#719e07>&lt;</span>HelloRequest<span 
style=color:#719e07>&gt;</span> streamObserver <span 
style=color:#719e07>=</span> iStreamGreeter<span 
style=color:#719e07>.</span>sayHello<span style=color:#719e07>(</span><span 
style=color:#719e07>new</span> StreamObserver<span 
style=color:#719e07>&lt;</span>HelloReply<span 
style=color:#719e07>&gt;()</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                  <span 
style=color:#268bd2>@Override</span>
+</span></span><span style=display:flex><span>                  <span 
style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span 
style=color:#268bd2>onNext</span><span style=color:#719e07>(</span>HelloReply 
reply<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                      System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;onNext&#34;</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>                      System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span>reply<span 
style=color:#719e07>.</span>getMessage<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span>                  <span 
style=color:#719e07>}</span>
 </span></span><span style=display:flex><span>
-</span></span><span style=display:flex><span>                <span 
style=color:#268bd2>@Override</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span 
style=color:#268bd2>onError</span><span style=color:#719e07>(</span>Throwable 
throwable<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>                    System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;onError:&#34;</span> 
<span style=color:#719e07>+</span> throwable<span 
style=color:#719e07>.</span>getMessage<span style=color:#719e07>());</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>                  <span 
style=color:#268bd2>@Override</span>
+</span></span><span style=display:flex><span>                  <span 
style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span 
style=color:#268bd2>onError</span><span style=color:#719e07>(</span>Throwable 
throwable<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                      System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span style=color:#2aa198>&#34;onError:&#34;</span> 
<span style=color:#719e07>+</span> throwable<span 
style=color:#719e07>.</span>getMessage<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span>                  <span 
style=color:#719e07>}</span>
 </span></span><span style=display:flex><span>
-</span></span><span style=display:flex><span>                <span 
style=color:#268bd2>@Override</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span 
style=color:#268bd2>onCompleted</span><span style=color:#719e07>()</span> <span 
style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>                    System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;onCompleted&#34;</span><span 
style=color:#719e07>);</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#719e07>}</span>
-</span></span><span style=display:flex><span>            <span 
style=color:#719e07>});</span>
+</span></span><span style=display:flex><span>                  <span 
style=color:#268bd2>@Override</span>
+</span></span><span style=display:flex><span>                  <span 
style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span 
style=color:#268bd2>onCompleted</span><span style=color:#719e07>()</span> <span 
style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>                      System<span 
style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span 
style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;onCompleted&#34;</span><span 
style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>                  <span 
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>              <span 
style=color:#719e07>});</span>
 </span></span><span style=display:flex><span>
-</span></span><span style=display:flex><span>            streamObserver<span 
style=color:#719e07>.</span>onNext<span 
style=color:#719e07>(</span>HelloRequest<span 
style=color:#719e07>.</span>newBuilder<span style=color:#719e07>()</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#719e07>.</span>setName<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;tony&#34;</span><span style=color:#719e07>)</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#719e07>.</span>build<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span>              streamObserver<span 
style=color:#719e07>.</span>onNext<span 
style=color:#719e07>(</span>HelloRequest<span 
style=color:#719e07>.</span>newBuilder<span style=color:#719e07>()</span>
+</span></span><span style=display:flex><span>                  <span 
style=color:#719e07>.</span>setName<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;tony&#34;</span><span style=color:#719e07>)</span>
+</span></span><span style=display:flex><span>                  <span 
style=color:#719e07>.</span>build<span style=color:#719e07>());</span>
 </span></span><span style=display:flex><span>
-</span></span><span style=display:flex><span>            streamObserver<span 
style=color:#719e07>.</span>onNext<span 
style=color:#719e07>(</span>HelloRequest<span 
style=color:#719e07>.</span>newBuilder<span style=color:#719e07>()</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#719e07>.</span>setName<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;nick&#34;</span><span style=color:#719e07>)</span>
-</span></span><span style=display:flex><span>                <span 
style=color:#719e07>.</span>build<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span>              streamObserver<span 
style=color:#719e07>.</span>onNext<span 
style=color:#719e07>(</span>HelloRequest<span 
style=color:#719e07>.</span>newBuilder<span style=color:#719e07>()</span>
+</span></span><span style=display:flex><span>                  <span 
style=color:#719e07>.</span>setName<span style=color:#719e07>(</span><span 
style=color:#2aa198>&#34;nick&#34;</span><span style=color:#719e07>)</span>
+</span></span><span style=display:flex><span>                  <span 
style=color:#719e07>.</span>build<span style=color:#719e07>());</span>
 </span></span><span style=display:flex><span>
-</span></span><span style=display:flex><span>            streamObserver<span 
style=color:#719e07>.</span>onCompleted<span style=color:#719e07>();</span>
-</span></span><span style=display:flex><span>        <span 
style=color:#719e07>}</span> <span style=color:#719e07>catch</span> <span 
style=color:#719e07>(</span>Throwable t<span style=color:#719e07>)</span> <span 
style=color:#719e07>{</span>
-</span></span><span style=display:flex><span>            t<span 
style=color:#719e07>.</span>printStackTrace<span style=color:#719e07>();</span>
-</span></span><span style=display:flex><span>        <span 
style=color:#719e07>}</span>
-</span></span><span style=display:flex><span>        System<span 
style=color:#719e07>.</span>in<span style=color:#719e07>.</span>read<span 
style=color:#719e07>();</span>
-</span></span><span style=display:flex><span>    <span 
style=color:#719e07>}</span>
-</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
-</span></span></code></pre></div></li><li><p>运行 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:#719e07>&gt;</span> onNext\
+</span></span><span style=display:flex><span>              streamObserver<span 
style=color:#719e07>.</span>onCompleted<span style=color:#719e07>();</span>
+</span></span><span style=display:flex><span>          <span 
style=color:#719e07>}</span> <span style=color:#719e07>catch</span> <span 
style=color:#719e07>(</span>Throwable t<span style=color:#719e07>)</span> <span 
style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>              t<span 
style=color:#719e07>.</span>printStackTrace<span style=color:#719e07>();</span>
+</span></span><span style=display:flex><span>          <span 
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>          System<span 
style=color:#719e07>.</span>in<span style=color:#719e07>.</span>read<span 
style=color:#719e07>();</span>
+</span></span><span style=display:flex><span>      <span 
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>  <span 
style=color:#719e07>}</span>
+</span></span></code></pre></div><ol start=12><li>运行 Provider 和 Consumer 
,可以看到请求正常返回了</li></ol><div class=highlight><pre tabindex=0 
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
 class=language-java data-lang=java><span style=display:flex><span><span 
style=color:#719e07>&gt;</span> onNext\
 </span></span><span style=display:flex><span><span 
style=color:#719e07>&gt;</span> receive name<span 
style=color:#719e07>:</span>tony\
 </span></span><span style=display:flex><span><span 
style=color:#719e07>&gt;</span> onNext\
 </span></span><span style=display:flex><span><span 
style=color:#719e07>&gt;</span> receive name<span 
style=color:#719e07>:</span>nick\
 </span></span><span style=display:flex><span><span 
style=color:#719e07>&gt;</span> onCompleted
-</span></span></code></pre></div></li></ol><h3 
id=其他序列化方式>其他序列化方式</h3><p>省略上文中的 1-3 步,指定 Provider 和 Consumer 
使用的协议即可完成协议升级。</p><blockquote><p>本文的示例可以在 <a 
href=https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple>triple-samples</a>
 找到</p></blockquote><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
 [...]
+</span></span></code></pre></div><h3 id=其他序列化方式>其他序列化方式</h3><p>省略上文中的 1-3 步,指定 
Provider 和 Consumer 使用的协议即可完成协议升级。</p><blockquote><p>本文的示例可以在 <a 
href=https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple>triple-samples</a>
 找到</p></blockquote><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
 [...]
 <a 
href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/guide.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%6
 [...]
 <a 
href="https://github.com/apache/dubbo-website/issues/new?title=%e5%8d%8f%e8%ae%ae%e4%bd%bf%e7%94%a8%e6%96%b9%e5%bc%8f";
 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></main><div class="d-none d-xl-block 
col-xl-2 td-toc d-print-none"><nav id=TableOfContents><ul><li><ul><li><a 
href=#protobuf-方式>Protobuf 方式</a></li><li><a href=#unary-方式>Unary 
方式</a></li><li><a href=#stream-方式>stream 方式</a></li><li><a 
href=#其他序列化方式>其他序列化方式</a></li></ul></li></ul></nav></div></div></div></div><footer
 class="bg-dark py-5 row d-print-none footer-margin-0"><div [...]
diff --git 
a/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/index.xml 
b/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/index.xml
index f48f4b7ede..e127dbb5b2 100644
--- a/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/index.xml
+++ b/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/index.xml
@@ -413,29 +413,29 @@
 &lt;p>在开始前,需要决定服务使用的序列化方式,如果为新服务,推荐使用 protobuf 
作为默认序列化,在性能和跨语言上的效果都会更好。如果是原有服务想进行协议升级,Triple 协议也已经支持其他序列化方式,如 Hessian / JSON 
等&lt;/p>
 &lt;h3 id="protobuf-方式">Protobuf 方式&lt;/h3>
 &lt;ol>
-&lt;li>
-&lt;p>编写 IDL 文件&lt;/p>
-&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-protobuf" data-lang="protobuf">&lt;span 
style="display:flex;">&lt;span>syntax &lt;span 
style="color:#719e07">=&lt;/span> &lt;span 
style="color:#2aa198">&amp;#34;proto3&amp;#34;&lt;/span>;
+&lt;li>编写 IDL 文件&lt;/li>
+&lt;/ol>
+&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-protobuf" data-lang="protobuf">&lt;span 
style="display:flex;">&lt;span> syntax &lt;span 
style="color:#719e07">=&lt;/span> &lt;span 
style="color:#2aa198">&amp;#34;proto3&amp;#34;&lt;/span>;
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">option&lt;/span> java_multiple_files &lt;span 
style="color:#719e07">=&lt;/span> &lt;span style="color:#cb4b16">true&lt;/span>;
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">option&lt;/span> java_package &lt;span 
style="color:#719e07">=&lt;/span> &lt;span 
style="color:#2aa198">&amp;#34;org.apache.dubbo.hello&amp;#34;&lt;/span>;
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">option&lt;/span> java_outer_classname &lt;span 
style="color:#719e07">=&lt;/span> &lt;span 
style="color:#2aa198">&amp;#34;HelloWorldProto&amp;#34;&lt;/span>;
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">option&lt;/span> objc_class_prefix &lt;span 
style="color:#719e07">=&lt;/span> &lt;span 
style="color:#2aa198">&amp;#34;HLW&amp;#34;&lt;/span>;
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">option&lt;/span> java_multiple_files &lt;span 
style="color:#719e07">=&lt;/span> &lt;span style="color:#cb4b16">true&lt;/span>;
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">option&lt;/span> java_package &lt;span 
style="color:#719e07">=&lt;/span> &lt;span 
style="color:#2aa198">&amp;#34;org.apache.dubbo.hello&amp;#34;&lt;/span>;
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">option&lt;/span> java_outer_classname &lt;span 
style="color:#719e07">=&lt;/span> &lt;span 
style="color:#2aa198">&amp;#34;HelloWorldProto&amp;#34;&lt;/span>;
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">option&lt;/span> objc_class_prefix &lt;span 
style="color:#719e07">=&lt;/span> &lt;span 
style="color:#2aa198">&amp;#34;HLW&amp;#34;&lt;/span>;
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">package&lt;/span> helloworld;
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">package&lt;/span> helloworld;
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#586e75">// The request message containing the user&amp;#39;s name.
-&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#586e75">&lt;/span>&lt;span 
style="color:#268bd2">message&lt;/span> &lt;span 
style="color:#268bd2">HelloRequest&lt;/span> {
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#586e75">// The request message containing the user&amp;#39;s name.
+&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#586e75">&lt;/span> &lt;span 
style="color:#268bd2">message&lt;/span> &lt;span 
style="color:#268bd2">HelloRequest&lt;/span> {
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#dc322f">string&lt;/span> name &lt;span 
style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">1&lt;/span>;
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#586e75">// The response message containing the greetings
-&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#586e75">&lt;/span>&lt;span 
style="color:#268bd2">message&lt;/span> &lt;span 
style="color:#268bd2">HelloReply&lt;/span> {
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#586e75">// The response message containing the greetings
+&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#586e75">&lt;/span> &lt;span 
style="color:#268bd2">message&lt;/span> &lt;span 
style="color:#268bd2">HelloReply&lt;/span> {
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#dc322f">string&lt;/span> &lt;span 
style="color:#268bd2">message&lt;/span> &lt;span 
style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">1&lt;/span>;
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
-&lt;li>
-&lt;p>添加编译 protobuf 的 extension 和 plugin (以 maven 为例)&lt;/p>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
+&lt;li>添加编译 protobuf 的 extension 和 plugin (以 maven 为例)&lt;/li>
+&lt;/ol>
 &lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span> 
&lt;span style="color:#268bd2">&amp;lt;extensions&amp;gt;&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#268bd2">&amp;lt;extension&amp;gt;&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#268bd2">&amp;lt;groupId&amp;gt;&lt;/span>kr.motd.maven&lt;span 
style="color:#268bd2">&amp;lt;/groupId&amp;gt;&lt;/span>
@@ -463,20 +463,18 @@
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#268bd2">&amp;lt;/executions&amp;gt;&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#268bd2">&amp;lt;/plugin&amp;gt;&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#268bd2">&amp;lt;/plugins&amp;gt;&lt;/span>
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
-&lt;li>
-&lt;p>构建/ 编译生成 protobuf Message 类&lt;/p>
-&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-shell" data-lang="shell">&lt;span 
style="display:flex;">&lt;span>mvn clean install
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
+&lt;li>构建/ 编译生成 protobuf Message 类&lt;/li>
 &lt;/ol>
-&lt;h3 id="unary-方式">Unary 方式&lt;/h3>
+&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-shell" data-lang="shell">&lt;span 
style="display:flex;">&lt;span>mvn clean install
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="unary-方式">Unary 
方式&lt;/h3>
 &lt;ol start="4">
-&lt;li>
-&lt;p>编写 Java 接口&lt;/p>
-&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span>&lt;span style="color:#719e07">import&lt;/span> 
org.apache.dubbo.hello.HelloReply&lt;span style="color:#719e07">;&lt;/span>
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">import&lt;/span> 
org.apache.dubbo.hello.HelloRequest&lt;span style="color:#719e07">;&lt;/span>
+&lt;li>编写 Java 接口&lt;/li>
+&lt;/ol>
+&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span> &lt;span style="color:#719e07">import&lt;/span> 
org.apache.dubbo.hello.HelloReply&lt;span style="color:#719e07">;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">import&lt;/span> 
org.apache.dubbo.hello.HelloRequest&lt;span style="color:#719e07">;&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#268bd2">public&lt;/span> &lt;span 
style="color:#268bd2">interface&lt;/span> &lt;span 
style="color:#268bd2">IGreeter&lt;/span> &lt;span 
style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#268bd2">public&lt;/span> &lt;span 
style="color:#268bd2">interface&lt;/span> &lt;span 
style="color:#268bd2">IGreeter&lt;/span> &lt;span 
style="color:#719e07">{&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#586e75">/**
 &lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#586e75"> * &amp;lt;pre&amp;gt;
 &lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#586e75"> * Sends a greeting
@@ -484,10 +482,10 @@
 &lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#586e75"> */&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> HelloReply 
&lt;span style="color:#268bd2">sayHello&lt;/span>&lt;span 
style="color:#719e07">(&lt;/span>HelloRequest request&lt;span 
style="color:#719e07">);&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">}&lt;/span>
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
-&lt;li>
-&lt;p>创建 Provider&lt;/p>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">}&lt;/span>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="5">
+&lt;li>创建 Provider&lt;/li>
+&lt;/ol>
 &lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span> &lt;span style="color:#268bd2">public&lt;/span> 
&lt;span style="color:#268bd2">static&lt;/span> &lt;span 
style="color:#dc322f">void&lt;/span> &lt;span 
style="color:#268bd2">main&lt;/span>&lt;span 
style="color:#719e07">(&lt;/span>String&lt;span style="color:#719e07">[ [...]
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
ServiceConfig&lt;span style="color:#719e07">&amp;lt;&lt;/span>IGreeter&lt;span 
style="color:#719e07">&amp;gt;&lt;/span> service &lt;span 
style="color:#719e07">=&lt;/span> &lt;span style="color:#719e07">new&lt;/span> 
ServiceConfig&lt;span style="color:#719e07">&amp;lt;&amp;gt;();&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service&lt;span 
style="color:#719e07">.&lt;/span>setInterface&lt;span 
style="color:#719e07">(&lt;/span>IGreeter&lt;span 
style="color:#719e07">.&lt;/span>class&lt;span 
style="color:#719e07">);&lt;/span>
@@ -500,10 +498,10 @@
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> System&lt;span 
style="color:#719e07">.&lt;/span>out&lt;span 
style="color:#719e07">.&lt;/span>println&lt;span 
style="color:#719e07">(&lt;/span>&lt;span style="color:#2aa198">&amp;#34;dubbo 
service started&amp;#34;&lt;/span>&lt;span style="color:#719e07">);&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">new&lt;/span> CountDownLatch&lt;span 
style="color:#719e07">(&lt;/span>&lt;span 
style="color:#2aa198">1&lt;/span>&lt;span 
style="color:#719e07">).&lt;/span>await&lt;span 
style="color:#719e07">();&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">}&lt;/span>
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
-&lt;li>
-&lt;p>创建 Consumer&lt;/p>
-&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> 
&lt;span style="color:#268bd2">static&lt;/span> &lt;span 
style="color:#dc322f">void&lt;/span> &lt;span 
style="color:#268bd2">main&lt;/span>&lt;span 
style="color:#719e07">(&lt;/span>String&lt;span style="color:#719e07">[] [...]
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="6">
+&lt;li>创建 Consumer&lt;/li>
+&lt;/ol>
+&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span> &lt;span style="color:#268bd2">public&lt;/span> 
&lt;span style="color:#268bd2">static&lt;/span> &lt;span 
style="color:#dc322f">void&lt;/span> &lt;span 
style="color:#268bd2">main&lt;/span>&lt;span 
style="color:#719e07">(&lt;/span>String&lt;span style="color:#719e07">[ [...]
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
ReferenceConfig&lt;span 
style="color:#719e07">&amp;lt;&lt;/span>IGreeter&lt;span 
style="color:#719e07">&amp;gt;&lt;/span> ref &lt;span 
style="color:#719e07">=&lt;/span> &lt;span style="color:#719e07">new&lt;/span> 
ReferenceConfig&lt;span style="color:#719e07">&amp;lt;&amp;gt;();&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ref&lt;span 
style="color:#719e07">.&lt;/span>setInterface&lt;span 
style="color:#719e07">(&lt;/span>IGreeter&lt;span 
style="color:#719e07">.&lt;/span>class&lt;span 
style="color:#719e07">);&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ref&lt;span 
style="color:#719e07">.&lt;/span>setCheck&lt;span 
style="color:#719e07">(&lt;/span>&lt;span 
style="color:#cb4b16">false&lt;/span>&lt;span style="color:#719e07">);&lt;/span>
@@ -525,21 +523,19 @@
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> t&lt;span 
style="color:#719e07">.&lt;/span>printStackTrace&lt;span 
style="color:#719e07">();&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">}&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> System&lt;span 
style="color:#719e07">.&lt;/span>in&lt;span 
style="color:#719e07">.&lt;/span>read&lt;span 
style="color:#719e07">();&lt;/span>
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">}&lt;/span>
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
-&lt;li>
-&lt;p>运行 Provider 和 Consumer ,可以看到请求正常返回&lt;/p>
-&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">&amp;gt;&lt;/span> Reply&lt;span 
style="color:#719e07">:&lt;/span>message&lt;span 
style="color:#719e07">:&lt;/span> &lt;span 
style="color:#2aa198">&amp;#34;name&amp;#34;&lt;/span>
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">}&lt;/span>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="7">
+&lt;li>运行 Provider 和 Consumer ,可以看到请求正常返回&lt;/li>
 &lt;/ol>
-&lt;h3 id="stream-方式">stream 方式&lt;/h3>
+&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">&amp;gt;&lt;/span> Reply&lt;span 
style="color:#719e07">:&lt;/span>message&lt;span 
style="color:#719e07">:&lt;/span> &lt;span 
style="color:#2aa198">&amp;#34;name&amp;#34;&lt;/span>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="stream-方式">stream 
方式&lt;/h3>
 &lt;ol start="8">
-&lt;li>
-&lt;p>编写 Java 接口&lt;/p>
-&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span>&lt;span style="color:#719e07">import&lt;/span> 
org.apache.dubbo.hello.HelloReply&lt;span style="color:#719e07">;&lt;/span>
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">import&lt;/span> 
org.apache.dubbo.hello.HelloRequest&lt;span style="color:#719e07">;&lt;/span>
+&lt;li>编写 Java 接口&lt;/li>
+&lt;/ol>
+&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span> &lt;span style="color:#719e07">import&lt;/span> 
org.apache.dubbo.hello.HelloReply&lt;span style="color:#719e07">;&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">import&lt;/span> 
org.apache.dubbo.hello.HelloRequest&lt;span style="color:#719e07">;&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#268bd2">public&lt;/span> &lt;span 
style="color:#268bd2">interface&lt;/span> &lt;span 
style="color:#268bd2">IGreeter&lt;/span> &lt;span 
style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#268bd2">public&lt;/span> &lt;span 
style="color:#268bd2">interface&lt;/span> &lt;span 
style="color:#268bd2">IGreeter&lt;/span> &lt;span 
style="color:#719e07">{&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#586e75">/**
 &lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#586e75"> * &amp;lt;pre&amp;gt;
 &lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#586e75"> * Sends greeting by stream
@@ -547,11 +543,11 @@
 &lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#586e75"> */&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
StreamObserver&lt;span 
style="color:#719e07">&amp;lt;&lt;/span>HelloRequest&lt;span 
style="color:#719e07">&amp;gt;&lt;/span> &lt;span 
style="color:#268bd2">sayHello&lt;/span>&lt;span 
style="color:#719e07">(&lt;/span>StreamObserver&lt;span 
style="color:#719e07">&amp;lt;&lt;/span>HelloReply&lt;span 
style="color:#719e07">&amp;gt;&lt;/span> replyObserver&lt;span 
style="color:#719e07">);&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">}&lt;/span>
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
-&lt;li>
-&lt;p>编写实现类&lt;/p>
-&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> 
&lt;span style="color:#268bd2">class&lt;/span> &lt;span 
style="color:#268bd2">IStreamGreeterImpl&lt;/span> &lt;span 
style="color:#268bd2">implements&lt;/span> IStreamGreeter &lt;span 
style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">}&lt;/span>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="9">
+&lt;li>编写实现类&lt;/li>
+&lt;/ol>
+&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span> &lt;span style="color:#268bd2">public&lt;/span> 
&lt;span style="color:#268bd2">class&lt;/span> &lt;span 
style="color:#268bd2">IStreamGreeterImpl&lt;/span> &lt;span 
style="color:#268bd2">implements&lt;/span> IStreamGreeter &lt;span 
style="color:#719e07">{&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#268bd2">@Override&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#268bd2">public&lt;/span> StreamObserver&lt;span 
style="color:#719e07">&amp;lt;&lt;/span>HelloRequest&lt;span 
style="color:#719e07">&amp;gt;&lt;/span> &lt;span 
style="color:#268bd2">sayHello&lt;/span>&lt;span 
style="color:#719e07">(&lt;/span>StreamObserver&lt;span 
style="color:#719e07">&amp;lt;&lt;/span>HelloReply&lt;span 
style="color:#719e07">&amp;gt;&lt;/span> replyObserver&lt;span 
style="color:#719e07"> [...]
@@ -583,11 +579,11 @@
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">}&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">};&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">}&lt;/span>
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">}&lt;/span>
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
-&lt;li>
-&lt;p>创建 Provider&lt;/p>
-&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> 
&lt;span style="color:#268bd2">class&lt;/span> &lt;span 
style="color:#268bd2">StreamProvider&lt;/span> &lt;span 
style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">}&lt;/span>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="10">
+&lt;li>创建 Provider&lt;/li>
+&lt;/ol>
+&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span> &lt;span style="color:#268bd2">public&lt;/span> 
&lt;span style="color:#268bd2">class&lt;/span> &lt;span 
style="color:#268bd2">StreamProvider&lt;/span> &lt;span 
style="color:#719e07">{&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#268bd2">public&lt;/span> &lt;span 
style="color:#268bd2">static&lt;/span> &lt;span 
style="color:#dc322f">void&lt;/span> &lt;span 
style="color:#268bd2">main&lt;/span>&lt;span 
style="color:#719e07">(&lt;/span>String&lt;span 
style="color:#719e07">[]&lt;/span> args&lt;span 
style="color:#719e07">)&lt;/span> &lt;span 
style="color:#268bd2">throws&lt;/span> InterruptedException &lt;span 
style="color:#719e07">{&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
ServiceConfig&lt;span 
style="color:#719e07">&amp;lt;&lt;/span>IStreamGreeter&lt;span 
style="color:#719e07">&amp;gt;&lt;/span> service &lt;span 
style="color:#719e07">=&lt;/span> &lt;span style="color:#719e07">new&lt;/span> 
ServiceConfig&lt;span style="color:#719e07">&amp;lt;&amp;gt;();&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service&lt;span 
style="color:#719e07">.&lt;/span>setInterface&lt;span 
style="color:#719e07">(&lt;/span>IStreamGreeter&lt;span 
style="color:#719e07">.&lt;/span>class&lt;span 
style="color:#719e07">);&lt;/span>
@@ -599,11 +595,11 @@
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> System&lt;span 
style="color:#719e07">.&lt;/span>out&lt;span 
style="color:#719e07">.&lt;/span>println&lt;span 
style="color:#719e07">(&lt;/span>&lt;span style="color:#2aa198">&amp;#34;dubbo 
service started&amp;#34;&lt;/span>&lt;span style="color:#719e07">);&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">new&lt;/span> CountDownLatch&lt;span 
style="color:#719e07">(&lt;/span>&lt;span 
style="color:#2aa198">1&lt;/span>&lt;span 
style="color:#719e07">).&lt;/span>await&lt;span 
style="color:#719e07">();&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">}&lt;/span>
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">}&lt;/span>
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
-&lt;li>
-&lt;p>创建 Consumer&lt;/p>
-&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> 
&lt;span style="color:#268bd2">class&lt;/span> &lt;span 
style="color:#268bd2">StreamConsumer&lt;/span> &lt;span 
style="color:#719e07">{&lt;/span>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">}&lt;/span>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="11">
+&lt;li>创建 Consumer&lt;/li>
+&lt;/ol>
+&lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span> &lt;span style="color:#268bd2">public&lt;/span> 
&lt;span style="color:#268bd2">class&lt;/span> &lt;span 
style="color:#268bd2">StreamConsumer&lt;/span> &lt;span 
style="color:#719e07">{&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#268bd2">public&lt;/span> &lt;span 
style="color:#268bd2">static&lt;/span> &lt;span 
style="color:#dc322f">void&lt;/span> &lt;span 
style="color:#268bd2">main&lt;/span>&lt;span 
style="color:#719e07">(&lt;/span>String&lt;span 
style="color:#719e07">[]&lt;/span> args&lt;span 
style="color:#719e07">)&lt;/span> &lt;span 
style="color:#268bd2">throws&lt;/span> InterruptedException&lt;span 
style="color:#719e07">,&lt;/ [...]
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
ReferenceConfig&lt;span 
style="color:#719e07">&amp;lt;&lt;/span>IStreamGreeter&lt;span 
style="color:#719e07">&amp;gt;&lt;/span> ref &lt;span 
style="color:#719e07">=&lt;/span> &lt;span style="color:#719e07">new&lt;/span> 
ReferenceConfig&lt;span style="color:#719e07">&amp;lt;&amp;gt;();&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ref&lt;span 
style="color:#719e07">.&lt;/span>setInterface&lt;span 
style="color:#719e07">(&lt;/span>IStreamGreeter&lt;span 
style="color:#719e07">.&lt;/span>class&lt;span 
style="color:#719e07">);&lt;/span>
@@ -650,18 +646,16 @@
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">}&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> System&lt;span 
style="color:#719e07">.&lt;/span>in&lt;span 
style="color:#719e07">.&lt;/span>read&lt;span 
style="color:#719e07">();&lt;/span>
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">}&lt;/span>
-&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">}&lt;/span>
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
-&lt;li>
-&lt;p>运行 Provider 和 Consumer ,可以看到请求正常返回了&lt;/p>
+&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span 
style="color:#719e07">}&lt;/span>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="12">
+&lt;li>运行 Provider 和 Consumer ,可以看到请求正常返回了&lt;/li>
+&lt;/ol>
 &lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">&amp;gt;&lt;/span> onNext\
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">&amp;gt;&lt;/span> receive name&lt;span 
style="color:#719e07">:&lt;/span>tony\
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">&amp;gt;&lt;/span> onNext\
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">&amp;gt;&lt;/span> receive name&lt;span 
style="color:#719e07">:&lt;/span>nick\
 &lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span 
style="color:#719e07">&amp;gt;&lt;/span> onCompleted
-&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
-&lt;/ol>
-&lt;h3 id="其他序列化方式">其他序列化方式&lt;/h3>
+&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 
id="其他序列化方式">其他序列化方式&lt;/h3>
 &lt;p>省略上文中的 1-3 步,指定 Provider 和 Consumer 使用的协议即可完成协议升级。&lt;/p>
 &lt;blockquote>
 &lt;p>本文的示例可以在 &lt;a 
href="https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple";>triple-samples&lt;/a>
 找到&lt;/p>
@@ -704,16 +698,20 @@
 &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="仅使用-dubbo-协议">仅使用 
dubbo 协议&lt;/h3>
 &lt;p>为保证兼容性,我们先将部分 provider 升级到 &lt;code>dubbo3&lt;/code> 版本并使用 
&lt;code>dubbo&lt;/code> 协议。&lt;/p>
 &lt;p>使用 &lt;code>dubbo&lt;/code> 协议启动一个 &lt;a 
href="https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration/ApiMigrationDubboProvider.java";>&lt;code>Provider&lt;/code>&lt;/a>
 和 &lt;a 
href="https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration/ApiMigrationDubboConsumer.java";>&lt;code>Consumer&lt;/code>&lt;/
 [...]
-&lt;p>输出如下:
-&lt;img 
src="https://dubbo.apache.org/imgs/v3/migration/tri/dubbo3-tri-migration-dubbo-dubbo-result.png";
 alt="result">&lt;/p>
+&lt;div class="alert alert-info" role="alert">
+&lt;h4 class="alert-heading">输出结果&lt;/h4>
+&lt;img 
src="https://dubbo.apache.org/imgs/v3/migration/tri/dubbo3-tri-migration-dubbo-dubbo-result.png";
 alt="result">
+&lt;/div>
 &lt;h3 id="仅使用-triple-协议">仅使用 triple 协议&lt;/h3>
 &lt;p>当所有的 consumer 都升级至支持 &lt;code>Triple&lt;/code> 协议的版本后,provider 可切换至仅使用 
&lt;code>Triple&lt;/code> 协议启动&lt;/p>
 &lt;p>结构如图所示:
 &lt;img 
src="https://dubbo.apache.org/imgs/v3/migration/tri/migrate-only-tri-strust.png";
 alt="strust">&lt;/p>
 &lt;p>&lt;a 
href="https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration/ApiMigrationTriProvider.java";>Provider&lt;/a>
 和 &lt;a 
href="https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration/ApiMigrationTriConsumer.java";>Consumer&lt;/a>
 完成调用。&lt;/p>
-&lt;p>输出如下:&lt;/p>
-&lt;p>&lt;img 
src="https://dubbo.apache.org/imgs/v3/migration/tri/dubbo3-tri-migration-tri-tri-result.png";
 alt="result">&lt;/p>
+&lt;div class="alert alert-info" role="alert">
+&lt;h4 class="alert-heading">输出结果&lt;/h4>
+&lt;img 
src="https://dubbo.apache.org/imgs/v3/migration/tri/dubbo3-tri-migration-tri-tri-result.png";
 alt="result">
+&lt;/div>
 &lt;h3 id="同时使用-dubbo-和-triple-协议">同时使用 dubbo 和 triple 协议&lt;/h3>
 &lt;p>对于线上服务的升级,不可能一蹴而就同时完成 provider 和 consumer 升级, 需要按步操作,&lt;/p>
 &lt;p>&lt;strong>第一步:保证业务稳定。&lt;/strong>&lt;/p>
@@ -724,8 +722,10 @@
 &lt;p>按照推荐升级步骤,provider 已经支持了 tri 协议,所以 dubbo3 的 consumer 可以直接使用 tri 协议&lt;/p>
 &lt;/blockquote>
 &lt;p>使用 &lt;code>dubbo&lt;/code> 协议和 &lt;code>triple&lt;/code> 协议启动&lt;a 
href="https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration/ApiMigrationBothProvider.java";>&lt;code>Provider&lt;/code>&lt;/a>和&lt;a
 
href="https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration/ApiMigrationBothConsumer.java";>&lt;code>
 [...]
-&lt;p>输出如下:&lt;/p>
-&lt;p>&lt;img 
src="https://dubbo.apache.org/imgs/v3/migration/tri/dubbo3-tri-migration-both-dubbo-tri-result.png";
 alt="result">&lt;/p></description></item><item><title>Overview: Streaming 
通信</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/streaming/</link><pubDate>Mon,
 01 Jan 0001 00:00:00 
+0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/streaming/</guid><description>
+&lt;div class="alert alert-info" role="alert">
+&lt;h4 class="alert-heading">输出结果&lt;/h4>
+&lt;img 
src="https://dubbo.apache.org/imgs/v3/migration/tri/dubbo3-tri-migration-both-dubbo-tri-result.png";
 alt="result">
+&lt;/div></description></item><item><title>Overview: Streaming 
通信</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/streaming/</link><pubDate>Mon,
 01 Jan 0001 00:00:00 
+0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/streaming/</guid><description>
 &lt;h2 id="流实现原理">流实现原理&lt;/h2>
 &lt;p>&lt;code>Triple&lt;/code>协议的流模式&lt;/p>
 &lt;ul>
@@ -753,20 +753,18 @@
 &lt;li>BIDIRECTIONAL_STREAM(双向流)
 &lt;img 
src="https://dubbo.apache.org/imgs/v3/migration/tri/migrate-bi-stream.png"; 
alt="BIDIRECTIONAL_STREAM">&lt;/li>
 &lt;/ul>
-&lt;blockquote>
 &lt;p>由于 &lt;code>java&lt;/code> 语言的限制,BIDIRECTIONAL_STREAM 和 CLIENT_STREAM 
的实现是一样的。&lt;/p>
-&lt;/blockquote>
 &lt;p>在 Dubbo3 中,流式接口以 &lt;code>SteamObserver&lt;/code> 
声明和使用,用户可以通过使用和实现这个接口来发送和处理流的数据、异常和结束。&lt;/p>
-&lt;blockquote>
 &lt;p>对于 Dubbo2 用户来说,可能会对StreamObserver感到陌生,这是Dubbo3定义的一种流类型,Dubbo2 中并不存在 
Stream 的类型,所以对于迁移场景没有任何影响。&lt;/p>
-&lt;/blockquote>
-&lt;p>流的语义保证&lt;/p>
+&lt;div class="alert alert-primary" role="alert">
+&lt;h4 class="alert-heading">流的语义保证&lt;/h4>
 &lt;ul>
 &lt;li>提供消息边界,可以方便地对消息单独处理&lt;/li>
 &lt;li>严格有序,发送端的顺序和接收端顺序一致&lt;/li>
 &lt;li>全双工,发送不需要等待&lt;/li>
 &lt;li>支持取消和超时&lt;/li>
 &lt;/ul>
+&lt;/div>
 &lt;h3 id="protobuf-序列化的流">Protobuf 序列化的流&lt;/h3>
 &lt;p>对于 &lt;code>Protobuf&lt;/code> 序列化方式,推荐编写 &lt;code>IDL&lt;/code> 使用 
&lt;code>compiler&lt;/code> 插件进行编译生成。生成的代码大致如下:&lt;/p>
 &lt;div class="highlight">&lt;pre tabindex="0" 
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code
 class="language-java" data-lang="java">&lt;span 
style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> 
&lt;span style="color:#268bd2">interface&lt;/span> &lt;span 
style="color:#268bd2">PbGreeter&lt;/span> &lt;span 
style="color:#719e07">{&lt;/span>
diff --git 
a/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/migration/index.html
 
b/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/migration/index.html
index a760340c5b..d5aa627578 100644
--- 
a/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/migration/index.html
+++ 
b/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/migration/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS 
content="INDEX, FOLLOW"><link rel=canonical 
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/migration/><meta
 charset=utf-8><meta name=viewport 
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta 
name=generator content="Hugo 0.113.0"><link rel="shortcut icon" type=image/png 
href=/imgs/favicon.png><link rel=apple-touch-icon 
href=/favicons/apple-touch-icon-180x1 [...]
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS 
content="INDEX, FOLLOW"><link rel=canonical 
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/migration/><meta
 charset=utf-8><meta name=viewport 
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta 
name=generator content="Hugo 0.113.0"><link rel="shortcut icon" type=image/png 
href=/imgs/favicon.png><link rel=apple-touch-icon 
href=/favicons/apple-touch-icon-180x1 [...]
 <script>var 
doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function 
gtag(){dataLayer.push(arguments)}gtag("js",new 
Date),gtag("config","G-1TFHM5YBH0",{anonymize_ip:!1})}</script><link 
rel=preload 
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
 as=style><link 
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
 rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js 
integrity="sha256-9/a [...]
 <link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta 
name=theme-color content="#326ce5"><link rel=stylesheet 
href=/css/feature-states.css><meta name=description content="Dubbo2 协议迁移"><meta 
property="og:description" content="Dubbo2 协议迁移"><meta name=twitter:description 
content="Dubbo2 协议迁移"><meta property="og:url" 
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/migration/";><meta
 property="og:title" content="Dubbo2  [...]
 <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=" 
[...]
@@ -687,12 +687,11 @@
 </span></span><span style=display:flex><span>        <span 
style=color:#719e07>return</span> <span 
style=color:#2aa198>&#34;hello,&#34;</span> <span style=color:#719e07>+</span> 
request<span style=color:#719e07>;</span>
 </span></span><span style=display:flex><span>    <span 
style=color:#719e07>}</span>
 </span></span><span style=display:flex><span><span style=color:#719e07>}</span>
-</span></span></code></pre></div><h3 id=仅使用-dubbo-协议>仅使用 dubbo 
协议</h3><p>为保证兼容性,我们先将部分 provider 升级到 <code>dubbo3</code> 版本并使用 
<code>dubbo</code> 协议。</p><p>使用 <code>dubbo</code> 协议启动一个 <a 
href=https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration/ApiMigrationDubboProvider.java><code>Provider</code></a>
 和 <a 
href=https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-sample
 [...]
-<img src=/imgs/v3/migration/tri/dubbo3-tri-migration-dubbo-dubbo-result.png 
alt=result></p><h3 id=仅使用-triple-协议>仅使用 triple 协议</h3><p>当所有的 consumer 都升级至支持 
<code>Triple</code> 协议的版本后,provider 可切换至仅使用 <code>Triple</code> 
协议启动</p><p>结构如图所示:
+</span></span></code></pre></div><h3 id=仅使用-dubbo-协议>仅使用 dubbo 
协议</h3><p>为保证兼容性,我们先将部分 provider 升级到 <code>dubbo3</code> 版本并使用 
<code>dubbo</code> 协议。</p><p>使用 <code>dubbo</code> 协议启动一个 <a 
href=https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration/ApiMigrationDubboProvider.java><code>Provider</code></a>
 和 <a 
href=https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-sample
 [...]
 <img src=/imgs/v3/migration/tri/migrate-only-tri-strust.png 
alt=strust></p><p><a 
href=https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration/ApiMigrationTriProvider.java>Provider</a>
-和 <a 
href=https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration/ApiMigrationTriConsumer.java>Consumer</a>
 完成调用。</p><p>输出如下:</p><p><img 
src=/imgs/v3/migration/tri/dubbo3-tri-migration-tri-tri-result.png 
alt=result></p><h3 id=同时使用-dubbo-和-triple-协议>同时使用 dubbo 和 triple 
协议</h3><p>对于线上服务的升级,不可能一蹴而就同时完成 provider 和 consumer 升级, 
需要按步操作,</p><p><strong>第一步:保证业务稳定。</strong></p><p><strong>第二步:provider 提供双协议的 
[...]
-<img src=/imgs/v3/migration/tri/migrate-dubbo-tri-strust.png 
alt=strust></p><blockquote><p>按照推荐升级步骤,provider 已经支持了 tri 协议,所以 dubbo3 的 
consumer 可以直接使用 tri 协议</p></blockquote><p>使用 <code>dubbo</code> 协议和 
<code>triple</code> 协议启动<a 
href=https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration/ApiMigrationBothProvider.java><code>Provider</code></a>和<a
 href=https://github.com/apache/dubbo-samples/tree/ma [...]
-<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
 [...]
+和 <a 
href=https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration/ApiMigrationTriConsumer.java>Consumer</a>
 完成调用。</p><div class="alert alert-info" role=alert><h4 
class=alert-heading>输出结果</h4><img 
src=/imgs/v3/migration/tri/dubbo3-tri-migration-tri-tri-result.png 
alt=result></div><h3 id=同时使用-dubbo-和-triple-协议>同时使用 dubbo 和 triple 
协议</h3><p>对于线上服务的升级,不可能一蹴而就同时完成 provider 和 consumer 升级, 需要按步操作,</p><p>< [...]
+<img src=/imgs/v3/migration/tri/migrate-dubbo-tri-strust.png 
alt=strust></p><blockquote><p>按照推荐升级步骤,provider 已经支持了 tri 协议,所以 dubbo3 的 
consumer 可以直接使用 tri 协议</p></blockquote><p>使用 <code>dubbo</code> 协议和 
<code>triple</code> 协议启动<a 
href=https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java/org/apache/dubbo/sample/tri/migration/ApiMigrationBothProvider.java><code>Provider</code></a>和<a
 href=https://github.com/apache/dubbo-samples/tree/ma [...]
+<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
 [...]
 <a 
href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/migration.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.
 [...]
 <a 
href="https://github.com/apache/dubbo-website/issues/new?title=Dubbo2%20%e5%8d%8f%e8%ae%ae%e8%bf%81%e7%a7%bb";
 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></main><div class="d-none d-xl-block 
col-xl-2 td-toc d-print-none"><nav id=TableOfContents><ul><li><a 
href=#迁移流程说明>迁移流程说明</a><ul><li><a href=#定义服务>定义服务</a></li><li><a 
href=#仅使用-dubbo-协议>仅使用 dubbo 协议</a></li><li><a href=#仅使用-triple-协议>仅使用 triple 
协议</a></li><li><a href=#同时使用-dubbo-和-triple-协议>同时使用 dubbo 和 triple 
协议</a></li></ul></li></ul></nav></div></div></div></div><footer  [...]
diff --git 
a/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/streaming/index.html
 
b/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/streaming/index.html
index 2d56f943fe..e7eba6e5f4 100644
--- 
a/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/streaming/index.html
+++ 
b/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/streaming/index.html
@@ -1,4 +1,4 @@
-<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS 
content="INDEX, FOLLOW"><link rel=canonical 
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/streaming/><meta
 charset=utf-8><meta name=viewport 
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta 
name=generator content="Hugo 0.113.0"><link rel="shortcut icon" type=image/png 
href=/imgs/favicon.png><link rel=apple-touch-icon 
href=/favicons/apple-touch-icon-180x1 [...]
+<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS 
content="INDEX, FOLLOW"><link rel=canonical 
href=https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/streaming/><meta
 charset=utf-8><meta name=viewport 
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta 
name=generator content="Hugo 0.113.0"><link rel="shortcut icon" type=image/png 
href=/imgs/favicon.png><link rel=apple-touch-icon 
href=/favicons/apple-touch-icon-180x1 [...]
 <script>var 
doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function 
gtag(){dataLayer.push(arguments)}gtag("js",new 
Date),gtag("config","G-1TFHM5YBH0",{anonymize_ip:!1})}</script><link 
rel=preload 
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
 as=style><link 
href=/scss/main.min.827bbd3e83b1e0c66a1c08738c713f88f8068e84600146c2dbf9035f0f496f01.css
 rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js 
integrity="sha256-9/a [...]
 <link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta 
name=theme-color content="#326ce5"><link rel=stylesheet 
href=/css/feature-states.css><meta name=description content="Streaming 
通信"><meta property="og:description" content="Streaming 通信"><meta 
name=twitter:description content="Streaming 通信"><meta property="og:url" 
content="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/streaming/";><meta
 property="og:title" content="Stre [...]
 <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=" 
[...]
@@ -673,7 +673,7 @@
 <label for=m-zh-cnoverviewreferenceprotocolshttp-check><a 
href=/zh-cn/overview/reference/protocols/http/ class="align-left pl-0 
td-sidebar-link td-sidebar-link__page" 
id=m-zh-cnoverviewreferenceprotocolshttp><span>HTTP 
协议规范</span></a></label></li></ul></li></ul></li></ul></li></ul></nav></div></div><main
 class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb 
class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a 
href=https://dubbo.apache.org/zh-cn/o [...]
 <img src=/imgs/v3/migration/tri/migrate-server-stream.png 
alt=SERVER_STREAM></li><li>CLIENT_STREAM(客户端流)
 <img src=/imgs/v3/migration/tri/migrate-client-stream.png 
alt=CLIENT_STREAM></li><li>BIDIRECTIONAL_STREAM(双向流)
-<img src=/imgs/v3/migration/tri/migrate-bi-stream.png 
alt=BIDIRECTIONAL_STREAM></li></ul><blockquote><p>由于 <code>java</code> 
语言的限制,BIDIRECTIONAL_STREAM 和 CLIENT_STREAM 的实现是一样的。</p></blockquote><p>在 Dubbo3 
中,流式接口以 <code>SteamObserver</code> 
声明和使用,用户可以通过使用和实现这个接口来发送和处理流的数据、异常和结束。</p><blockquote><p>对于 Dubbo2 
用户来说,可能会对StreamObserver感到陌生,这是Dubbo3定义的一种流类型,Dubbo2 中并不存在 Stream 
的类型,所以对于迁移场景没有任何影响。</p></blockquote><p>流的语义保证</p><ul><li>提供消息边界,可以方便地对消息单独处理</li><li>严格有序,发送端的顺序和接收端顺序一致</li><li>全双工,发送不
 [...]
+<img src=/imgs/v3/migration/tri/migrate-bi-stream.png 
alt=BIDIRECTIONAL_STREAM></li></ul><p>由于 <code>java</code> 
语言的限制,BIDIRECTIONAL_STREAM 和 CLIENT_STREAM 的实现是一样的。</p><p>在 Dubbo3 中,流式接口以 
<code>SteamObserver</code> 声明和使用,用户可以通过使用和实现这个接口来发送和处理流的数据、异常和结束。</p><p>对于 
Dubbo2 用户来说,可能会对StreamObserver感到陌生,这是Dubbo3定义的一种流类型,Dubbo2 中并不存在 Stream 
的类型,所以对于迁移场景没有任何影响。</p><div class="alert alert-primary" role=alert><h4 
class=alert-heading>流的语义保证</h4><ul><li>提供消息边界,可以方便地对消息单独处理</li><li>严格有序,发送端的顺序和接收端顺序一致
 [...]
 </span></span><span style=display:flex><span>
 </span></span><span style=display:flex><span>    <span 
style=color:#268bd2>static</span> <span style=color:#268bd2>final</span> String 
JAVA_SERVICE_NAME <span style=color:#719e07>=</span> <span 
style=color:#2aa198>&#34;org.apache.dubbo.sample.tri.PbGreeter&#34;</span><span 
style=color:#719e07>;</span>
 </span></span><span style=display:flex><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;org.apache.dubbo.sample.tri.PbGreeter&#34;</span><span 
style=color:#719e07>;</span>
@@ -766,7 +766,7 @@
 </span></span><span style=display:flex><span><span style=color:#719e07>}</span>
 </span></span><span style=display:flex><span>request<span 
style=color:#719e07>.</span>onCompleted<span style=color:#719e07>();</span>
 </span></span></code></pre></div><div id=pre-footer><h2>反馈</h2><p 
class=feedback--prompt>此页是否对您有帮助?</p><button class="btn btn-primary mb-4 
feedback--yes">是</button>
-<button class="btn btn-primary mb-4 
feedback--no">否</button></div><script>const 
yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const
 
sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled
 [...]
+<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
 [...]
 <a 
href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/overview/mannual/java-sdk/reference-manual/protocol/triple/streaming.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.
 [...]
 <a 
href="https://github.com/apache/dubbo-website/issues/new?title=Streaming%20%e9%80%9a%e4%bf%a1";
 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></main><div class="d-none d-xl-block 
col-xl-2 td-toc d-print-none"><nav id=TableOfContents><ul><li><a 
href=#流实现原理>流实现原理</a></li><li><a href=#流使用方式>流使用方式</a><ul><li><a 
href=#stream-流>Stream 流</a></li><li><a href=#protobuf-序列化的流>Protobuf 
序列化的流</a></li></ul></li><li><a href=#非-protobuf-序列化的流>非 Protobuf 
序列化的流</a><ul><li><a href=#api>api</a></li><li><a href=#实现类>实现类</a></li><li> 
[...]
diff --git a/zh-cn/sitemap.xml b/zh-cn/sitemap.xml
index 81d99c52df..19e7f8cbe7 100644
--- a/zh-cn/sitemap.xml
+++ b/zh-cn/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset 
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"; 
xmlns:xhtml="http://www.w3.org/1999/xhtml";><url><loc>https://dubbo.apache.org/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/</loc><lastmod>2023-02-22T15:03:22+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://dubbo.apache.org/zh-cn/overview/mannual/jav
 [...]
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset 
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"; 
xmlns:xhtml="http://www.w3.org/1999/xhtml";><url><loc>https://dubbo.apache.org/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/</loc><lastmod>2023-02-22T15:03:22+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://dubbo.apache.org/zh-cn/overview/mannual/jav
 [...]
\ No newline at end of file


Reply via email to