You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2023/01/16 06:33:26 UTC
[dubbo-website] 01/01: Initial commit for asf-site-v2
This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch asf-site-v2
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git
commit 18237770cff8d1aae6ba50bfe8d734ca52859f52
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Mon Jan 16 14:27:09 2023 +0800
Initial commit for asf-site-v2
---
.asf.yaml | 2 +
.htaccess | 34 +
.nojekyll | 0
404.html | 4 +
ByteDanceVerify.html | 1 +
CNAME | 1 +
.../index.html | 38 +
.../the-gsocgoogle-summer-of-code-2018/index.html | 38 +
.../index.html | 38 +
.../index.html | 38 +
.../index.html | 38 +
blog/2018/07/01/your-first-dubbo-filter/index.html | 194 +
blog/2018/07/12/tracking-with-pinpoint/index.html | 310 +
.../index.html | 54 +
.../index.html | 38 +
blog/2018/08/07/dubbo-101/index.html | 173 +
.../2018/08/07/use-annotations-in-dubbo/index.html | 231 +
.../2018/08/07/using-zookeeper-in-dubbo/index.html | 175 +
blog/2018/08/07/your-first-dubbo-demo/index.html | 173 +
blog/2018/08/10/dubbos-load-balance/index.html | 129 +
.../index.html | 120 +
.../index.html | 157 +
.../asynchronous-invoke/index.html | 126 +
blog/2018/08/14/generic-invoke-of-dubbo/index.html | 130 +
.../index.html | 148 +
.../index.html | 148 +
.../index.html | 148 +
.../index.html | 38 +
.../index.html | 250 +
.../02/how-to-prepare-an-apache-release/index.html | 283 +
.../30/integrate-dubbo-with-kubernetes/index.html | 52 +
.../introduction-to-the-dubbo-protocol/index.html | 61 +
.../index.html | 343 +
.../index.html | 38 +
.../index.html | 164 +
.../index.html | 176 +
.../index.html | 56 +
.../index.html | 60 +
.../index.html | 93 +
.../index.html | 300 +
.../index.html | 73 +
.../2019/08/26/dubbo-admin-service-test/index.html | 156 +
blog/2019/08/26/service-test/index.html | 156 +
blog/2020/05/18/past-releases/index.html | 100 +
blog/index.html | 48 +
blog/index.xml | 5471 +++++++
blog/news/index.html | 45 +
blog/news/index.xml | 5304 +++++++
blog/news/page/1/index.html | 1 +
blog/news/page/2/index.html | 40 +
blog/news/page/3/index.html | 45 +
blog/news/page/4/index.html | 40 +
blog/page/1/index.html | 1 +
blog/page/2/index.html | 40 +
blog/page/3/index.html | 43 +
blog/page/4/index.html | 42 +
blog/releases/index.html | 41 +
blog/releases/index.xml | 168 +
blog/releases/page/1/index.html | 1 +
cn/404.html | 7 +
cn/admin/index.html | 7 +
cn/admin/index.xml | 1 +
cn/community/index.html | 7 +
cn/community/index.xml | 1 +
.../committer/apache-dubbo-page_dev/index.html | 44 +
cn/contribution-guidelines/committer/index.html | 9 +
cn/contribution-guidelines/committer/index.xml | 485 +
.../committer/label-an-issue-guide_dev/index.html | 18 +
.../committer/new-committer-guide_dev/index.html | 29 +
.../committer/release-guide_dev/index.html | 213 +
.../committer/website-guide_dev/index.html | 9 +
.../contributor/become-a-committer_dev/index.html | 24 +
.../contributor/cla-signing-guide_dev/index.html | 12 +
.../dubbo-extension-guide_dev/index.html | 26 +
cn/contribution-guidelines/contributor/index.html | 9 +
cn/contribution-guidelines/contributor/index.xml | 374 +
.../mailing-list-subscription-guide_dev/index.html | 73 +
.../new-contributor-guide_dev/index.html | 48 +
.../reporting-security-issues_dev/index.html | 21 +
.../software-donation-guide_dev/index.html | 103 +
.../contributor/test-coverage-guide_dev/index.html | 9 +
cn/contribution-guidelines/index.html | 16 +
cn/contribution-guidelines/index.xml | 1 +
cn/download/index.html | 9 +
cn/download/index.xml | 1 +
cn/facade-docs/contact-/index.html | 9 +
cn/facade-docs/contact-/index.xml | 1 +
cn/facade-docs/index.html | 9 +
cn/facade-docs/index.xml | 1 +
cn/facade-docs/mannual/golang/index.html | 9 +
cn/facade-docs/mannual/index.html | 9 +
cn/facade-docs/mannual/index.xml | 1 +
cn/facade-docs/mannual/java/index.html | 9 +
cn/facade-docs/quickstart/index.html | 9 +
cn/facade-docs/quickstart/index.xml | 1 +
cn/facade-docs/tasks/index.html | 9 +
cn/facade-docs/tasks/index.xml | 1 +
cn/facade-docs/what/core-concepts/index.html | 9 +
cn/facade-docs/what/ecosystem/index.html | 9 +
cn/facade-docs/what/index.html | 9 +
cn/facade-docs/what/index.xml | 1 +
cn/facade-docs/what/overview/index.html | 9 +
cn/facade-docs/whatsnew/index.html | 9 +
cn/facade-docs/whatsnew/index.xml | 1 +
cn/facade-docs/whatsnew/mesh/index.html | 9 +
.../whatsnew/servicediscovery3/index.html | 9 +
cn/facade-docs/whatsnew/triple/index.html | 9 +
cn/featured-background.jpg | Bin 0 -> 146971 bytes
...a2_146971_1920x1080_fill_q75_catmullrom_top.jpg | Bin 0 -> 49146 bytes
...9fa2_146971_960x540_fill_q75_catmullrom_top.jpg | Bin 0 -> 15763 bytes
cn/golang-sdk/index.html | 7 +
cn/golang-sdk/index.xml | 1 +
cn/index.html | 9 +
cn/index.xml | 1 +
cn/java-sdk/index.html | 7 +
cn/java-sdk/index.xml | 1 +
.../v2.x/advanced-features-and-usage/index.html | 7 +
.../v2.x/advanced-features-and-usage/index.xml | 1 +
.../v2.x/concepts-and-architecture/index.html | 7 +
.../v2.x/concepts-and-architecture/index.xml | 1 +
.../concepts-and-architecture/users/index.html | 7 +
cn/java-sdk/v2.x/contributing/index.html | 7 +
cn/java-sdk/v2.x/contributing/index.xml | 1 +
cn/java-sdk/v2.x/index.html | 7 +
cn/java-sdk/v2.x/index.xml | 1 +
cn/java-sdk/v2.x/introduction/index.html | 7 +
cn/java-sdk/v2.x/introduction/index.xml | 1 +
cn/java-sdk/v2.x/introduction/users/index.html | 7 +
cn/java-sdk/v2.x/quick-start/index.html | 7 +
cn/java-sdk/v2.x/quick-start/index.xml | 2 +
.../v2.x/quick-start/quick-start/index.html | 7 +
cn/java-sdk/v2.x/reference-manual/index.html | 7 +
cn/java-sdk/v2.x/reference-manual/index.xml | 1 +
.../v2.x/upgrades-and-compatibility/index.html | 7 +
.../v2.x/upgrades-and-compatibility/index.xml | 1 +
.../v3.x/advanced-features-and-usage/index.html | 7 +
.../v3.x/advanced-features-and-usage/index.xml | 1 +
.../v3.x/concepts-and-architecture/index.html | 7 +
.../v3.x/concepts-and-architecture/index.xml | 1 +
.../concepts-and-architecture/users/index.html | 7 +
cn/java-sdk/v3.x/contributing/index.html | 7 +
cn/java-sdk/v3.x/contributing/index.xml | 1 +
cn/java-sdk/v3.x/index.html | 7 +
cn/java-sdk/v3.x/index.xml | 1 +
cn/java-sdk/v3.x/introduction/index.html | 7 +
cn/java-sdk/v3.x/introduction/index.xml | 1 +
cn/java-sdk/v3.x/introduction/users/index.html | 7 +
cn/java-sdk/v3.x/quick-start/index.html | 7 +
cn/java-sdk/v3.x/quick-start/index.xml | 1 +
cn/java-sdk/v3.x/reference-manual/index.html | 7 +
cn/java-sdk/v3.x/reference-manual/index.xml | 1 +
.../v3.x/upgrades-and-compatibility/index.html | 7 +
.../v3.x/upgrades-and-compatibility/index.xml | 1 +
cn/notices/index.html | 9 +
cn/notices/index.xml | 1 +
cn/notices/security/index.html | 27 +
cn/pixiu/index.html | 7 +
cn/pixiu/index.xml | 1 +
cn/sitemap.xml | 1 +
community/index.html | 1 +
community/index.xml | 1 +
css/open-sans.css | 130 +
css/prism.css | 208 +
css/shortcodes.css | 2 +
css/shortcodes/cards-pane.css | 21 +
css/shortcodes/tabbed-pane.css | 18 +
css/swagger-ui.css | 4 +
.../committer/apache-dubbo-page_dev/index.html | 172 +
docs/contribution-guidelines/committer/index.html | 161 +
docs/contribution-guidelines/committer/index.xml | 522 +
.../committer/label-an-issue-guide_dev/index.html | 173 +
.../committer/new-committer-guide_dev/index.html | 165 +
.../committer/release-guide_dev/index.html | 370 +
.../committer/website-guide_dev/index.html | 161 +
.../contributor/become-a-committer_dev/index.html | 164 +
.../contributor/cla-signing-guide_dev/index.html | 164 +
.../dubbo-extension-guide_dev/index.html | 170 +
.../contribution-guidelines/contributor/index.html | 161 +
docs/contribution-guidelines/contributor/index.xml | 282 +
.../mailing-list-subscription-guide_dev/index.html | 225 +
.../new-contributor-guide_dev/index.html | 177 +
.../reporting-security-issues_dev/index.html | 164 +
.../software-donation-guide_dev/index.html | 252 +
.../contributor/test-coverage-guide_dev/index.html | 161 +
docs/contribution-guidelines/index.html | 169 +
docs/contribution-guidelines/index.xml | 1 +
docs/index.html | 161 +
docs/index.xml | 5000 +++++++
docs/notices/index.html | 161 +
docs/notices/index.xml | 21 +
docs/notices/security/index.html | 163 +
docs/v2.7/admin/index.html | 161 +
docs/v2.7/admin/index.xml | 6 +
docs/v2.7/admin/install/admin-console/index.html | 189 +
docs/v2.7/admin/install/consumer-demo/index.html | 175 +
docs/v2.7/admin/install/index.html | 161 +
docs/v2.7/admin/install/index.xml | 144 +
docs/v2.7/admin/install/monitor-center/index.html | 161 +
docs/v2.7/admin/install/provider-demo/index.html | 174 +
docs/v2.7/admin/install/redis/index.html | 193 +
docs/v2.7/admin/install/zookeeper/index.html | 203 +
docs/v2.7/admin/ops/apidocs/index.html | 189 +
docs/v2.7/admin/ops/functions/index.html | 164 +
docs/v2.7/admin/ops/governance/index.html | 164 +
docs/v2.7/admin/ops/index.html | 161 +
docs/v2.7/admin/ops/index.xml | 635 +
docs/v2.7/admin/ops/introduction/index.html | 188 +
docs/v2.7/admin/ops/pinpoint/index.html | 433 +
docs/v2.7/admin/ops/search/index.html | 164 +
docs/v2.7/admin/ops/skywalking/index.html | 212 +
docs/v2.7/admin/ops/test/index.html | 161 +
docs/v2.7/dev/build/index.html | 169 +
docs/v2.7/dev/checklist/index.html | 161 +
docs/v2.7/dev/code-smell/index.html | 208 +
docs/v2.7/dev/coding/index.html | 161 +
docs/v2.7/dev/contract/index.html | 161 +
docs/v2.7/dev/design/index.html | 161 +
docs/v2.7/dev/implementation/index.html | 181 +
docs/v2.7/dev/impls/cache/index.html | 211 +
docs/v2.7/dev/impls/cluster/index.html | 204 +
docs/v2.7/dev/impls/compiler/index.html | 196 +
docs/v2.7/dev/impls/config-center/index.html | 167 +
docs/v2.7/dev/impls/container/index.html | 198 +
docs/v2.7/dev/impls/dispatcher/index.html | 196 +
docs/v2.7/dev/impls/exchanger/index.html | 214 +
docs/v2.7/dev/impls/exporter-listener/index.html | 206 +
docs/v2.7/dev/impls/extension-factory/index.html | 197 +
docs/v2.7/dev/impls/filter/index.html | 202 +
docs/v2.7/dev/impls/index.html | 161 +
docs/v2.7/dev/impls/index.xml | 1449 ++
docs/v2.7/dev/impls/invoker-listener/index.html | 206 +
docs/v2.7/dev/impls/load-balance/index.html | 199 +
docs/v2.7/dev/impls/logger-adapter/index.html | 211 +
docs/v2.7/dev/impls/merger/index.html | 194 +
docs/v2.7/dev/impls/monitor/index.html | 207 +
docs/v2.7/dev/impls/networker/index.html | 196 +
docs/v2.7/dev/impls/page/index.html | 196 +
docs/v2.7/dev/impls/protocol/index.html | 255 +
docs/v2.7/dev/impls/proxy-factory/index.html | 202 +
docs/v2.7/dev/impls/registry/index.html | 313 +
docs/v2.7/dev/impls/remoting/index.html | 237 +
docs/v2.7/dev/impls/router/index.html | 194 +
docs/v2.7/dev/impls/serialize/index.html | 199 +
docs/v2.7/dev/impls/status-checker/index.html | 193 +
docs/v2.7/dev/impls/telnet-handler/index.html | 197 +
docs/v2.7/dev/impls/threadpool/index.html | 194 +
docs/v2.7/dev/impls/validation/index.html | 211 +
docs/v2.7/dev/index.html | 161 +
docs/v2.7/dev/index.xml | 602 +
docs/v2.7/dev/principals/code-detail/index.html | 164 +
docs/v2.7/dev/principals/configuration/index.html | 167 +
docs/v2.7/dev/principals/dummy/index.html | 316 +
docs/v2.7/dev/principals/expansibility/index.html | 164 +
docs/v2.7/dev/principals/extension/index.html | 206 +
.../dev/principals/general-knowledge/index.html | 167 +
docs/v2.7/dev/principals/index.html | 161 +
docs/v2.7/dev/principals/index.xml | 390 +
docs/v2.7/dev/principals/robustness/index.html | 171 +
docs/v2.7/dev/release/index.html | 161 +
docs/v2.7/dev/spi/index.html | 261 +
docs/v2.7/dev/tck/index.html | 161 +
docs/v2.7/index.html | 161 +
docs/v2.7/index.xml | 2 +
docs/v2.7/user/benchmark-tool/index.html | 165 +
docs/v2.7/user/best-practice/index.html | 161 +
docs/v2.7/user/capacity-plan/index.html | 161 +
docs/v2.7/user/configuration/annotation/index.html | 206 +
docs/v2.7/user/configuration/api/index.html | 251 +
.../configuration-load-process/index.html | 243 +
docs/v2.7/user/configuration/index.html | 161 +
docs/v2.7/user/configuration/index.xml | 412 +
docs/v2.7/user/configuration/properties/index.html | 164 +
docs/v2.7/user/configuration/xml/index.html | 182 +
docs/v2.7/user/coveragence/index.html | 162 +
docs/v2.7/user/dependencies/index.html | 165 +
docs/v2.7/user/examples/accesslog/index.html | 187 +
docs/v2.7/user/examples/async-call/index.html | 187 +
.../examples/async-execute-on-provider/index.html | 202 +
docs/v2.7/user/examples/attachment/index.html | 172 +
.../user/examples/callback-parameter/index.html | 236 +
.../user/examples/concurrency-control/index.html | 177 +
.../user/examples/config-connections/index.html | 165 +
docs/v2.7/user/examples/config-rule/index.html | 168 +
docs/v2.7/user/examples/context/index.html | 184 +
docs/v2.7/user/examples/delay-publish/index.html | 164 +
.../examples/distributed-transaction/index.html | 161 +
docs/v2.7/user/examples/dump/index.html | 166 +
docs/v2.7/user/examples/echo-service/index.html | 171 +
docs/v2.7/user/examples/events-notify/index.html | 208 +
docs/v2.7/user/examples/explicit-target/index.html | 165 +
.../examples/fault-tolerent-strategy/index.html | 168 +
.../user/examples/generic-reference/index.html | 221 +
docs/v2.7/user/examples/generic-service/index.html | 186 +
.../user/examples/graceful-shutdown/index.html | 164 +
docs/v2.7/user/examples/group-merger/index.html | 175 +
.../v2.7/user/examples/hostname-binding/index.html | 166 +
docs/v2.7/user/examples/index.html | 161 +
docs/v2.7/user/examples/index.xml | 1668 +++
docs/v2.7/user/examples/lazy-connect/index.html | 162 +
docs/v2.7/user/examples/loadbalance/index.html | 169 +
docs/v2.7/user/examples/local-call/index.html | 169 +
docs/v2.7/user/examples/local-mock/index.html | 184 +
docs/v2.7/user/examples/local-stub/index.html | 182 +
docs/v2.7/user/examples/logger-strategy/index.html | 164 +
docs/v2.7/user/examples/multi-protocols/index.html | 189 +
docs/v2.7/user/examples/multi-registry/index.html | 212 +
docs/v2.7/user/examples/multi-versions/index.html | 166 +
docs/v2.7/user/examples/netty4/index.html | 171 +
.../user/examples/parameter-validation/index.html | 294 +
docs/v2.7/user/examples/preflight-check/index.html | 173 +
.../examples/reference-config-cache/index.html | 175 +
docs/v2.7/user/examples/registry-only/index.html | 167 +
docs/v2.7/user/examples/result-cache/index.html | 165 +
docs/v2.7/user/examples/routing-rule/index.html | 203 +
docs/v2.7/user/examples/serialization/index.html | 176 +
.../user/examples/service-container/index.html | 166 +
.../user/examples/service-downgrade/index.html | 164 +
docs/v2.7/user/examples/service-group/index.html | 166 +
docs/v2.7/user/examples/static-service/index.html | 166 +
docs/v2.7/user/examples/stickiness/index.html | 165 +
docs/v2.7/user/examples/subscribe-only/index.html | 163 +
docs/v2.7/user/examples/thread-model/index.html | 162 +
.../user/examples/token-authorization/index.html | 173 +
docs/v2.7/user/index.html | 161 +
docs/v2.7/user/index.xml | 2313 +++
docs/v2.7/user/languages/erlang/index.html | 161 +
docs/v2.7/user/languages/erlang/index.xml | 117 +
.../user/languages/erlang/quick-start/index.html | 178 +
.../user/languages/erlang/reference/index.html | 169 +
.../user/languages/erlang/serialization/index.html | 165 +
docs/v2.7/user/languages/erlang/service/index.html | 169 +
docs/v2.7/user/languages/index.html | 161 +
docs/v2.7/user/languages/index.xml | 1 +
docs/v2.7/user/maturity/index.html | 161 +
docs/v2.7/user/perf-test/index.html | 164 +
docs/v2.7/user/preface/architecture/index.html | 161 +
docs/v2.7/user/preface/background/index.html | 161 +
docs/v2.7/user/preface/index.html | 161 +
docs/v2.7/user/preface/index.xml | 149 +
docs/v2.7/user/preface/requirements/index.html | 161 +
docs/v2.7/user/preface/usage/index.html | 175 +
docs/v2.7/user/quick-start/index.html | 292 +
docs/v2.7/user/recommend/index.html | 189 +
docs/v2.7/user/references/api/index.html | 180 +
docs/v2.7/user/references/index.html | 161 +
docs/v2.7/user/references/index.xml | 611 +
docs/v2.7/user/references/maven/index.html | 163 +
docs/v2.7/user/references/metadata/index.html | 378 +
.../v2.7/user/references/protocol/dubbo/index.html | 170 +
.../user/references/protocol/hessian/index.html | 172 +
docs/v2.7/user/references/protocol/http/index.html | 173 +
docs/v2.7/user/references/protocol/index.html | 161 +
docs/v2.7/user/references/protocol/index.xml | 738 +
.../user/references/protocol/memcached/index.html | 168 +
.../v2.7/user/references/protocol/redis/index.html | 168 +
docs/v2.7/user/references/protocol/rest/index.html | 440 +
docs/v2.7/user/references/protocol/rmi/index.html | 171 +
.../user/references/protocol/thrift/index.html | 167 +
.../user/references/protocol/webservice/index.html | 189 +
docs/v2.7/user/references/qos/index.html | 268 +
docs/v2.7/user/references/registry/index.html | 161 +
docs/v2.7/user/references/registry/index.xml | 262 +
.../user/references/registry/multicast/index.html | 169 +
.../v2.7/user/references/registry/nacos/index.html | 214 +
.../v2.7/user/references/registry/redis/index.html | 165 +
.../user/references/registry/simple/index.html | 181 +
.../user/references/registry/zookeeper/index.html | 189 +
docs/v2.7/user/references/telnet/index.html | 164 +
.../references/xml/dubbo-application/index.html | 161 +
.../user/references/xml/dubbo-argument/index.html | 164 +
.../references/xml/dubbo-config-center/index.html | 161 +
.../user/references/xml/dubbo-consumer/index.html | 161 +
.../user/references/xml/dubbo-method/index.html | 164 +
.../user/references/xml/dubbo-module/index.html | 161 +
.../user/references/xml/dubbo-monitor/index.html | 161 +
.../user/references/xml/dubbo-parameter/index.html | 165 +
.../user/references/xml/dubbo-protocol/index.html | 161 +
.../user/references/xml/dubbo-provider/index.html | 161 +
.../user/references/xml/dubbo-reference/index.html | 161 +
.../user/references/xml/dubbo-registry/index.html | 161 +
.../user/references/xml/dubbo-service/index.html | 161 +
docs/v2.7/user/references/xml/index.html | 161 +
docs/v2.7/user/references/xml/index.xml | 2323 +++
docs/v2.7/user/rest/index.html | 531 +
docs/v2.7/user/simple-monitor/index.html | 201 +
docs/v3.0/index.html | 161 +
docs/v3.0/index.xml | 1 +
dubbo-go/resource/dubbo-go-arch.pptx | Bin 0 -> 74748 bytes
dubbo-go/v3 | 10 +
dubbogo | 5 +
en/404.html | 7 +
en/admin/index.html | 7 +
en/admin/index.xml | 1 +
en/blog/1/01/01/index.html | 209 +
.../index.html | 13 +
.../the-gsocgoogle-summer-of-code-2018/index.html | 13 +
.../index.html | 13 +
.../index.html | 10 +
.../index.html | 10 +
.../2018/07/01/your-first-dubbo-filter/index.html | 168 +
.../2018/07/12/tracking-with-pinpoint/index.html | 285 +
.../index.html | 29 +
.../index.html | 10 +
en/blog/2018/08/07/dubbo-101/index.html | 148 +
.../2018/08/07/use-annotations-in-dubbo/index.html | 206 +
.../2018/08/07/using-zookeeper-in-dubbo/index.html | 150 +
en/blog/2018/08/10/dubbos-load-balance/index.html | 104 +
.../index.html | 132 +
.../index.html | 94 +
.../index.html | 665 +
.../asynchronous-invoke/index.html | 101 +
.../2018/08/14/generic-invoke-of-dubbo/index.html | 105 +
.../index.html | 123 +
.../index.html | 123 +
.../08/14/native-image-using-graalvm/index.html | 179 +
.../index.html | 122 +
.../index.html | 10 +
.../index.html | 225 +
.../02/how-to-prepare-an-apache-release/index.html | 256 +
.../30/integrate-dubbo-with-kubernetes/index.html | 27 +
.../introduction-to-the-dubbo-protocol/index.html | 33 +
.../index.html | 313 +
.../index.html | 10 +
.../index.html | 151 +
.../index.html | 31 +
.../index.html | 34 +
.../index.html | 68 +
.../index.html | 275 +
.../index.html | 48 +
en/blog/2019/08/26/service-test/index.html | 131 +
en/blog/2020/05/18/past-releases/index.html | 147 +
en/blog/2021/07/02/3.0.1-release-note/index.html | 18 +
en/blog/2021/08/18/3.0.2-release-note/index.html | 55 +
en/blog/2021/08/23/3.0.2.1-release-note/index.html | 14 +
en/blog/2021/09/20/2.7.14-release-note/index.html | 13 +
.../index.html | 139 +
.../index.html | 99 +
en/blog/index.html | 13 +
en/blog/index.xml | 6911 +++++++++
en/blog/news/index.html | 16 +
en/blog/news/index.xml | 6335 ++++++++
en/blog/news/page/1/index.html | 1 +
en/blog/news/page/2/index.html | 14 +
en/blog/news/page/3/index.html | 14 +
en/blog/news/page/4/index.html | 15 +
en/blog/page/1/index.html | 1 +
en/blog/page/2/index.html | 16 +
en/blog/page/3/index.html | 14 +
en/blog/page/4/index.html | 18 +
en/blog/page/5/index.html | 10 +
en/blog/releases/index.html | 12 +
en/blog/releases/index.xml | 577 +
en/blog/releases/page/1/index.html | 1 +
en/community/index.html | 7 +
en/community/index.xml | 1 +
.../committer/apache-dubbo-page_dev/index.html | 44 +
en/contribution-guidelines/committer/index.html | 9 +
en/contribution-guidelines/committer/index.xml | 485 +
.../committer/label-an-issue-guide_dev/index.html | 18 +
.../committer/new-committer-guide_dev/index.html | 29 +
.../committer/release-guide_dev/index.html | 213 +
.../committer/website-guide_dev/index.html | 9 +
.../contributor/become-a-committer_dev/index.html | 24 +
.../contributor/cla-signing-guide_dev/index.html | 12 +
.../dubbo-extension-guide_dev/index.html | 26 +
en/contribution-guidelines/contributor/index.html | 9 +
en/contribution-guidelines/contributor/index.xml | 374 +
.../mailing-list-subscription-guide_dev/index.html | 73 +
.../new-contributor-guide_dev/index.html | 48 +
.../reporting-security-issues_dev/index.html | 21 +
.../software-donation-guide_dev/index.html | 103 +
.../contributor/test-coverage-guide_dev/index.html | 9 +
en/contribution-guidelines/index.html | 16 +
en/contribution-guidelines/index.xml | 1 +
.../committer/apache-dubbo-page_dev/index.html | 22 +
.../contribution-guidelines/committer/index.html | 11 +
.../contribution-guidelines/committer/index.xml | 556 +
.../committer/label-an-issue-guide_dev/index.html | 23 +
.../committer/new-committer-guide_dev/index.html | 15 +
.../committer/release-guide_dev/index.html | 218 +
.../committer/website-guide_dev/index.html | 11 +
.../contributor/become-a-committer_dev/index.html | 14 +
.../contributor/cla-signing-guide_dev/index.html | 14 +
.../dubbo-extension-guide_dev/index.html | 20 +
.../contribution-guidelines/contributor/index.html | 11 +
.../contribution-guidelines/contributor/index.xml | 323 +
.../mailing-list-subscription-guide_dev/index.html | 75 +
.../new-contributor-guide_dev/index.html | 27 +
.../reporting-security-issues_dev/index.html | 14 +
.../software-donation-guide_dev/index.html | 102 +
.../contributor/test-coverage-guide_dev/index.html | 11 +
en/docs/contribution-guidelines/index.html | 19 +
en/docs/contribution-guidelines/index.xml | 1 +
en/docs/faq/index.html | 11 +
en/docs/faq/index.xml | 1 +
en/docs/index.html | 11 +
en/docs/index.xml | 4027 ++++++
en/docs/notices/index.html | 11 +
en/docs/notices/index.xml | 76 +
en/docs/notices/security/index.html | 29 +
en/docs/v2.7/admin/index.html | 11 +
en/docs/v2.7/admin/index.xml | 6 +
.../v2.7/admin/install/admin-console/index.html | 41 +
.../v2.7/admin/install/consumer-demo/index.html | 25 +
en/docs/v2.7/admin/install/index.html | 11 +
en/docs/v2.7/admin/install/index.xml | 146 +
.../v2.7/admin/install/monitor-center/index.html | 11 +
.../v2.7/admin/install/provider-demo/index.html | 24 +
en/docs/v2.7/admin/install/redis/index.html | 43 +
en/docs/v2.7/admin/install/zookeeper/index.html | 53 +
en/docs/v2.7/admin/ops/apidocs/index.html | 39 +
en/docs/v2.7/admin/ops/functions/index.html | 14 +
en/docs/v2.7/admin/ops/governance/index.html | 14 +
en/docs/v2.7/admin/ops/index.html | 11 +
en/docs/v2.7/admin/ops/index.xml | 682 +
en/docs/v2.7/admin/ops/introduction/index.html | 37 +
en/docs/v2.7/admin/ops/pinpoint/index.html | 283 +
en/docs/v2.7/admin/ops/search/index.html | 14 +
en/docs/v2.7/admin/ops/skywalking/index.html | 62 +
en/docs/v2.7/admin/ops/test/index.html | 11 +
en/docs/v2.7/dev/build/index.html | 19 +
en/docs/v2.7/dev/checklist/index.html | 11 +
en/docs/v2.7/dev/code-smell/index.html | 58 +
en/docs/v2.7/dev/coding/index.html | 11 +
en/docs/v2.7/dev/contract/index.html | 11 +
en/docs/v2.7/dev/design/index.html | 11 +
en/docs/v2.7/dev/implementation/index.html | 34 +
en/docs/v2.7/dev/impls/cache/index.html | 61 +
en/docs/v2.7/dev/impls/cluster/index.html | 54 +
en/docs/v2.7/dev/impls/compiler/index.html | 46 +
en/docs/v2.7/dev/impls/config-center/index.html | 17 +
en/docs/v2.7/dev/impls/container/index.html | 48 +
en/docs/v2.7/dev/impls/dispatcher/index.html | 46 +
en/docs/v2.7/dev/impls/exchanger/index.html | 64 +
.../v2.7/dev/impls/exporter-listener/index.html | 56 +
.../v2.7/dev/impls/extension-factory/index.html | 47 +
en/docs/v2.7/dev/impls/filter/index.html | 52 +
en/docs/v2.7/dev/impls/index.html | 11 +
en/docs/v2.7/dev/impls/index.xml | 1556 ++
en/docs/v2.7/dev/impls/invoker-listener/index.html | 56 +
en/docs/v2.7/dev/impls/load-balance/index.html | 49 +
en/docs/v2.7/dev/impls/logger-adapter/index.html | 64 +
en/docs/v2.7/dev/impls/merger/index.html | 44 +
en/docs/v2.7/dev/impls/monitor/index.html | 57 +
en/docs/v2.7/dev/impls/networker/index.html | 46 +
en/docs/v2.7/dev/impls/page/index.html | 46 +
en/docs/v2.7/dev/impls/protocol/index.html | 105 +
en/docs/v2.7/dev/impls/proxy-factory/index.html | 52 +
en/docs/v2.7/dev/impls/registry/index.html | 163 +
en/docs/v2.7/dev/impls/remoting/index.html | 87 +
en/docs/v2.7/dev/impls/router/index.html | 43 +
en/docs/v2.7/dev/impls/serialize/index.html | 49 +
en/docs/v2.7/dev/impls/status-checker/index.html | 43 +
en/docs/v2.7/dev/impls/telnet-handler/index.html | 47 +
en/docs/v2.7/dev/impls/threadpool/index.html | 44 +
en/docs/v2.7/dev/impls/validation/index.html | 61 +
en/docs/v2.7/dev/index.html | 11 +
en/docs/v2.7/dev/index.xml | 707 +
en/docs/v2.7/dev/principals/code-detail/index.html | 11 +
.../v2.7/dev/principals/configuration/index.html | 17 +
en/docs/v2.7/dev/principals/dummy/index.html | 166 +
.../v2.7/dev/principals/expansibility/index.html | 14 +
en/docs/v2.7/dev/principals/extension/index.html | 56 +
.../dev/principals/general-knowledge/index.html | 17 +
en/docs/v2.7/dev/principals/index.html | 11 +
en/docs/v2.7/dev/principals/index.xml | 408 +
en/docs/v2.7/dev/principals/robustness/index.html | 18 +
en/docs/v2.7/dev/release/index.html | 11 +
en/docs/v2.7/dev/spi/index.html | 111 +
en/docs/v2.7/dev/tck/index.html | 11 +
en/docs/v2.7/index.html | 11 +
en/docs/v2.7/index.xml | 2 +
en/docs/v2.7/user/benchmark-tool/index.html | 15 +
en/docs/v2.7/user/best-practice/index.html | 11 +
en/docs/v2.7/user/capacity-plan/index.html | 11 +
.../v2.7/user/configuration/annotation/index.html | 56 +
en/docs/v2.7/user/configuration/api/index.html | 101 +
.../configuration-load-process/index.html | 93 +
en/docs/v2.7/user/configuration/index.html | 11 +
en/docs/v2.7/user/configuration/index.xml | 442 +
.../v2.7/user/configuration/properties/index.html | 14 +
en/docs/v2.7/user/configuration/xml/index.html | 32 +
en/docs/v2.7/user/coveragence/index.html | 12 +
en/docs/v2.7/user/dependencies/index.html | 15 +
en/docs/v2.7/user/examples/accesslog/index.html | 37 +
en/docs/v2.7/user/examples/async-call/index.html | 37 +
.../examples/async-execute-on-provider/index.html | 52 +
en/docs/v2.7/user/examples/attachment/index.html | 22 +
.../examples/broadcast-resp-collect/index.html | 41 +
.../user/examples/callback-parameter/index.html | 86 +
.../user/examples/concurrency-control/index.html | 27 +
.../user/examples/config-connections/index.html | 15 +
en/docs/v2.7/user/examples/config-rule/index.html | 18 +
en/docs/v2.7/user/examples/context/index.html | 34 +
.../v2.7/user/examples/delay-publish/index.html | 14 +
.../examples/distributed-transaction/index.html | 11 +
en/docs/v2.7/user/examples/dump/index.html | 16 +
en/docs/v2.7/user/examples/echo-service/index.html | 21 +
.../v2.7/user/examples/events-notify/index.html | 58 +
.../v2.7/user/examples/explicit-target/index.html | 15 +
.../examples/fault-tolerent-strategy/index.html | 21 +
.../examples/generic-invoke-with-json/index.html | 50 +
.../user/examples/generic-reference/index.html | 71 +
.../v2.7/user/examples/generic-service/index.html | 36 +
.../user/examples/graceful-shutdown/index.html | 14 +
en/docs/v2.7/user/examples/group-merger/index.html | 25 +
.../v2.7/user/examples/hostname-binding/index.html | 16 +
en/docs/v2.7/user/examples/index.html | 11 +
en/docs/v2.7/user/examples/index.xml | 2062 +++
.../examples/invoke-with-specified-ip/index.html | 51 +
en/docs/v2.7/user/examples/lazy-connect/index.html | 12 +
en/docs/v2.7/user/examples/loadbalance/index.html | 19 +
en/docs/v2.7/user/examples/local-call/index.html | 19 +
en/docs/v2.7/user/examples/local-mock/index.html | 34 +
en/docs/v2.7/user/examples/local-stub/index.html | 32 +
.../v2.7/user/examples/logger-strategy/index.html | 14 +
.../user/examples/msgpack-serialization/index.html | 82 +
.../v2.7/user/examples/multi-protocols/index.html | 39 +
.../v2.7/user/examples/multi-registry/index.html | 62 +
.../v2.7/user/examples/multi-versions/index.html | 16 +
en/docs/v2.7/user/examples/netty4/index.html | 20 +
.../user/examples/parameter-validation/index.html | 144 +
.../v2.7/user/examples/preflight-check/index.html | 23 +
.../examples/provider-timeout-release/index.html | 102 +
.../examples/reference-config-cache/index.html | 25 +
.../v2.7/user/examples/registry-only/index.html | 17 +
en/docs/v2.7/user/examples/result-cache/index.html | 15 +
en/docs/v2.7/user/examples/routing-rule/index.html | 53 +
.../v2.7/user/examples/serialization/index.html | 26 +
.../user/examples/service-container/index.html | 16 +
.../user/examples/service-downgrade/index.html | 14 +
.../v2.7/user/examples/service-group/index.html | 16 +
.../v2.7/user/examples/static-service/index.html | 16 +
en/docs/v2.7/user/examples/stickiness/index.html | 15 +
.../v2.7/user/examples/subscribe-only/index.html | 13 +
en/docs/v2.7/user/examples/thread-model/index.html | 12 +
.../user/examples/token-authorization/index.html | 23 +
en/docs/v2.7/user/index.html | 11 +
en/docs/v2.7/user/index.xml | 2381 +++
en/docs/v2.7/user/languages/erlang/index.html | 11 +
en/docs/v2.7/user/languages/erlang/index.xml | 118 +
.../user/languages/erlang/quick-start/index.html | 28 +
.../user/languages/erlang/reference/index.html | 19 +
.../user/languages/erlang/serialization/index.html | 15 +
.../v2.7/user/languages/erlang/service/index.html | 19 +
en/docs/v2.7/user/languages/index.html | 11 +
en/docs/v2.7/user/languages/index.xml | 1 +
en/docs/v2.7/user/maturity/index.html | 11 +
en/docs/v2.7/user/perf-test/index.html | 14 +
en/docs/v2.7/user/preface/architecture/index.html | 11 +
en/docs/v2.7/user/preface/background/index.html | 11 +
en/docs/v2.7/user/preface/index.html | 11 +
en/docs/v2.7/user/preface/index.xml | 149 +
en/docs/v2.7/user/preface/requirements/index.html | 11 +
en/docs/v2.7/user/preface/usage/index.html | 25 +
en/docs/v2.7/user/quick-start/index.html | 142 +
en/docs/v2.7/user/recommend/index.html | 39 +
en/docs/v2.7/user/references/api/index.html | 30 +
en/docs/v2.7/user/references/index.html | 11 +
en/docs/v2.7/user/references/index.xml | 617 +
en/docs/v2.7/user/references/maven/index.html | 13 +
en/docs/v2.7/user/references/metadata/index.html | 224 +
.../v2.7/user/references/protocol/dubbo/index.html | 20 +
.../user/references/protocol/hessian/index.html | 22 +
.../v2.7/user/references/protocol/http/index.html | 23 +
en/docs/v2.7/user/references/protocol/index.html | 11 +
en/docs/v2.7/user/references/protocol/index.xml | 765 +
.../user/references/protocol/memcached/index.html | 18 +
.../v2.7/user/references/protocol/redis/index.html | 18 +
.../v2.7/user/references/protocol/rest/index.html | 288 +
.../v2.7/user/references/protocol/rmi/index.html | 21 +
.../user/references/protocol/thrift/index.html | 17 +
.../user/references/protocol/webservice/index.html | 39 +
en/docs/v2.7/user/references/qos/index.html | 118 +
en/docs/v2.7/user/references/registry/index.html | 11 +
en/docs/v2.7/user/references/registry/index.xml | 281 +
.../user/references/registry/multicast/index.html | 19 +
.../v2.7/user/references/registry/nacos/index.html | 65 +
.../v2.7/user/references/registry/redis/index.html | 15 +
.../user/references/registry/simple/index.html | 31 +
.../user/references/registry/zookeeper/index.html | 39 +
en/docs/v2.7/user/references/telnet/index.html | 14 +
.../references/xml/dubbo-application/index.html | 11 +
.../user/references/xml/dubbo-argument/index.html | 14 +
.../references/xml/dubbo-config-center/index.html | 11 +
.../user/references/xml/dubbo-consumer/index.html | 11 +
.../user/references/xml/dubbo-method/index.html | 14 +
.../user/references/xml/dubbo-module/index.html | 11 +
.../user/references/xml/dubbo-monitor/index.html | 11 +
.../user/references/xml/dubbo-parameter/index.html | 15 +
.../user/references/xml/dubbo-protocol/index.html | 11 +
.../user/references/xml/dubbo-provider/index.html | 11 +
.../user/references/xml/dubbo-reference/index.html | 11 +
.../user/references/xml/dubbo-registry/index.html | 11 +
.../user/references/xml/dubbo-service/index.html | 11 +
en/docs/v2.7/user/references/xml/index.html | 11 +
en/docs/v2.7/user/references/xml/index.xml | 2323 +++
en/docs/v2.7/user/rest/index.html | 387 +
en/docs/v2.7/user/simple-monitor/index.html | 51 +
en/docs/v3.0/index.html | 11 +
en/docs/v3.0/index.xml | 150 +
en/docs/v3.0/languages/erlang/index.html | 11 +
en/docs/v3.0/languages/erlang/index.xml | 118 +
.../v3.0/languages/erlang/quick-start/index.html | 27 +
en/docs/v3.0/languages/erlang/reference/index.html | 19 +
.../v3.0/languages/erlang/serialization/index.html | 15 +
en/docs/v3.0/languages/erlang/service/index.html | 19 +
.../v3.0/languages/golang/go-specific/index.html | 11 +
en/docs/v3.0/languages/golang/index.html | 11 +
en/docs/v3.0/languages/golang/index.xml | 180 +
.../v3.0/languages/golang/quick-start/index.html | 112 +
en/docs/v3.0/languages/index.html | 11 +
en/docs/v3.0/languages/index.xml | 1 +
en/docs/v3.0/languages/rust/index.html | 11 +
en/docs/v3.0/languages/rust/index.xml | 1 +
en/docs/v3.0/loadbalance/index.html | 15 +
en/docs/v3.0/loadbalance/index.xml | 1 +
en/docs/v3.0/references/graalvm/index.html | 11 +
en/docs/v3.0/references/graalvm/index.xml | 125 +
.../references/graalvm/support-graalvm/index.html | 88 +
en/docs/v3.0/references/index.html | 11 +
en/docs/v3.0/references/index.xml | 1 +
en/docs/v3.0/references/lifecycle/brief/index.html | 30 +
en/docs/v3.0/references/lifecycle/index.html | 11 +
en/docs/v3.0/references/lifecycle/index.xml | 140 +
.../v3.0/references/lifecycle/liveness/index.html | 51 +
.../v3.0/references/lifecycle/readiness/index.html | 48 +
.../v3.0/references/lifecycle/startup/index.html | 48 +
en/docs/v3.0/whats-new-in-dubbo3/index.html | 28 +
en/docs/v3.0/whats-new-in-dubbo3/index.xml | 1 +
en/docs3-v2/erlang-sdk/index.html | 11 +
en/docs3-v2/erlang-sdk/index.xml | 1 +
en/docs3-v2/golang-sdk/index.html | 11 +
en/docs3-v2/golang-sdk/index.xml | 5 +
.../golang-sdk/preface/3.0_feature/index.html | 17 +
.../golang-sdk/preface/concept/generic/index.html | 67 +
en/docs3-v2/golang-sdk/preface/concept/index.html | 11 +
en/docs3-v2/golang-sdk/preface/concept/index.xml | 272 +
.../preface/concept/multi_language/index.html | 11 +
.../golang-sdk/preface/concept/protocol/index.html | 54 +
.../golang-sdk/preface/concept/registry/index.html | 11 +
.../preface/design/aop_and_extension/index.html | 52 +
.../preface/design/app_and_interface/index.html | 11 +
.../preface/design/architecture/index.html | 11 +
en/docs3-v2/golang-sdk/preface/design/index.html | 11 +
en/docs3-v2/golang-sdk/preface/design/index.xml | 150 +
en/docs3-v2/golang-sdk/preface/index.html | 11 +
en/docs3-v2/golang-sdk/preface/index.xml | 174 +
en/docs3-v2/golang-sdk/preface/samples/index.html | 51 +
en/docs3-v2/golang-sdk/preface/what/index.html | 11 +
en/docs3-v2/golang-sdk/quickstart/index.html | 11 +
en/docs3-v2/golang-sdk/quickstart/index.xml | 262 +
.../golang-sdk/quickstart/install/index.html | 40 +
.../quickstart/quickstart_triple/index.html | 76 +
.../quickstart_triple_with_customize/index.html | 159 +
.../golang-sdk/refer/basic_concept/index.html | 26 +
.../golang-sdk/refer/compatible_version/index.html | 14 +
en/docs3-v2/golang-sdk/refer/config/index.html | 79 +
en/docs3-v2/golang-sdk/refer/ecology/index.html | 41 +
en/docs3-v2/golang-sdk/refer/index.html | 11 +
en/docs3-v2/golang-sdk/refer/index.xml | 525 +
.../golang-sdk/refer/use_dubbogo_cli/index.html | 208 +
en/docs3-v2/golang-sdk/sourcecode/index.html | 11 +
en/docs3-v2/golang-sdk/sourcecode/index.xml | 54 +
.../golang-sdk/sourcecode/protocol/index.html | 22 +
.../golang-sdk/sourcecode/registry/index.html | 52 +
.../tutorial/debugging/grpc_cli/index.html | 41 +
.../golang-sdk/tutorial/debugging/index.html | 11 +
.../golang-sdk/tutorial/debugging/index.xml | 56 +
.../tutorial/deployment/docker/index.html | 11 +
.../tutorial/deployment/docker/index.xml | 1 +
.../golang-sdk/tutorial/deployment/index.html | 11 +
.../golang-sdk/tutorial/deployment/index.xml | 1 +
.../tutorial/deployment/kubernetes/index.html | 11 +
.../tutorial/deployment/kubernetes/index.xml | 1 +
.../tutorial/deployment/practice/index.html | 11 +
.../tutorial/deployment/practice/index.xml | 1 +
.../config-center/config-center-dynamic/index.html | 120 +
.../tutorial/develop/config-center/desc/index.html | 11 +
.../tutorial/develop/config-center/index.html | 11 +
.../tutorial/develop/config-center/index.xml | 150 +
.../develop/config-center/remote_config/index.html | 34 +
.../develop/features/config_api/index.html | 69 +
.../tutorial/develop/features/context/index.html | 11 +
.../develop/features/custom-logger/index.html | 74 +
.../tutorial/develop/features/generic-2/index.html | 78 +
.../tutorial/develop/features/generic/index.html | 75 +
.../tutorial/develop/features/index.html | 11 +
.../golang-sdk/tutorial/develop/features/index.xml | 298 +
en/docs3-v2/golang-sdk/tutorial/develop/index.html | 11 +
en/docs3-v2/golang-sdk/tutorial/develop/index.xml | 100 +
.../develop/interflow/call_grpc/index.html | 11 +
.../develop/interflow/call_java/index.html | 548 +
.../tutorial/develop/interflow/index.html | 11 +
.../tutorial/develop/interflow/index.xml | 708 +
.../develop/protocol/choose_protocol/index.html | 155 +
.../tutorial/develop/protocol/error/index.html | 96 +
.../develop/protocol/exception_response/index.html | 99 +
.../tutorial/develop/protocol/index.html | 11 +
.../golang-sdk/tutorial/develop/protocol/index.xml | 370 +
.../tutorial/develop/registry/desc/index.html | 11 +
.../tutorial/develop/registry/index.html | 11 +
.../golang-sdk/tutorial/develop/registry/index.xml | 432 +
.../develop/registry/multi_registry/index.html | 87 +
.../tutorial/develop/registry/nacos-2/index.html | 71 +
.../tutorial/develop/registry/nacos/index.html | 95 +
.../tutorial/develop/registry/polaris/index.html | 11 +
.../tutorial/develop/registry/registry/index.html | 88 +
.../develop/registry/service-discovery/index.html | 48 +
.../tutorial/develop/registry/zookeeper/index.html | 11 +
.../tutorial/develop/template/index.html | 50 +
.../tutorial/governance/features/aop/index.html | 50 +
.../governance/features/custom-filter/index.html | 53 +
.../tutorial/governance/features/index.html | 11 +
.../tutorial/governance/features/index.xml | 173 +
.../governance/features/timeout/index.html | 29 +
.../tutorial/governance/health/index.html | 11 +
.../tutorial/governance/health/index.xml | 107 +
.../governance/health/kubernetes/index.html | 11 +
.../governance/health/start-check/index.html | 18 +
.../health/triple-health-check/index.html | 82 +
.../golang-sdk/tutorial/governance/index.html | 11 +
.../golang-sdk/tutorial/governance/index.xml | 1 +
.../governance/limit/adaptive-service/index.html | 7 +
.../tutorial/governance/limit/index.html | 11 +
.../golang-sdk/tutorial/governance/limit/index.xml | 88 +
.../governance/limit/internally/index.html | 11 +
.../tutorial/governance/limit/internally/index.xml | 1 +
.../tutorial/governance/limit/polaris/index.html | 11 +
.../tutorial/governance/limit/polaris/index.xml | 1 +
.../tutorial/governance/limit/sentinel/index.html | 11 +
.../tutorial/governance/limit/sentinel/index.xml | 1 +
.../governance/limit/tps_limiter/index.html | 64 +
.../tutorial/governance/monitor/grafana/index.html | 11 +
.../tutorial/governance/monitor/grafana/index.xml | 1 +
.../tutorial/governance/monitor/http/index.html | 11 +
.../tutorial/governance/monitor/http/index.xml | 1 +
.../tutorial/governance/monitor/index.html | 11 +
.../tutorial/governance/monitor/index.xml | 209 +
.../tutorial/governance/monitor/logger/index.html | 11 +
.../tutorial/governance/monitor/logger/index.xml | 1 +
.../tutorial/governance/monitor/metrics/index.html | 180 +
.../governance/monitor/promethus/index.html | 11 +
.../governance/monitor/promethus/index.xml | 1 +
.../governance/monitor/rpc_metrics/index.html | 37 +
.../governance/service-mesh/deploy/index.html | 194 +
.../tutorial/governance/service-mesh/index.html | 11 +
.../tutorial/governance/service-mesh/index.xml | 750 +
.../governance/service-mesh/istio/index.html | 16 +
.../service-mesh/pixiu/http_triple/index.html | 42 +
.../governance/service-mesh/pixiu/index.html | 11 +
.../governance/service-mesh/pixiu/index.xml | 82 +
.../pixiu/pixiu-nacos-triple/index.html | 45 +
.../service-mesh/proxyless_service_mesh/index.html | 14 +
.../service-mesh/traffic_management/index.html | 213 +
.../tutorial/governance/tracing/index.html | 11 +
.../tutorial/governance/tracing/index.xml | 1 +
.../tutorial/governance/tracing/jaeger/index.html | 11 +
.../tutorial/governance/tracing/jaeger/index.xml | 1 +
.../governance/tracing/opentelmentry/index.html | 11 +
.../governance/tracing/opentelmentry/index.xml | 1 +
.../governance/tracing/skywalking/index.html | 11 +
.../governance/tracing/skywalking/index.xml | 1 +
.../traffic/graceful_shutdown/index.html | 11 +
.../tutorial/governance/traffic/index.html | 11 +
.../tutorial/governance/traffic/index.xml | 115 +
.../governance/traffic/mesh_router/index.html | 88 +
en/docs3-v2/golang-sdk/tutorial/index.html | 11 +
en/docs3-v2/golang-sdk/tutorial/index.xml | 1 +
en/docs3-v2/index.html | 11 +
en/docs3-v2/index.xml | 190 +
.../advanced-features-and-usage/index.html | 11 +
.../java-sdk/advanced-features-and-usage/index.xml | 35 +
.../observability/doc/index.html | 11 +
.../observability/health-information/index.html | 11 +
.../observability/index.html | 12 +
.../observability/index.xml | 479 +
.../observability/kubernetes-probes/index.html | 11 +
.../observability/logging/index.html | 11 +
.../observability/meter/index.html | 396 +
.../observability/tracing/index.html | 11 +
.../others/dubbo-kubernetes-probe/index.html | 29 +
.../others/graceful-shutdown/index.html | 19 +
.../advanced-features-and-usage/others/index.html | 11 +
.../advanced-features-and-usage/others/index.xml | 276 +
.../others/logger-management/index.html | 55 +
.../others/service-container/index.html | 16 +
.../others/set-host/index.html | 18 +
.../performance/concurrency-control/index.html | 25 +
.../performance/config-connections/index.html | 15 +
.../performance/dump/index.html | 25 +
.../performance/index.html | 11 +
.../performance/index.xml | 1145 ++
.../performance/lazy-connect/index.html | 12 +
.../performance/loadbalance/index.html | 35 +
.../performance/profiler/index.html | 140 +
.../performance/reference-config-cache/index.html | 25 +
.../performance/result-cache/index.html | 15 +
.../performance/router-snapshot/index.html | 41 +
.../performance/serialization/index.html | 68 +
.../performance/simplify-registry-data/index.html | 106 +
.../performance/stickiness/index.html | 15 +
.../performance/support-graalvm/index.html | 145 +
.../threading-model/consumer/index.html | 11 +
.../performance/threading-model/index.html | 11 +
.../performance/threading-model/index.xml | 153 +
.../threading-model/provider/index.html | 26 +
.../security/auth/index.html | 14 +
.../security/index.html | 11 +
.../advanced-features-and-usage/security/index.xml | 80 +
.../security/tls/index.html | 28 +
.../security/token-authorization/index.html | 21 +
.../service/accesslog/index.html | 13 +
.../service/async-call/index.html | 87 +
.../service/async-execute-on-provider/index.html | 52 +
.../service/attachment/index.html | 48 +
.../service/callback-parameter/index.html | 86 +
.../service/consistent-hash/index.html | 19 +
.../service/context/index.html | 36 +
.../service/delay-publish/index.html | 15 +
.../service/distributed-transaction/index.html | 11 +
.../service/echo-service/index.html | 21 +
.../service/events-notify/index.html | 58 +
.../service/explicit-target/index.html | 15 +
.../service/fault-tolerent-strategy/index.html | 27 +
.../service/generic-reference/index.html | 240 +
.../service/generic-service/index.html | 36 +
.../service/group-merger/index.html | 25 +
.../advanced-features-and-usage/service/index.html | 11 +
.../advanced-features-and-usage/service/index.xml | 2608 ++++
.../service/isolation-executor/index.html | 192 +
.../service/local-call/index.html | 19 +
.../service/local-mock/index.html | 56 +
.../service/local-stub/index.html | 32 +
.../service/multi-protocols/index.html | 39 +
.../service/multi-registry/index.html | 62 +
.../service/multi-versions/index.html | 16 +
.../service/parameter-validation/index.html | 144 +
.../service/port-unification/index.html | 43 +
.../service/preflight-check/index.html | 20 +
.../service/reactive/index.html | 173 +
.../service/registry-only/index.html | 15 +
.../service/service-downgrade/index.html | 19 +
.../service/service-group/index.html | 90 +
.../service/specify-ip/index.html | 62 +
.../service/streaming/index.html | 11 +
.../service/subscribe-only/index.html | 13 +
.../service/transaction/index.html | 288 +
.../traffic/config-rule/index.html | 100 +
.../advanced-features-and-usage/traffic/index.html | 11 +
.../advanced-features-and-usage/traffic/index.xml | 587 +
.../mesh-style/ab-testing-deployment/index.html | 11 +
.../mesh-style/blue-green-deployment/index.html | 11 +
.../mesh-style/canary-deployment/index.html | 20 +
.../mesh-style/demo-rule-deployment/index.html | 224 +
.../traffic/mesh-style/destination-rule/index.html | 43 +
.../mesh-style/dynamic-rule-deployment/index.html | 79 +
.../traffic/mesh-style/index.html | 210 +
.../traffic/mesh-style/index.xml | 1514 ++
.../traffic/mesh-style/virtualservice/index.html | 251 +
.../mesh-style/weight-rule-deployment/index.html | 48 +
.../traffic/routing-rule/index.html | 65 +
.../code-architecture/index.html | 14 +
.../java-sdk/concepts-and-architecture/index.html | 11 +
.../java-sdk/concepts-and-architecture/index.xml | 407 +
.../concepts-and-architecture/mesh/index.html | 13 +
.../overall-architecture/index.html | 11 +
.../service-discovery/index.html | 28 +
.../service-invocation/index.html | 79 +
.../concepts-and-architecture/triple/index.html | 16 +
en/docs3-v2/java-sdk/faq/0/1/index.html | 16 +
en/docs3-v2/java-sdk/faq/0/10/index.html | 14 +
en/docs3-v2/java-sdk/faq/0/11/index.html | 14 +
en/docs3-v2/java-sdk/faq/0/12/index.html | 17 +
en/docs3-v2/java-sdk/faq/0/13/index.html | 14 +
en/docs3-v2/java-sdk/faq/0/14/index.html | 18 +
en/docs3-v2/java-sdk/faq/0/15/index.html | 11 +
en/docs3-v2/java-sdk/faq/0/16/index.html | 14 +
en/docs3-v2/java-sdk/faq/0/17/index.html | 14 +
en/docs3-v2/java-sdk/faq/0/18/index.html | 14 +
en/docs3-v2/java-sdk/faq/0/19/index.html | 14 +
en/docs3-v2/java-sdk/faq/0/2/index.html | 14 +
en/docs3-v2/java-sdk/faq/0/20/index.html | 12 +
en/docs3-v2/java-sdk/faq/0/21/index.html | 14 +
en/docs3-v2/java-sdk/faq/0/22/index.html | 11 +
en/docs3-v2/java-sdk/faq/0/23/index.html | 11 +
en/docs3-v2/java-sdk/faq/0/24/index.html | 11 +
en/docs3-v2/java-sdk/faq/0/25/index.html | 15 +
en/docs3-v2/java-sdk/faq/0/26/index.html | 14 +
en/docs3-v2/java-sdk/faq/0/27/index.html | 14 +
en/docs3-v2/java-sdk/faq/0/3/index.html | 25 +
en/docs3-v2/java-sdk/faq/0/4/index.html | 20 +
en/docs3-v2/java-sdk/faq/0/5/index.html | 15 +
en/docs3-v2/java-sdk/faq/0/6/index.html | 15 +
en/docs3-v2/java-sdk/faq/0/7/index.html | 11 +
en/docs3-v2/java-sdk/faq/0/8/index.html | 14 +
en/docs3-v2/java-sdk/faq/0/9/index.html | 14 +
en/docs3-v2/java-sdk/faq/0/index.html | 11 +
en/docs3-v2/java-sdk/faq/0/index.xml | 255 +
en/docs3-v2/java-sdk/faq/1/1/index.html | 14 +
en/docs3-v2/java-sdk/faq/1/10/index.html | 15 +
en/docs3-v2/java-sdk/faq/1/11/index.html | 18 +
en/docs3-v2/java-sdk/faq/1/12/index.html | 18 +
en/docs3-v2/java-sdk/faq/1/13/index.html | 11 +
en/docs3-v2/java-sdk/faq/1/14/index.html | 17 +
en/docs3-v2/java-sdk/faq/1/15/index.html | 17 +
en/docs3-v2/java-sdk/faq/1/16/index.html | 17 +
en/docs3-v2/java-sdk/faq/1/17/index.html | 14 +
en/docs3-v2/java-sdk/faq/1/18/index.html | 14 +
en/docs3-v2/java-sdk/faq/1/19/index.html | 11 +
en/docs3-v2/java-sdk/faq/1/20/index.html | 14 +
en/docs3-v2/java-sdk/faq/1/21/index.html | 11 +
en/docs3-v2/java-sdk/faq/1/22/index.html | 14 +
en/docs3-v2/java-sdk/faq/1/23/index.html | 11 +
en/docs3-v2/java-sdk/faq/1/24/index.html | 11 +
en/docs3-v2/java-sdk/faq/1/25/index.html | 15 +
en/docs3-v2/java-sdk/faq/1/26/index.html | 14 +
en/docs3-v2/java-sdk/faq/1/27/index.html | 14 +
en/docs3-v2/java-sdk/faq/1/28/index.html | 14 +
en/docs3-v2/java-sdk/faq/1/29/index.html | 14 +
en/docs3-v2/java-sdk/faq/1/3/index.html | 14 +
en/docs3-v2/java-sdk/faq/1/30/index.html | 11 +
en/docs3-v2/java-sdk/faq/1/31/index.html | 11 +
en/docs3-v2/java-sdk/faq/1/32/index.html | 11 +
en/docs3-v2/java-sdk/faq/1/33/index.html | 11 +
en/docs3-v2/java-sdk/faq/1/34/index.html | 14 +
en/docs3-v2/java-sdk/faq/1/35/index.html | 11 +
en/docs3-v2/java-sdk/faq/1/36/index.html | 11 +
en/docs3-v2/java-sdk/faq/1/37/index.html | 14 +
en/docs3-v2/java-sdk/faq/1/38/index.html | 11 +
en/docs3-v2/java-sdk/faq/1/39/index.html | 11 +
en/docs3-v2/java-sdk/faq/1/4/index.html | 12 +
en/docs3-v2/java-sdk/faq/1/40/index.html | 14 +
en/docs3-v2/java-sdk/faq/1/41/index.html | 14 +
en/docs3-v2/java-sdk/faq/1/5/index.html | 18 +
en/docs3-v2/java-sdk/faq/1/6/index.html | 18 +
en/docs3-v2/java-sdk/faq/1/7/index.html | 12 +
en/docs3-v2/java-sdk/faq/1/8/index.html | 12 +
en/docs3-v2/java-sdk/faq/1/9/index.html | 14 +
en/docs3-v2/java-sdk/faq/1/index.html | 11 +
en/docs3-v2/java-sdk/faq/1/index.xml | 366 +
en/docs3-v2/java-sdk/faq/2/1/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/10/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/11/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/12/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/13/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/14/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/15/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/16/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/17/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/18/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/19/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/2/index.html | 14 +
en/docs3-v2/java-sdk/faq/2/20/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/3/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/4/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/5/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/6/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/7/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/8/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/9/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/index.html | 11 +
en/docs3-v2/java-sdk/faq/2/index.xml | 195 +
en/docs3-v2/java-sdk/faq/3/1/index.html | 17 +
en/docs3-v2/java-sdk/faq/3/2/index.html | 11 +
en/docs3-v2/java-sdk/faq/3/3/index.html | 14 +
en/docs3-v2/java-sdk/faq/3/4/index.html | 11 +
en/docs3-v2/java-sdk/faq/3/5/index.html | 11 +
en/docs3-v2/java-sdk/faq/3/6/index.html | 11 +
en/docs3-v2/java-sdk/faq/3/7/index.html | 14 +
en/docs3-v2/java-sdk/faq/3/8/index.html | 16 +
en/docs3-v2/java-sdk/faq/3/index.html | 11 +
en/docs3-v2/java-sdk/faq/3/index.xml | 93 +
en/docs3-v2/java-sdk/faq/4/1/index.html | 17 +
en/docs3-v2/java-sdk/faq/4/10/index.html | 15 +
en/docs3-v2/java-sdk/faq/4/11/index.html | 11 +
en/docs3-v2/java-sdk/faq/4/12/index.html | 15 +
en/docs3-v2/java-sdk/faq/4/13/index.html | 11 +
en/docs3-v2/java-sdk/faq/4/14/index.html | 11 +
en/docs3-v2/java-sdk/faq/4/15/index.html | 14 +
en/docs3-v2/java-sdk/faq/4/16/index.html | 14 +
en/docs3-v2/java-sdk/faq/4/17/index.html | 15 +
en/docs3-v2/java-sdk/faq/4/18/index.html | 14 +
en/docs3-v2/java-sdk/faq/4/19/index.html | 17 +
en/docs3-v2/java-sdk/faq/4/2/index.html | 14 +
en/docs3-v2/java-sdk/faq/4/20/index.html | 14 +
en/docs3-v2/java-sdk/faq/4/21/index.html | 14 +
en/docs3-v2/java-sdk/faq/4/3/index.html | 14 +
en/docs3-v2/java-sdk/faq/4/4/index.html | 14 +
en/docs3-v2/java-sdk/faq/4/5/index.html | 14 +
en/docs3-v2/java-sdk/faq/4/6/index.html | 14 +
en/docs3-v2/java-sdk/faq/4/7/index.html | 11 +
en/docs3-v2/java-sdk/faq/4/8/index.html | 11 +
en/docs3-v2/java-sdk/faq/4/9/index.html | 14 +
en/docs3-v2/java-sdk/faq/4/index.html | 11 +
en/docs3-v2/java-sdk/faq/4/index.xml | 141 +
en/docs3-v2/java-sdk/faq/5/1/index.html | 11 +
en/docs3-v2/java-sdk/faq/5/10/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/11/index.html | 11 +
en/docs3-v2/java-sdk/faq/5/12/index.html | 11 +
en/docs3-v2/java-sdk/faq/5/13/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/14/index.html | 11 +
en/docs3-v2/java-sdk/faq/5/15/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/16/index.html | 17 +
en/docs3-v2/java-sdk/faq/5/17/index.html | 11 +
en/docs3-v2/java-sdk/faq/5/18/index.html | 11 +
en/docs3-v2/java-sdk/faq/5/19/index.html | 11 +
en/docs3-v2/java-sdk/faq/5/2/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/20/index.html | 11 +
en/docs3-v2/java-sdk/faq/5/21/index.html | 17 +
en/docs3-v2/java-sdk/faq/5/22/index.html | 11 +
en/docs3-v2/java-sdk/faq/5/23/index.html | 17 +
en/docs3-v2/java-sdk/faq/5/24/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/25/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/26/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/27/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/28/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/29/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/3/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/30/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/31/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/32/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/33/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/34/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/35/index.html | 17 +
en/docs3-v2/java-sdk/faq/5/36/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/37/index.html | 17 +
en/docs3-v2/java-sdk/faq/5/38/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/39/index.html | 15 +
en/docs3-v2/java-sdk/faq/5/4/index.html | 11 +
en/docs3-v2/java-sdk/faq/5/40/index.html | 15 +
en/docs3-v2/java-sdk/faq/5/5/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/6/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/7/index.html | 11 +
en/docs3-v2/java-sdk/faq/5/8/index.html | 14 +
en/docs3-v2/java-sdk/faq/5/9/index.html | 11 +
en/docs3-v2/java-sdk/faq/5/index.html | 11 +
en/docs3-v2/java-sdk/faq/5/index.xml | 294 +
en/docs3-v2/java-sdk/faq/6/1/index.html | 17 +
en/docs3-v2/java-sdk/faq/6/10/index.html | 14 +
en/docs3-v2/java-sdk/faq/6/11/index.html | 14 +
en/docs3-v2/java-sdk/faq/6/12/index.html | 15 +
en/docs3-v2/java-sdk/faq/6/13/index.html | 14 +
en/docs3-v2/java-sdk/faq/6/14/index.html | 14 +
en/docs3-v2/java-sdk/faq/6/15/index.html | 14 +
en/docs3-v2/java-sdk/faq/6/16/index.html | 17 +
en/docs3-v2/java-sdk/faq/6/2/index.html | 15 +
en/docs3-v2/java-sdk/faq/6/3/index.html | 17 +
en/docs3-v2/java-sdk/faq/6/4/index.html | 14 +
en/docs3-v2/java-sdk/faq/6/5/index.html | 17 +
en/docs3-v2/java-sdk/faq/6/6/index.html | 17 +
en/docs3-v2/java-sdk/faq/6/7/index.html | 17 +
en/docs3-v2/java-sdk/faq/6/8/index.html | 14 +
en/docs3-v2/java-sdk/faq/6/9/index.html | 12 +
en/docs3-v2/java-sdk/faq/6/index.html | 11 +
en/docs3-v2/java-sdk/faq/6/index.xml | 110 +
en/docs3-v2/java-sdk/faq/7/1/index.html | 14 +
en/docs3-v2/java-sdk/faq/7/2/index.html | 14 +
en/docs3-v2/java-sdk/faq/7/3/index.html | 14 +
en/docs3-v2/java-sdk/faq/7/4/index.html | 14 +
en/docs3-v2/java-sdk/faq/7/5/index.html | 11 +
en/docs3-v2/java-sdk/faq/7/6/index.html | 11 +
en/docs3-v2/java-sdk/faq/7/7/index.html | 15 +
en/docs3-v2/java-sdk/faq/7/index.html | 11 +
en/docs3-v2/java-sdk/faq/7/index.xml | 47 +
en/docs3-v2/java-sdk/faq/99/0/index.html | 17 +
en/docs3-v2/java-sdk/faq/99/1/index.html | 19 +
en/docs3-v2/java-sdk/faq/99/index.html | 11 +
en/docs3-v2/java-sdk/faq/99/index.xml | 21 +
en/docs3-v2/java-sdk/faq/index.html | 11 +
en/docs3-v2/java-sdk/faq/index.xml | 22 +
en/docs3-v2/java-sdk/faq/intro/index.html | 17 +
en/docs3-v2/java-sdk/index.html | 11 +
en/docs3-v2/java-sdk/index.xml | 2 +
en/docs3-v2/java-sdk/quick-start/idl/index.html | 187 +
en/docs3-v2/java-sdk/quick-start/index.html | 11 +
en/docs3-v2/java-sdk/quick-start/index.xml | 351 +
.../java-sdk/quick-start/spring-boot/index.html | 96 +
.../config-center/apollo/index.html | 42 +
.../reference-manual/config-center/index.html | 11 +
.../reference-manual/config-center/index.xml | 200 +
.../config-center/nacos/index.html | 31 +
.../config-center/zookeeper/index.html | 28 +
.../reference-manual/config/annotation/index.html | 126 +
.../reference-manual/config/api/index.html | 256 +
.../java-sdk/reference-manual/config/index.html | 11 +
.../java-sdk/reference-manual/config/index.xml | 4306 ++++++
.../reference-manual/config/overview/index.html | 69 +
.../reference-manual/config/principle/index.html | 168 +
.../reference-manual/config/properties/index.html | 71 +
.../reference-manual/config/xml/index.html | 75 +
.../java-sdk/reference-manual/graalvm/index.html | 133 +
.../java-sdk/reference-manual/graalvm/index.xml | 1 +
en/docs3-v2/java-sdk/reference-manual/index.html | 11 +
en/docs3-v2/java-sdk/reference-manual/index.xml | 189 +
.../reference-manual/metadata-center/index.html | 11 +
.../reference-manual/metadata-center/index.xml | 347 +
.../metadata-center/nacos/index.html | 27 +
.../metadata-center/overview/index.html | 141 +
.../metadata-center/redis/index.html | 11 +
.../metadata-center/zookeeper/index.html | 80 +
.../performance/benchmarking/index.html | 17 +
.../reference-manual/performance/index.html | 11 +
.../reference-manual/performance/index.xml | 67 +
.../performance/rpc-benchmarking/index.html | 19 +
.../reference-manual/protocol/dubbo/index.html | 23 +
.../reference-manual/protocol/grpc/index.html | 15 +
.../reference-manual/protocol/hessian/index.html | 33 +
.../reference-manual/protocol/http/index.html | 31 +
.../java-sdk/reference-manual/protocol/index.html | 11 +
.../java-sdk/reference-manual/protocol/index.xml | 1091 ++
.../reference-manual/protocol/memcached/index.html | 35 +
.../reference-manual/protocol/overview/index.html | 23 +
.../reference-manual/protocol/redis/index.html | 35 +
.../reference-manual/protocol/rest/index.html | 295 +
.../reference-manual/protocol/rmi/index.html | 28 +
.../reference-manual/protocol/thrift/index.html | 28 +
.../protocol/triple/guide/index.html | 203 +
.../protocol/triple/idl/index.html | 189 +
.../reference-manual/protocol/triple/index.html | 11 +
.../reference-manual/protocol/triple/index.xml | 853 ++
.../protocol/triple/migration/index.html | 39 +
.../protocol/triple/overview/index.html | 22 +
.../protocol/triple/pojo/index.html | 143 +
.../protocol/triple/streaming/index.html | 112 +
.../protocol/webservice/index.html | 50 +
.../reference-manual/qos/command/index.html | 31 +
.../java-sdk/reference-manual/qos/index.html | 11 +
.../java-sdk/reference-manual/qos/index.xml | 474 +
.../qos/logger-management/index.html | 52 +
.../reference-manual/qos/overview/index.html | 102 +
.../java-sdk/reference-manual/qos/probe/index.html | 23 +
.../reference-manual/qos/profiler/index.html | 33 +
.../qos/router-snapshot/index.html | 63 +
.../qos/service-management/index.html | 40 +
.../java-sdk/reference-manual/registry/index.html | 11 +
.../java-sdk/reference-manual/registry/index.xml | 636 +
.../reference-manual/registry/multicast/index.html | 20 +
.../reference-manual/registry/multicast/index.xml | 1 +
.../registry/multiple-registry/index.html | 72 +
.../registry/multiple-registry/index.xml | 1 +
.../reference-manual/registry/nacos/index.html | 69 +
.../reference-manual/registry/nacos/index.xml | 1 +
.../reference-manual/registry/overview/index.html | 29 +
.../reference-manual/registry/overview/index.xml | 1 +
.../reference-manual/registry/redis/index.html | 15 +
.../reference-manual/registry/redis/index.xml | 1 +
.../reference-manual/registry/simple/index.html | 31 +
.../reference-manual/registry/zookeeper/index.html | 53 +
.../reference-manual/registry/zookeeper/index.xml | 1 +
.../spi/description/cache/index.html | 60 +
.../spi/description/cluster/index.html | 54 +
.../spi/description/compiler/index.html | 49 +
.../spi/description/config-center/index.html | 18 +
.../spi/description/container/index.html | 48 +
.../spi/description/dispatcher/index.html | 43 +
.../spi/description/dubbo-spi/index.html | 518 +
.../spi/description/exchanger/index.html | 64 +
.../spi/description/exporter-listener/index.html | 56 +
.../spi/description/extension-factory/index.html | 44 +
.../spi/description/filter/index.html | 52 +
.../reference-manual/spi/description/index.html | 11 +
.../reference-manual/spi/description/index.xml | 2331 +++
.../spi/description/invoker-listener/index.html | 55 +
.../spi/description/liveness/index.html | 51 +
.../spi/description/load-balance/index.html | 49 +
.../spi/description/logger-adapter/index.html | 64 +
.../spi/description/merger/index.html | 44 +
.../spi/description/metadata-report/index.html | 60 +
.../spi/description/monitor/index.html | 57 +
.../spi/description/networker/index.html | 46 +
.../spi/description/page/index.html | 46 +
.../spi/description/protocol/index.html | 105 +
.../spi/description/proxy-factory/index.html | 52 +
.../spi/description/qos-permission/index.html | 54 +
.../spi/description/readiness/index.html | 48 +
.../spi/description/registry/index.html | 161 +
.../spi/description/remoting/index.html | 87 +
.../spi/description/router/index.html | 43 +
.../spi/description/serialize/index.html | 46 +
.../spi/description/startup/index.html | 48 +
.../spi/description/status-checker/index.html | 40 +
.../spi/description/telnet-handler/index.html | 47 +
.../spi/description/threadpool/index.html | 44 +
.../spi/description/validation/index.html | 61 +
.../java-sdk/reference-manual/spi/index.html | 11 +
.../java-sdk/reference-manual/spi/index.xml | 65 +
.../reference-manual/spi/overview/index.html | 18 +
.../2.x-to-3.x-compatibility-guide/index.html | 26 +
.../3.0-to-3.1-compatibility-guide/index.html | 11 +
.../3.1-to-3.2-compatibility-guide/index.html | 19 +
.../java-sdk/upgrades-and-compatibility/index.html | 11 +
.../java-sdk/upgrades-and-compatibility/index.xml | 706 +
.../migration-triple/index.html | 165 +
.../protobufinterface/index.html | 38 +
.../serialization-upgrade/index.html | 13 +
.../service-discovery/index.html | 11 +
.../service-discovery/index.xml | 278 +
.../migration-service-discovery/index.html | 29 +
.../service-discovery-rule/index.html | 76 +
.../service-discovery-samples/index.html | 26 +
en/docs3-v2/rust-sdk/index.html | 11 +
en/docs3-v2/rust-sdk/index.xml | 467 +
.../rust-sdk/java-interoperability/index.html | 47 +
en/docs3-v2/rust-sdk/quick-start/index.html | 396 +
en/download/index.html | 9 +
en/download/index.xml | 1 +
en/downloads/index.html | 157 +
en/downloads/index.xml | 1 +
en/facade-docs/contact-/index.html | 9 +
en/facade-docs/contact-/index.xml | 1 +
en/facade-docs/how/index.html | 9 +
en/facade-docs/how/index.xml | 34 +
en/facade-docs/how/quick-start/index.html | 15 +
en/facade-docs/index.html | 9 +
en/facade-docs/index.xml | 1 +
en/facade-docs/what/core-concepts/index.html | 9 +
en/facade-docs/what/ecosystem/index.html | 9 +
en/facade-docs/what/index.html | 9 +
en/facade-docs/what/index.xml | 1 +
en/facade-docs/what/overview/index.html | 9 +
en/facade-docs/why/advantage/index.html | 9 +
en/facade-docs/why/index.html | 9 +
en/facade-docs/why/index.xml | 1 +
en/featured-background.jpg | Bin 0 -> 146971 bytes
...a2_146971_1920x1080_fill_q75_catmullrom_top.jpg | Bin 0 -> 49146 bytes
...9fa2_146971_960x540_fill_q75_catmullrom_top.jpg | Bin 0 -> 15763 bytes
en/golang-sdk/index.html | 7 +
en/golang-sdk/index.xml | 1 +
en/index.html | 10 +
en/index.xml | 6911 +++++++++
en/java-sdk/index.html | 7 +
en/java-sdk/index.xml | 1 +
.../v2.x/advanced-features-and-usage/index.html | 7 +
.../v2.x/advanced-features-and-usage/index.xml | 1 +
.../v2.x/concepts-and-architecture/index.html | 7 +
.../v2.x/concepts-and-architecture/index.xml | 1 +
.../concepts-and-architecture/users/index.html | 7 +
en/java-sdk/v2.x/contributing/index.html | 7 +
en/java-sdk/v2.x/contributing/index.xml | 1 +
en/java-sdk/v2.x/index.html | 7 +
en/java-sdk/v2.x/index.xml | 1 +
en/java-sdk/v2.x/introduction/index.html | 7 +
en/java-sdk/v2.x/introduction/index.xml | 1 +
en/java-sdk/v2.x/introduction/users/index.html | 7 +
en/java-sdk/v2.x/quick-start/index.html | 7 +
en/java-sdk/v2.x/quick-start/index.xml | 2 +
.../v2.x/quick-start/quick-start/index.html | 7 +
en/java-sdk/v2.x/reference-manual/index.html | 7 +
en/java-sdk/v2.x/reference-manual/index.xml | 1 +
.../v2.x/upgrades-and-compatibility/index.html | 7 +
.../v2.x/upgrades-and-compatibility/index.xml | 1 +
.../v3.x/advanced-features-and-usage/index.html | 7 +
.../v3.x/advanced-features-and-usage/index.xml | 1 +
.../v3.x/concepts-and-architecture/index.html | 7 +
.../v3.x/concepts-and-architecture/index.xml | 1 +
.../concepts-and-architecture/users/index.html | 7 +
en/java-sdk/v3.x/contributing/index.html | 7 +
en/java-sdk/v3.x/contributing/index.xml | 1 +
en/java-sdk/v3.x/index.html | 7 +
en/java-sdk/v3.x/index.xml | 1 +
en/java-sdk/v3.x/introduction/index.html | 7 +
en/java-sdk/v3.x/introduction/index.xml | 1 +
en/java-sdk/v3.x/introduction/users/index.html | 7 +
en/java-sdk/v3.x/quick-start/index.html | 7 +
en/java-sdk/v3.x/quick-start/index.xml | 1 +
en/java-sdk/v3.x/reference-manual/index.html | 7 +
en/java-sdk/v3.x/reference-manual/index.xml | 1 +
.../v3.x/upgrades-and-compatibility/index.html | 7 +
.../v3.x/upgrades-and-compatibility/index.xml | 1 +
en/latest/admin/index.html | 7 +
en/latest/admin/index.xml | 1 +
en/latest/community/index.html | 7 +
en/latest/community/index.xml | 1 +
.../committer/apache-dubbo-page_dev/index.html | 46 +
.../contribution-guidelines/committer/index.html | 11 +
.../contribution-guidelines/committer/index.xml | 482 +
.../committer/label-an-issue-guide_dev/index.html | 20 +
.../committer/new-committer-guide_dev/index.html | 31 +
.../committer/release-guide_dev/index.html | 215 +
.../committer/website-guide_dev/index.html | 11 +
.../contributor/become-a-committer_dev/index.html | 26 +
.../contributor/cla-signing-guide_dev/index.html | 14 +
.../dubbo-extension-guide_dev/index.html | 28 +
.../contribution-guidelines/contributor/index.html | 11 +
.../contribution-guidelines/contributor/index.xml | 374 +
.../mailing-list-subscription-guide_dev/index.html | 75 +
.../new-contributor-guide_dev/index.html | 50 +
.../reporting-security-issues_dev/index.html | 23 +
.../software-donation-guide_dev/index.html | 105 +
.../contributor/test-coverage-guide_dev/index.html | 11 +
en/latest/contribution-guidelines/index.html | 18 +
en/latest/contribution-guidelines/index.xml | 1 +
en/latest/download/index.html | 11 +
en/latest/download/index.xml | 1 +
en/latest/facade-docs/contact-/index.html | 11 +
en/latest/facade-docs/contact-/index.xml | 1 +
en/latest/facade-docs/contact/index.html | 11 +
en/latest/facade-docs/contact/index.xml | 1 +
en/latest/facade-docs/how/index.html | 11 +
en/latest/facade-docs/how/index.xml | 34 +
en/latest/facade-docs/how/quick-start/index.html | 14 +
en/latest/facade-docs/index.html | 11 +
en/latest/facade-docs/index.xml | 1 +
.../facade-docs/what/core-concepts/index.html | 11 +
en/latest/facade-docs/what/ecosystem/index.html | 11 +
en/latest/facade-docs/what/index.html | 11 +
en/latest/facade-docs/what/index.xml | 1 +
en/latest/facade-docs/what/overview/index.html | 11 +
en/latest/facade-docs/why/advantage/index.html | 11 +
en/latest/facade-docs/why/index.html | 11 +
en/latest/facade-docs/why/index.xml | 1 +
en/latest/golang-sdk/index.html | 7 +
en/latest/golang-sdk/index.xml | 1 +
en/latest/index.html | 7 +
en/latest/index.xml | 1 +
en/latest/java-sdk/index.html | 7 +
en/latest/java-sdk/index.xml | 1 +
.../v2.x/advanced-features-and-usage/index.html | 7 +
.../v2.x/advanced-features-and-usage/index.xml | 1 +
.../v2.x/concepts-and-architecture/index.html | 7 +
.../v2.x/concepts-and-architecture/index.xml | 1 +
.../concepts-and-architecture/users/index.html | 7 +
en/latest/java-sdk/v2.x/contributing/index.html | 7 +
en/latest/java-sdk/v2.x/contributing/index.xml | 1 +
en/latest/java-sdk/v2.x/index.html | 7 +
en/latest/java-sdk/v2.x/index.xml | 1 +
en/latest/java-sdk/v2.x/introduction/index.html | 7 +
en/latest/java-sdk/v2.x/introduction/index.xml | 1 +
.../java-sdk/v2.x/introduction/users/index.html | 7 +
en/latest/java-sdk/v2.x/quick-start/index.html | 7 +
en/latest/java-sdk/v2.x/quick-start/index.xml | 2 +
.../v2.x/quick-start/quick-start/index.html | 7 +
.../java-sdk/v2.x/reference-manual/index.html | 7 +
en/latest/java-sdk/v2.x/reference-manual/index.xml | 1 +
.../v2.x/upgrades-and-compatibility/index.html | 7 +
.../v2.x/upgrades-and-compatibility/index.xml | 1 +
.../v3.x/advanced-features-and-usage/index.html | 7 +
.../v3.x/advanced-features-and-usage/index.xml | 1 +
.../v3.x/concepts-and-architecture/index.html | 7 +
.../v3.x/concepts-and-architecture/index.xml | 1 +
.../concepts-and-architecture/users/index.html | 7 +
en/latest/java-sdk/v3.x/contributing/index.html | 7 +
en/latest/java-sdk/v3.x/contributing/index.xml | 1 +
en/latest/java-sdk/v3.x/index.html | 7 +
en/latest/java-sdk/v3.x/index.xml | 1 +
en/latest/java-sdk/v3.x/introduction/index.html | 7 +
en/latest/java-sdk/v3.x/introduction/index.xml | 1 +
.../java-sdk/v3.x/introduction/users/index.html | 7 +
en/latest/java-sdk/v3.x/quick-start/index.html | 7 +
en/latest/java-sdk/v3.x/quick-start/index.xml | 1 +
.../java-sdk/v3.x/reference-manual/index.html | 7 +
en/latest/java-sdk/v3.x/reference-manual/index.xml | 1 +
.../v3.x/upgrades-and-compatibility/index.html | 7 +
.../v3.x/upgrades-and-compatibility/index.xml | 1 +
en/latest/notices/index.html | 11 +
en/latest/notices/index.xml | 52 +
en/latest/notices/security/index.html | 29 +
en/latest/pixiu/index.html | 7 +
en/latest/pixiu/index.xml | 1 +
en/notices/index.html | 9 +
en/notices/index.xml | 1 +
en/notices/security/index.html | 27 +
en/overview/index.html | 11 +
en/overview/index.xml | 1 +
en/overview/mannual/index.html | 11 +
en/overview/mannual/index.xml | 1 +
en/overview/quickstart/index.html | 11 +
en/overview/quickstart/index.xml | 1 +
en/overview/tasks/ecosystem/index.html | 11 +
en/overview/tasks/ecosystem/index.xml | 269 +
en/overview/tasks/ecosystem/rate-limit/index.html | 47 +
en/overview/tasks/ecosystem/transaction/index.html | 180 +
en/overview/tasks/index.html | 11 +
en/overview/tasks/index.xml | 311 +
.../tasks/kubernetes/deploy-on-k8s/index.html | 195 +
en/overview/tasks/kubernetes/index.html | 11 +
en/overview/tasks/kubernetes/index.xml | 242 +
en/overview/tasks/mesh/dubbo-mesh/index.html | 138 +
en/overview/tasks/mesh/index.html | 11 +
en/overview/tasks/mesh/index.xml | 386 +
en/overview/tasks/mesh/proxyless/index.html | 118 +
en/overview/tasks/migration/2to3/index.html | 16 +
en/overview/tasks/migration/index.html | 11 +
en/overview/tasks/migration/index.xml | 114 +
.../tasks/migration/migration-triple/index.html | 11 +
.../migration/service-discovery-samples/index.html | 26 +
en/overview/tasks/traffic-management/index.html | 11 +
en/overview/tasks/traffic-management/index.xml | 430 +
.../tasks/traffic-management/isolation/index.html | 34 +
.../tasks/traffic-management/timeout/index.html | 34 +
.../traffic-condition/index.html | 22 +
.../traffic-management/traffic-gray/index.html | 31 +
.../traffic-management/traffic-routing/index.html | 20 +
.../tasks/traffic-management/weight/index.html | 12 +
.../tasks/traffic-management/zone/index.html | 22 +
en/overview/tasks/triple/idl/index.html | 170 +
en/overview/tasks/triple/index.html | 11 +
en/overview/tasks/triple/index.xml | 630 +
en/overview/tasks/triple/streaming/index.html | 224 +
en/overview/tasks/triple/wrap/index.html | 131 +
en/overview/what/architecture/index.html | 18 +
en/overview/what/dubbo3/index.html | 14 +
en/overview/what/ecosystem/index.html | 14 +
en/overview/what/extensibility/index.html | 24 +
en/overview/what/index.html | 11 +
en/overview/what/index.xml | 423 +
en/overview/what/overview/index.html | 14 +
en/pixiu/index.html | 7 +
en/pixiu/index.xml | 1 +
en/release/dubbo-admin/index.html | 19 +
en/release/dubbo-go-pixiu/index.html | 14 +
en/release/dubbo-spi-extensions/index.html | 27 +
en/release/go/index.html | 14 +
en/release/index.html | 11 +
en/release/index.xml | 1 +
en/release/java/index.html | 48 +
en/release/past-releases/dubbo-admin/index.html | 19 +
en/release/past-releases/dubbo-go-pixiu/index.html | 14 +
.../past-releases/dubbo-spi-extensions/index.html | 34 +
en/release/past-releases/go/index.html | 14 +
en/release/past-releases/index.html | 11 +
en/release/past-releases/index.xml | 676 +
en/release/past-releases/java/index.html | 230 +
en/sitemap.xml | 1 +
en/users/index.html | 7 +
en/users/index.xml | 1 +
favicons/android-144x144.png | Bin 0 -> 4299 bytes
favicons/android-192x192.png | Bin 0 -> 5264 bytes
favicons/android-36x36.png | Bin 0 -> 980 bytes
favicons/android-48x48.png | Bin 0 -> 1071 bytes
favicons/android-72x72.png | Bin 0 -> 1926 bytes
favicons/android-96x96.png | Bin 0 -> 2309 bytes
favicons/apple-touch-icon-180x180.png | Bin 0 -> 4866 bytes
favicons/browserconfig.xml | 12 +
favicons/favicon-1024.png | Bin 0 -> 27759 bytes
favicons/favicon-16x16.png | Bin 0 -> 523 bytes
favicons/favicon-256.png | Bin 0 -> 8037 bytes
favicons/favicon-32x32.png | Bin 0 -> 709 bytes
favicons/favicon.ico | Bin 0 -> 16958 bytes
favicons/pwa-192x192.png | Bin 0 -> 5275 bytes
favicons/pwa-512x512.png | Bin 0 -> 12242 bytes
favicons/tile150x150.png | Bin 0 -> 6314 bytes
favicons/tile310x150.png | Bin 0 -> 9482 bytes
favicons/tile310x310.png | Bin 0 -> 13461 bytes
favicons/tile70x70.png | Bin 0 -> 2831 bytes
featured-background.jpg | Bin 0 -> 146971 bytes
...a2_146971_1920x1080_fill_q75_catmullrom_top.jpg | Bin 0 -> 49146 bytes
...9fa2_146971_960x540_fill_q75_catmullrom_top.jpg | Bin 0 -> 15763 bytes
fonts/open-sans-v18-latin-300.eot | Bin 0 -> 15891 bytes
fonts/open-sans-v18-latin-300.svg | 332 +
fonts/open-sans-v18-latin-300.ttf | Bin 0 -> 28208 bytes
fonts/open-sans-v18-latin-300.woff | Bin 0 -> 18668 bytes
fonts/open-sans-v18-latin-300.woff2 | Bin 0 -> 14932 bytes
fonts/open-sans-v18-latin-300italic.eot | Bin 0 -> 14985 bytes
fonts/open-sans-v18-latin-300italic.svg | 345 +
fonts/open-sans-v18-latin-300italic.ttf | Bin 0 -> 25476 bytes
fonts/open-sans-v18-latin-300italic.woff | Bin 0 -> 17668 bytes
fonts/open-sans-v18-latin-300italic.woff2 | Bin 0 -> 13860 bytes
fonts/open-sans-v18-latin-600.eot | Bin 0 -> 15952 bytes
fonts/open-sans-v18-latin-600.svg | 336 +
fonts/open-sans-v18-latin-600.ttf | Bin 0 -> 28100 bytes
fonts/open-sans-v18-latin-600.woff | Bin 0 -> 18696 bytes
fonts/open-sans-v18-latin-600.woff2 | Bin 0 -> 14880 bytes
fonts/open-sans-v18-latin-600italic.eot | Bin 0 -> 14930 bytes
fonts/open-sans-v18-latin-600italic.svg | 349 +
fonts/open-sans-v18-latin-600italic.ttf | Bin 0 -> 25668 bytes
fonts/open-sans-v18-latin-600italic.woff | Bin 0 -> 17492 bytes
fonts/open-sans-v18-latin-600italic.woff2 | Bin 0 -> 13852 bytes
fonts/open-sans-v18-latin-700.eot | Bin 0 -> 16045 bytes
fonts/open-sans-v18-latin-700.svg | 334 +
fonts/open-sans-v18-latin-700.ttf | Bin 0 -> 28848 bytes
fonts/open-sans-v18-latin-700.woff | Bin 0 -> 18900 bytes
fonts/open-sans-v18-latin-700.woff2 | Bin 0 -> 15056 bytes
fonts/open-sans-v18-latin-700italic.eot | Bin 0 -> 14761 bytes
fonts/open-sans-v18-latin-700italic.svg | 342 +
fonts/open-sans-v18-latin-700italic.ttf | Bin 0 -> 25940 bytes
fonts/open-sans-v18-latin-700italic.woff | Bin 0 -> 17452 bytes
fonts/open-sans-v18-latin-700italic.woff2 | Bin 0 -> 13880 bytes
fonts/open-sans-v18-latin-800.eot | Bin 0 -> 16123 bytes
fonts/open-sans-v18-latin-800.svg | 336 +
fonts/open-sans-v18-latin-800.ttf | Bin 0 -> 28820 bytes
fonts/open-sans-v18-latin-800.woff | Bin 0 -> 19072 bytes
fonts/open-sans-v18-latin-800.woff2 | Bin 0 -> 15088 bytes
fonts/open-sans-v18-latin-800italic.eot | Bin 0 -> 15061 bytes
fonts/open-sans-v18-latin-800italic.svg | 342 +
fonts/open-sans-v18-latin-800italic.ttf | Bin 0 -> 26132 bytes
fonts/open-sans-v18-latin-800italic.woff | Bin 0 -> 17788 bytes
fonts/open-sans-v18-latin-800italic.woff2 | Bin 0 -> 13960 bytes
fonts/open-sans-v18-latin-italic.eot | Bin 0 -> 14825 bytes
fonts/open-sans-v18-latin-italic.svg | 349 +
fonts/open-sans-v18-latin-italic.ttf | Bin 0 -> 25664 bytes
fonts/open-sans-v18-latin-italic.woff | Bin 0 -> 17440 bytes
fonts/open-sans-v18-latin-italic.woff2 | Bin 0 -> 13780 bytes
fonts/open-sans-v18-latin-regular.eot | Bin 0 -> 15404 bytes
fonts/open-sans-v18-latin-regular.svg | 336 +
fonts/open-sans-v18-latin-regular.ttf | Bin 0 -> 27088 bytes
fonts/open-sans-v18-latin-regular.woff | Bin 0 -> 18100 bytes
fonts/open-sans-v18-latin-regular.woff2 | Bin 0 -> 14380 bytes
go/v3 | 10 +
imgs/admin/blackList.jpg | Bin 0 -> 99079 bytes
imgs/admin/check.gif | Bin 0 -> 604 bytes
imgs/admin/config.jpg | Bin 0 -> 137909 bytes
imgs/admin/detail.jpg | Bin 0 -> 188392 bytes
imgs/admin/dubbo-add-config.jpg | Bin 0 -> 303596 bytes
imgs/admin/dubbo-add-route.jpg | Bin 0 -> 330146 bytes
imgs/admin/dubbo-applications.png | Bin 0 -> 93036 bytes
imgs/admin/dubbo-consumers.jpg | Bin 0 -> 274307 bytes
imgs/admin/dubbo-monitor-simple.jpg | Bin 0 -> 87670 bytes
imgs/admin/dubbo-providers.jpg | Bin 0 -> 272674 bytes
imgs/admin/dubbo-search.jpg | Bin 0 -> 224751 bytes
imgs/admin/dubbo_docs_en.png | Bin 0 -> 600733 bytes
imgs/admin/dubbo_docs_zh.png | Bin 0 -> 538526 bytes
imgs/admin/pinpoint-calltree.png | Bin 0 -> 655223 bytes
imgs/admin/pinpoint-home.png | Bin 0 -> 303613 bytes
imgs/admin/pinpoint-mixedview.png | Bin 0 -> 434638 bytes
imgs/admin/searchResult.png | Bin 0 -> 168461 bytes
imgs/admin/skywalking-alarm.png | Bin 0 -> 181739 bytes
imgs/admin/skywalking-application.png | Bin 0 -> 229539 bytes
imgs/admin/skywalking-application_instance.png | Bin 0 -> 203651 bytes
imgs/admin/skywalking-dashboard.png | Bin 0 -> 257273 bytes
imgs/admin/skywalking-service-consumer.png | Bin 0 -> 282541 bytes
imgs/admin/skywalking-service-provider.png | Bin 0 -> 366038 bytes
imgs/admin/skywalking-span-Info.png | Bin 0 -> 192403 bytes
imgs/admin/skywalking-topology.png | Bin 0 -> 173667 bytes
imgs/admin/skywalking-trace.png | Bin 0 -> 217096 bytes
imgs/admin/tip.png | Bin 0 -> 876 bytes
imgs/admin/warning-3.gif | Bin 0 -> 569 bytes
imgs/admin/weight.jpg | Bin 0 -> 89265 bytes
imgs/apache_logo.png | Bin 0 -> 7791 bytes
imgs/architecture.png | Bin 0 -> 15546 bytes
.../0c1afe00699eb3e5cc022e48966ef5a6.webp | Bin 0 -> 25884 bytes
.../2b2fd6ea1cc0375392919d9e0c181f2b.webp | Bin 0 -> 21062 bytes
.../e57050f224f658b96cd6bd917050b259.webp | Bin 0 -> 10552 bytes
.../fd38da297d095e4c3af1c89b18804ef1.webp | Bin 0 -> 20284 bytes
imgs/blog/2018/07/27/sentinel/machinediscover.png | Bin 0 -> 175245 bytes
imgs/blog/2018/07/27/sentinel/resourceTree.png | Bin 0 -> 374871 bytes
.../blog/2018/07/27/sentinel/sentine_dashboard.gif | Bin 0 -> 357037 bytes
...436861-1b63bc4e-3e59-4aa3-800e-a32cfe64950d.png | Bin 0 -> 197632 bytes
.../TB18uzTtdcnBKNjSZR0XXcFqFXa-1820-861.png | Bin 0 -> 85077 bytes
.../TB1Kj1ktpkoBKNjSZFEXXbrEVXa-985-213.png | Bin 0 -> 34393 bytes
.../TB1_YywtDCWBKNjSZFtXXaC3FXa-1737-588.png | Bin 0 -> 29496 bytes
.../TB1b1p2trZnBKNjSZFKXXcGOVXa-1858-833.png | Bin 0 -> 74422 bytes
.../TB1fEpEtrorBKNjSZFjXXc_SpXa-1846-783.png | Bin 0 -> 54154 bytes
.../TB1m.tEtrorBKNjSZFjXXc_SpXa-1892-870.png | Bin 0 -> 76799 bytes
.../TB1oYqvtcIrBKNjSZK9XXagoVXa-1872-888.png | Bin 0 -> 60024 bytes
imgs/blog/2019/07/26/rest/micro-image.png | Bin 0 -> 30000 bytes
imgs/blog/2022/12/19/triple/1.jpeg | Bin 0 -> 104002 bytes
imgs/blog/2022/12/19/triple/2.jpeg | Bin 0 -> 67633 bytes
imgs/blog/2022/12/19/triple/3.jpeg | Bin 0 -> 124614 bytes
imgs/blog/2022/12/19/triple/4.jpeg | Bin 0 -> 164495 bytes
imgs/blog/2022/12/19/triple/5.jpeg | Bin 0 -> 133195 bytes
imgs/blog/2022/12/28/triple/1.png | Bin 0 -> 403771 bytes
imgs/blog/2022/12/28/triple/2.png | Bin 0 -> 1058411 bytes
imgs/blog/2022/12/28/triple/3.png | Bin 0 -> 711198 bytes
imgs/blog/2022/12/28/triple/4.png | Bin 0 -> 119297 bytes
imgs/blog/2022/12/28/triple/5.png | Bin 0 -> 179812 bytes
imgs/blog/2022/12/28/triple/6.png | Bin 0 -> 611762 bytes
imgs/blog/2022/12/28/triple/7.png | Bin 0 -> 1329508 bytes
imgs/blog/2022/12/28/triple/8.png | Bin 0 -> 492419 bytes
imgs/blog/2022/12/28/triple/9.png | Bin 0 -> 1140060 bytes
imgs/blog/20220905/1.png | Bin 0 -> 34388 bytes
imgs/blog/20220905/10.png | Bin 0 -> 1108633 bytes
imgs/blog/20220905/11.png | Bin 0 -> 566754 bytes
imgs/blog/20220905/12.png | Bin 0 -> 89318 bytes
imgs/blog/20220905/13.png | Bin 0 -> 145406 bytes
imgs/blog/20220905/14.png | Bin 0 -> 81509 bytes
imgs/blog/20220905/15.png | Bin 0 -> 472566 bytes
imgs/blog/20220905/16.png | Bin 0 -> 120071 bytes
imgs/blog/20220905/2.png | Bin 0 -> 87302 bytes
imgs/blog/20220905/3.png | Bin 0 -> 194550 bytes
imgs/blog/20220905/4.png | Bin 0 -> 167678 bytes
imgs/blog/20220905/5.png | Bin 0 -> 365506 bytes
imgs/blog/20220905/6.png | Bin 0 -> 628539 bytes
imgs/blog/20220905/7.png | Bin 0 -> 256759 bytes
imgs/blog/20220905/8.png | Bin 0 -> 218552 bytes
imgs/blog/20220905/9.png | Bin 0 -> 1016168 bytes
imgs/blog/270/branches.png | Bin 0 -> 152851 bytes
imgs/blog/270/invokes.png | Bin 0 -> 919242 bytes
imgs/blog/270/metadata.png | Bin 0 -> 1421983 bytes
imgs/blog/270/tag-route-config.png | Bin 0 -> 1018947 bytes
imgs/blog/270/tag-route.png | Bin 0 -> 1038490 bytes
imgs/blog/Dingtalk_20220724021635.jpg | Bin 0 -> 128307 bytes
imgs/blog/admin/appConfig.jpg | Bin 0 -> 158875 bytes
imgs/blog/admin/complex.jpg | Bin 0 -> 231075 bytes
imgs/blog/admin/conditionRoute.jpg | Bin 0 -> 143372 bytes
imgs/blog/admin/config.jpg | Bin 0 -> 159676 bytes
imgs/blog/admin/metadata.jpg | Bin 0 -> 220394 bytes
imgs/blog/admin/metadata.png | Bin 0 -> 96953 bytes
imgs/blog/admin/route.jpg | Bin 0 -> 176274 bytes
imgs/blog/admin/test.jpg | Bin 0 -> 125324 bytes
imgs/blog/admin/testFail.jpg | Bin 0 -> 226347 bytes
imgs/blog/admin/testSearch.jpg | Bin 0 -> 91983 bytes
imgs/blog/admin/testSuccess.jpg | Bin 0 -> 184130 bytes
imgs/blog/admin/weight.jpg | Bin 0 -> 118044 bytes
imgs/blog/apachecon-na-2018.png | Bin 0 -> 313613 bytes
imgs/blog/api-docs/quickStart.png | Bin 0 -> 212678 bytes
imgs/blog/apisix-plugin/1.png | Bin 0 -> 158828 bytes
imgs/blog/cluster-lb.png | Bin 0 -> 365249 bytes
imgs/blog/community-distribution.png | Bin 0 -> 109956 bytes
imgs/blog/community-github.png | Bin 0 -> 404265 bytes
imgs/blog/community-meetup.png | Bin 0 -> 102115 bytes
imgs/blog/config.png | Bin 0 -> 116251 bytes
imgs/blog/configuration.jpg | Bin 0 -> 225798 bytes
.../consistent-hash-balance-model.jpg | Bin 0 -> 29205 bytes
.../consistent-hash-delete-node-model.jpg | Bin 0 -> 32314 bytes
.../consistenthash/consistent-hash-init-model.jpg | Bin 0 -> 29515 bytes
.../consistent-hash-new-node-model.jpg | Bin 0 -> 35015 bytes
.../consistent-hash-request-model.jpg | Bin 0 -> 34165 bytes
.../consistent-hash-virtual-node-model.jpg | Bin 0 -> 33019 bytes
imgs/blog/consumer-threadpool0.png | Bin 0 -> 314209 bytes
imgs/blog/consumer-threadpool1.png | Bin 0 -> 421182 bytes
imgs/blog/dockerhub-build-rules.png | Bin 0 -> 154981 bytes
imgs/blog/dubbo-architecture.png | Bin 0 -> 18996 bytes
imgs/blog/dubbo-async.svg | 1 +
imgs/blog/dubbo-beijing-meetup.png | Bin 0 -> 239313 bytes
imgs/blog/dubbo-chengdu-meetup-img.jpg | Bin 0 -> 2553076 bytes
imgs/blog/dubbo-chengdu-meetup.jpg | Bin 0 -> 337310 bytes
imgs/blog/dubbo-directly.jpg | Bin 0 -> 38922 bytes
imgs/blog/dubbo-extensionfactory.png | Bin 0 -> 52802 bytes
imgs/blog/dubbo-go/1.4/acl.png | Bin 0 -> 61310 bytes
imgs/blog/dubbo-go/1.4/config-center.png | Bin 0 -> 26009 bytes
imgs/blog/dubbo-go/1.4/context.png | Bin 0 -> 4942 bytes
imgs/blog/dubbo-go/1.4/k8s.png | Bin 0 -> 93011 bytes
imgs/blog/dubbo-go/1.4/rest.png | Bin 0 -> 34214 bytes
imgs/blog/dubbo-go/1.5/loadbalance.png | Bin 0 -> 101387 bytes
imgs/blog/dubbo-go/1.5/multi-registry.png | Bin 0 -> 117029 bytes
imgs/blog/dubbo-go/1.5/router.png | Bin 0 -> 38412 bytes
imgs/blog/dubbo-go/10years/dubbo-go-events.png | Bin 0 -> 31244 bytes
imgs/blog/dubbo-go/10years/dubbo-home.png | Bin 0 -> 137307 bytes
imgs/blog/dubbo-go/10years/dubbo-layer.png | Bin 0 -> 307669 bytes
imgs/blog/dubbo-go/10years/dubbo-triangle.png | Bin 0 -> 99864 bytes
imgs/blog/dubbo-go/1year/dubbo-go-arch.png | Bin 0 -> 223790 bytes
imgs/blog/dubbo-go/1year/dubbo-go-events.png | Bin 0 -> 60161 bytes
imgs/blog/dubbo-go/1year/dubbo-go-k8s.png | Bin 0 -> 152564 bytes
imgs/blog/dubbo-go/1year/dubbo-go-observe.png | Bin 0 -> 50269 bytes
imgs/blog/dubbo-go/1year/dubbo-go-rest.png | Bin 0 -> 57960 bytes
imgs/blog/dubbo-go/3.0-plan/p1.webp | Bin 0 -> 55426 bytes
imgs/blog/dubbo-go/3.0-plan/p2.webp | Bin 0 -> 26698 bytes
imgs/blog/dubbo-go/3.0-plan/p3.webp | Bin 0 -> 45754 bytes
imgs/blog/dubbo-go/3.0-plan/p4.webp | Bin 0 -> 26536 bytes
imgs/blog/dubbo-go/3.0-plan/p5.webp | Bin 0 -> 55550 bytes
imgs/blog/dubbo-go/3.0-plan/p6.webp | Bin 0 -> 6544 bytes
imgs/blog/dubbo-go/3.0-plan/p7.webp | Bin 0 -> 10782 bytes
.../dubbo-go/app-registry/app-registry-model.png | Bin 0 -> 1681951 bytes
.../app-registry/local-metadata-service.png | Bin 0 -> 1699844 bytes
imgs/blog/dubbo-go/app-registry/provideby.png | Bin 0 -> 163966 bytes
imgs/blog/dubbo-go/app-registry/registry-info.png | Bin 0 -> 55713 bytes
imgs/blog/dubbo-go/busy-idle-time-window.png | Bin 0 -> 32701 bytes
imgs/blog/dubbo-go/code1/p1.png | Bin 0 -> 17895 bytes
imgs/blog/dubbo-go/code1/p10.png | Bin 0 -> 51680 bytes
imgs/blog/dubbo-go/code1/p11.png | Bin 0 -> 5668 bytes
imgs/blog/dubbo-go/code1/p12.png | Bin 0 -> 29844 bytes
imgs/blog/dubbo-go/code1/p13.png | Bin 0 -> 18246 bytes
imgs/blog/dubbo-go/code1/p14.png | Bin 0 -> 9163 bytes
imgs/blog/dubbo-go/code1/p15.png | Bin 0 -> 8263 bytes
imgs/blog/dubbo-go/code1/p16.png | Bin 0 -> 31474 bytes
imgs/blog/dubbo-go/code1/p17.png | Bin 0 -> 13336 bytes
imgs/blog/dubbo-go/code1/p18.png | Bin 0 -> 54579 bytes
imgs/blog/dubbo-go/code1/p19.png | Bin 0 -> 51892 bytes
imgs/blog/dubbo-go/code1/p2.png | Bin 0 -> 954481 bytes
imgs/blog/dubbo-go/code1/p20.png | Bin 0 -> 19454 bytes
imgs/blog/dubbo-go/code1/p21.png | Bin 0 -> 35821 bytes
imgs/blog/dubbo-go/code1/p22.png | Bin 0 -> 52245 bytes
imgs/blog/dubbo-go/code1/p23.png | Bin 0 -> 17475 bytes
imgs/blog/dubbo-go/code1/p24.png | Bin 0 -> 14073 bytes
imgs/blog/dubbo-go/code1/p25.png | Bin 0 -> 3549 bytes
imgs/blog/dubbo-go/code1/p26.png | Bin 0 -> 2727 bytes
imgs/blog/dubbo-go/code1/p27.png | Bin 0 -> 4354 bytes
imgs/blog/dubbo-go/code1/p28.png | Bin 0 -> 2188 bytes
imgs/blog/dubbo-go/code1/p29.png | Bin 0 -> 21657 bytes
imgs/blog/dubbo-go/code1/p3.png | Bin 0 -> 93754 bytes
imgs/blog/dubbo-go/code1/p4.png | Bin 0 -> 52318 bytes
imgs/blog/dubbo-go/code1/p5.png | Bin 0 -> 6893 bytes
imgs/blog/dubbo-go/code1/p6.png | Bin 0 -> 36214 bytes
imgs/blog/dubbo-go/code1/p7.png | Bin 0 -> 7640 bytes
imgs/blog/dubbo-go/code1/p8.png | Bin 0 -> 15488 bytes
imgs/blog/dubbo-go/code1/p9.png | Bin 0 -> 56351 bytes
imgs/blog/dubbo-go/code2/p1.png | Bin 0 -> 155856 bytes
imgs/blog/dubbo-go/code2/p2.png | Bin 0 -> 106127 bytes
imgs/blog/dubbo-go/code2/p3.png | Bin 0 -> 35147 bytes
imgs/blog/dubbo-go/code2/p4.png | Bin 0 -> 110362 bytes
imgs/blog/dubbo-go/code2/p5.png | Bin 0 -> 82163 bytes
imgs/blog/dubbo-go/code2/p6.png | Bin 0 -> 22061 bytes
imgs/blog/dubbo-go/code2/p7.png | Bin 0 -> 24077 bytes
imgs/blog/dubbo-go/code2/p8.png | Bin 0 -> 4754 bytes
imgs/blog/dubbo-go/code2/p9.png | Bin 0 -> 141104 bytes
.../dubbo-go/config-center/config-center-class.jpg | Bin 0 -> 60991 bytes
imgs/blog/dubbo-go/config-center/design.png | Bin 0 -> 45181 bytes
imgs/blog/dubbo-go/config-center/key-struct.png | Bin 0 -> 34451 bytes
.../dubbo-go/config-center/zookeeper-usercase.png | Bin 0 -> 81623 bytes
imgs/blog/dubbo-go/connected_udp_socket.gif | Bin 0 -> 13891 bytes
imgs/blog/dubbo-go/dns_udp.gif | Bin 0 -> 12163 bytes
imgs/blog/dubbo-go/dubbo-go-arch-2.png | Bin 0 -> 215602 bytes
imgs/blog/dubbo-go/dubbo-go-arch.png | Bin 0 -> 382889 bytes
imgs/blog/dubbo-go/dubbo-go-curcuit-breaker.png | Bin 0 -> 211776 bytes
imgs/blog/dubbo-go/dubbo-go-generic-invoke.png | Bin 0 -> 125011 bytes
imgs/blog/dubbo-go/dubbo-go-getty.png | Bin 0 -> 215275 bytes
imgs/blog/dubbo-go/dubbo-go-hessian2.png | Bin 0 -> 254016 bytes
imgs/blog/dubbo-go/dubbo-go-history.png | Bin 0 -> 164989 bytes
imgs/blog/dubbo-go/dubbo-go-logo.jpg | Bin 0 -> 142510 bytes
imgs/blog/dubbo-go/dubbo-go-roadmap-2019.png | Bin 0 -> 118244 bytes
imgs/blog/dubbo-go/dubbo-roadmap-2019.jpg | Bin 0 -> 192191 bytes
imgs/blog/dubbo-go/dubbo-tlp-twitter.jpg | Bin 0 -> 299090 bytes
imgs/blog/dubbo-go/fixed-window.png | Bin 0 -> 4427 bytes
imgs/blog/dubbo-go/from-scratch/dfsa01.jpg | Bin 0 -> 212105 bytes
imgs/blog/dubbo-go/from-scratch/dfsa02.png | Bin 0 -> 1159711 bytes
imgs/blog/dubbo-go/go-consumer.png | Bin 0 -> 256195 bytes
imgs/blog/dubbo-go/go-provider.png | Bin 0 -> 191597 bytes
imgs/blog/dubbo-go/gochina/p1.jpeg | Bin 0 -> 71685 bytes
imgs/blog/dubbo-go/gochina/p10.jpeg | Bin 0 -> 35856 bytes
imgs/blog/dubbo-go/gochina/p11.jpeg | Bin 0 -> 38227 bytes
imgs/blog/dubbo-go/gochina/p12.jpeg | Bin 0 -> 106324 bytes
imgs/blog/dubbo-go/gochina/p13.jpeg | Bin 0 -> 65722 bytes
imgs/blog/dubbo-go/gochina/p14.jpeg | Bin 0 -> 32546 bytes
imgs/blog/dubbo-go/gochina/p15.png | Bin 0 -> 44705 bytes
imgs/blog/dubbo-go/gochina/p16.png | Bin 0 -> 56672 bytes
imgs/blog/dubbo-go/gochina/p17.jpeg | Bin 0 -> 62079 bytes
imgs/blog/dubbo-go/gochina/p18.jpeg | Bin 0 -> 56417 bytes
imgs/blog/dubbo-go/gochina/p19.jpeg | Bin 0 -> 56519 bytes
imgs/blog/dubbo-go/gochina/p2.jpeg | Bin 0 -> 96715 bytes
imgs/blog/dubbo-go/gochina/p20.png | Bin 0 -> 10486 bytes
imgs/blog/dubbo-go/gochina/p21.png | Bin 0 -> 42361 bytes
imgs/blog/dubbo-go/gochina/p22.jpeg | Bin 0 -> 65540 bytes
imgs/blog/dubbo-go/gochina/p23.jpeg | Bin 0 -> 43403 bytes
imgs/blog/dubbo-go/gochina/p24.png | Bin 0 -> 26224 bytes
imgs/blog/dubbo-go/gochina/p25.jpeg | Bin 0 -> 42221 bytes
imgs/blog/dubbo-go/gochina/p26.jpeg | Bin 0 -> 73354 bytes
imgs/blog/dubbo-go/gochina/p3.jpeg | Bin 0 -> 37017 bytes
imgs/blog/dubbo-go/gochina/p4.jpeg | Bin 0 -> 40387 bytes
imgs/blog/dubbo-go/gochina/p5.jpeg | Bin 0 -> 46654 bytes
imgs/blog/dubbo-go/gochina/p6.jpeg | Bin 0 -> 34476 bytes
imgs/blog/dubbo-go/gochina/p7.jpeg | Bin 0 -> 36259 bytes
imgs/blog/dubbo-go/gochina/p8.jpeg | Bin 0 -> 76746 bytes
imgs/blog/dubbo-go/gochina/p9.jpeg | Bin 0 -> 69688 bytes
imgs/blog/dubbo-go/grpc/p1.webp | Bin 0 -> 19842 bytes
imgs/blog/dubbo-go/grpc/p10.webp | Bin 0 -> 20884 bytes
imgs/blog/dubbo-go/grpc/p11.webp | Bin 0 -> 19354 bytes
imgs/blog/dubbo-go/grpc/p12.webp | Bin 0 -> 2830 bytes
imgs/blog/dubbo-go/grpc/p13.webp | Bin 0 -> 8902 bytes
imgs/blog/dubbo-go/grpc/p14.webp | Bin 0 -> 22198 bytes
imgs/blog/dubbo-go/grpc/p2.webp | Bin 0 -> 14630 bytes
imgs/blog/dubbo-go/grpc/p3.webp | Bin 0 -> 22224 bytes
imgs/blog/dubbo-go/grpc/p4.webp | Bin 0 -> 13066 bytes
imgs/blog/dubbo-go/grpc/p5.webp | Bin 0 -> 25834 bytes
imgs/blog/dubbo-go/grpc/p6.webp | Bin 0 -> 12158 bytes
imgs/blog/dubbo-go/grpc/p7.webp | Bin 0 -> 11720 bytes
imgs/blog/dubbo-go/grpc/p8.webp | Bin 0 -> 27484 bytes
imgs/blog/dubbo-go/grpc/p9.webp | Bin 0 -> 6666 bytes
imgs/blog/dubbo-go/hessian/p1.png | Bin 0 -> 106511 bytes
imgs/blog/dubbo-go/hessian/p2.png | Bin 0 -> 107399 bytes
imgs/blog/dubbo-go/hessian/p3.png | Bin 0 -> 68234 bytes
imgs/blog/dubbo-go/hessian/p4.png | Bin 0 -> 49751 bytes
imgs/blog/dubbo-go/hessian/p5.png | Bin 0 -> 59008 bytes
imgs/blog/dubbo-go/hessian/p6.png | Bin 0 -> 43664 bytes
imgs/blog/dubbo-go/hessian/p7.png | Bin 0 -> 108335 bytes
imgs/blog/dubbo-go/hessian/p8.png | Bin 0 -> 74500 bytes
imgs/blog/dubbo-go/java-go-interop.png | Bin 0 -> 164979 bytes
imgs/blog/dubbo-go/java-provider.png | Bin 0 -> 164952 bytes
imgs/blog/dubbo-go/k8s/design.png | Bin 0 -> 169153 bytes
imgs/blog/dubbo-go/k8s/dubbo-service-discovery.png | Bin 0 -> 24839 bytes
imgs/blog/dubbo-go/k8s/k8s-service-discovery.png | Bin 0 -> 86770 bytes
imgs/blog/dubbo-go/metrics/p1.png | Bin 0 -> 15034 bytes
imgs/blog/dubbo-go/metrics/p10.webp | Bin 0 -> 33662 bytes
imgs/blog/dubbo-go/metrics/p11.webp | Bin 0 -> 10544 bytes
imgs/blog/dubbo-go/metrics/p12.webp | Bin 0 -> 18466 bytes
imgs/blog/dubbo-go/metrics/p2.webp | Bin 0 -> 7708 bytes
imgs/blog/dubbo-go/metrics/p3.webp | Bin 0 -> 35842 bytes
imgs/blog/dubbo-go/metrics/p4.webp | Bin 0 -> 8384 bytes
imgs/blog/dubbo-go/metrics/p5.webp | Bin 0 -> 10720 bytes
imgs/blog/dubbo-go/metrics/p6.webp | Bin 0 -> 6138 bytes
imgs/blog/dubbo-go/metrics/p7.webp | Bin 0 -> 16428 bytes
imgs/blog/dubbo-go/metrics/p8.webp | Bin 0 -> 6248 bytes
imgs/blog/dubbo-go/metrics/p9.webp | Bin 0 -> 12390 bytes
imgs/blog/dubbo-go/moson-optimize/p1.png | Bin 0 -> 241057 bytes
imgs/blog/dubbo-go/moson-optimize/p2.png | Bin 0 -> 261944 bytes
imgs/blog/dubbo-go/moson-optimize/p3.png | Bin 0 -> 324576 bytes
imgs/blog/dubbo-go/moson-optimize/p4.png | Bin 0 -> 331591 bytes
imgs/blog/dubbo-go/nacos/p1.png | Bin 0 -> 231313 bytes
imgs/blog/dubbo-go/nacos/p2.png | Bin 0 -> 141605 bytes
imgs/blog/dubbo-go/nacos/p3.png | Bin 0 -> 176504 bytes
imgs/blog/dubbo-go/nacos/p4.png | Bin 0 -> 238958 bytes
imgs/blog/dubbo-go/nacos/p5.png | Bin 0 -> 513996 bytes
imgs/blog/dubbo-go/nacos/p6.png | Bin 0 -> 116991 bytes
imgs/blog/dubbo-go/nacos/p7.png | Bin 0 -> 263186 bytes
imgs/blog/dubbo-go/nacos/p8.png | Bin 0 -> 153733 bytes
imgs/blog/dubbo-go/nacos/p9.png | Bin 0 -> 250554 bytes
imgs/blog/dubbo-go/quickstart/admin.png | Bin 0 -> 152668 bytes
imgs/blog/dubbo-go/quickstart/console.png | Bin 0 -> 193529 bytes
imgs/blog/dubbo-go/rest/rest-call-process.webp | Bin 0 -> 29178 bytes
imgs/blog/dubbo-go/rest/rest-call.webp | Bin 0 -> 9604 bytes
imgs/blog/dubbo-go/router/dubbo-admin-1.png | Bin 0 -> 73321 bytes
imgs/blog/dubbo-go/router/dubbo-admin-2.png | Bin 0 -> 85105 bytes
imgs/blog/dubbo-go/router/router-design.png | Bin 0 -> 39519 bytes
imgs/blog/dubbo-go/seata/p1.webp | Bin 0 -> 32696 bytes
imgs/blog/dubbo-go/seata/p2.webp | Bin 0 -> 12302 bytes
imgs/blog/dubbo-go/seata/p3.webp | Bin 0 -> 28034 bytes
.../sentinel/dubbo-go-sentinel-provider-filter.png | Bin 0 -> 298046 bytes
imgs/blog/dubbo-go/sentinel/sentinel-golang.png | Bin 0 -> 29177 bytes
imgs/blog/dubbo-go/sliding-window.png | Bin 0 -> 5433 bytes
imgs/blog/dubbo-go/tps-limit-filter.png | Bin 0 -> 64912 bytes
imgs/blog/dubbo-go/tps-limiter.png | Bin 0 -> 30601 bytes
imgs/blog/dubbo-go/trusted-call/process.png | Bin 0 -> 35864 bytes
imgs/blog/dubbo-go/tuya/p1.png | Bin 0 -> 235005 bytes
imgs/blog/dubbo-go/tuya/p2.png | Bin 0 -> 109080 bytes
imgs/blog/dubbo-go/tuya/p3.png | Bin 0 -> 132109 bytes
imgs/blog/dubbo-graalvm-support/compile_result.png | Bin 0 -> 115732 bytes
.../dubbo-graalvm-support/consumer_compiler.png | Bin 0 -> 151386 bytes
imgs/blog/dubbo-graalvm-support/demo_path.png | Bin 0 -> 227266 bytes
imgs/blog/dubbo-graalvm-support/graalvm.png | Bin 0 -> 187363 bytes
imgs/blog/dubbo-graalvm-support/graalvm_env.png | Bin 0 -> 52205 bytes
.../dubbo-graalvm-support/provider_compiler.png | Bin 0 -> 137152 bytes
imgs/blog/dubbo-hangzhou-meetup.jpg | Bin 0 -> 321249 bytes
imgs/blog/dubbo-in-zk.jpg | Bin 0 -> 31272 bytes
imgs/blog/dubbo-initializr.png | Bin 0 -> 90475 bytes
imgs/blog/dubbo-local-call-filter.png | Bin 0 -> 29167 bytes
imgs/blog/dubbo-meetup-shenzhen-haibao.jpg | Bin 0 -> 350625 bytes
imgs/blog/dubbo-metadata-nacos-1.png | Bin 0 -> 85630 bytes
imgs/blog/dubbo-metadata-nacos-2.png | Bin 0 -> 96425 bytes
imgs/blog/dubbo-metadata-nacos-3.png | Bin 0 -> 48771 bytes
imgs/blog/dubbo-metadata-nacos-4.png | Bin 0 -> 31729 bytes
imgs/blog/dubbo-mock-stub-flow.png | Bin 0 -> 20020 bytes
imgs/blog/dubbo-protocol.png | Bin 0 -> 3102 bytes
imgs/blog/dubbo-registry-nacos-1.png | Bin 0 -> 188399 bytes
imgs/blog/dubbo-registry-nacos-10.png | Bin 0 -> 110645 bytes
imgs/blog/dubbo-registry-nacos-11.png | Bin 0 -> 118722 bytes
imgs/blog/dubbo-registry-nacos-2.png | Bin 0 -> 299453 bytes
imgs/blog/dubbo-registry-nacos-3.png | Bin 0 -> 229934 bytes
imgs/blog/dubbo-registry-nacos-4.png | Bin 0 -> 28984 bytes
imgs/blog/dubbo-registry-nacos-5.png | Bin 0 -> 28984 bytes
imgs/blog/dubbo-registry-nacos-6.png | Bin 0 -> 66583 bytes
imgs/blog/dubbo-registry-nacos-7.png | Bin 0 -> 110645 bytes
imgs/blog/dubbo-registry-nacos-8.png | Bin 0 -> 118722 bytes
imgs/blog/dubbo-registry-nacos-9.png | Bin 0 -> 66583 bytes
imgs/blog/dubbo-screen.png | Bin 0 -> 355637 bytes
imgs/blog/dubbo-screen2.png | Bin 0 -> 353965 bytes
imgs/blog/dubbo-servicenamemapping.png | Bin 0 -> 38226 bytes
imgs/blog/dubbo-shanghai-meetup.jpeg | Bin 0 -> 98642 bytes
imgs/blog/dubbo-shenzhen-meetup.jpg | Bin 0 -> 60403 bytes
.../dubbo3.0-graalvm-support/code_generator.jpg | Bin 0 -> 231917 bytes
imgs/blog/dubbo3.0-graalvm-support/graalvm_env.jpg | Bin 0 -> 54952 bytes
imgs/blog/dubbo3.0-graalvm-support/graalvmgw.jpg | Bin 0 -> 301691 bytes
.../native_image_build.jpg | Bin 0 -> 299922 bytes
imgs/blog/dubbo3.0-graalvm-support/resources.jpg | Bin 0 -> 53661 bytes
.../blog/dubbo3.0-graalvm-support/run_consumer.jpg | Bin 0 -> 30345 bytes
.../blog/dubbo3.0-graalvm-support/run_provider.jpg | Bin 0 -> 132846 bytes
imgs/blog/dubbo_loadbalance.png | Bin 0 -> 23567 bytes
imgs/blog/dubboasyn_client/1.png | Bin 0 -> 14982 bytes
imgs/blog/dubboasyn_client/1_en.png | Bin 0 -> 17755 bytes
imgs/blog/dubboasyn_server/1.png | Bin 0 -> 9186 bytes
imgs/blog/dubboasyn_server/2.png | Bin 0 -> 10052 bytes
imgs/blog/dubboasyn_server/3.png | Bin 0 -> 15434 bytes
imgs/blog/dubboasyn_server/4.png | Bin 0 -> 13064 bytes
imgs/blog/dubbomesh/1.png | Bin 0 -> 83915 bytes
imgs/blog/dubbomesh/10.png | Bin 0 -> 3913297 bytes
imgs/blog/dubbomesh/2.png | Bin 0 -> 166343 bytes
imgs/blog/dubbomesh/3.png | Bin 0 -> 186170 bytes
imgs/blog/dubbomesh/4.png | Bin 0 -> 110794 bytes
imgs/blog/dubbomesh/5.png | Bin 0 -> 137633 bytes
imgs/blog/dubbomesh/6.png | Bin 0 -> 416234 bytes
imgs/blog/dubbomesh/7.png | Bin 0 -> 193122 bytes
imgs/blog/dubbomesh/8.png | Bin 0 -> 167321 bytes
imgs/blog/dubbomesh/9.png | Bin 0 -> 305526 bytes
imgs/blog/en_pinpoint-calltree.png | Bin 0 -> 655223 bytes
imgs/blog/en_pinpoint-home.png | Bin 0 -> 303613 bytes
imgs/blog/en_pinpoint-mixedview.png | Bin 0 -> 434638 bytes
imgs/blog/fescar/fescar-1.png | Bin 0 -> 101828 bytes
imgs/blog/fescar/fescar-2.png | Bin 0 -> 324922 bytes
imgs/blog/filter.png | Bin 0 -> 295098 bytes
imgs/blog/grpc/compiler-classes.png | Bin 0 -> 76594 bytes
imgs/blog/grpc/compiler-protobuf.png | Bin 0 -> 244582 bytes
imgs/blog/grpc/dubbo-ptotocol.png | Bin 0 -> 763630 bytes
imgs/blog/grpc/http1.png | Bin 0 -> 29116 bytes
imgs/blog/grpc/http2.png | Bin 0 -> 5420 bytes
imgs/blog/grpcrest.png | Bin 0 -> 274229 bytes
imgs/blog/heterogeneous.png | Bin 0 -> 236827 bytes
imgs/blog/idl-dubbo-compiler.png | Bin 0 -> 498337 bytes
imgs/blog/involve-dubbo/apache-history.png | Bin 0 -> 240521 bytes
imgs/blog/involve-dubbo/apache-org.png | Bin 0 -> 131032 bytes
imgs/blog/involve-dubbo/apache-way.png | Bin 0 -> 272260 bytes
imgs/blog/involve-dubbo/dubbo-community.png | Bin 0 -> 246902 bytes
imgs/blog/involve-dubbo/dubbo-project.png | Bin 0 -> 412187 bytes
imgs/blog/involve-dubbo/get-into-apache.png | Bin 0 -> 298404 bytes
imgs/blog/involve-dubbo/head.jpg | Bin 0 -> 229503 bytes
imgs/blog/k8s/1.png | Bin 0 -> 375679 bytes
imgs/blog/k8s/10.png | Bin 0 -> 197161 bytes
imgs/blog/k8s/2.jpeg | Bin 0 -> 77171 bytes
imgs/blog/k8s/3.jpeg | Bin 0 -> 676938 bytes
imgs/blog/k8s/4.png | Bin 0 -> 150824 bytes
imgs/blog/k8s/5.png | Bin 0 -> 283901 bytes
imgs/blog/k8s/6.png | Bin 0 -> 275609 bytes
imgs/blog/k8s/7.png | Bin 0 -> 381797 bytes
imgs/blog/k8s/8.png | Bin 0 -> 217990 bytes
imgs/blog/k8s/9.png | Bin 0 -> 410467 bytes
imgs/blog/meetup-chengdu/all-hands.webp | Bin 0 -> 90746 bytes
imgs/blog/meetup-chengdu/audience-shapshot.webp | Bin 0 -> 58320 bytes
imgs/blog/meetup-chengdu/challenges-continued.jpg | Bin 0 -> 36616 bytes
imgs/blog/meetup-chengdu/challenges.jpg | Bin 0 -> 69680 bytes
imgs/blog/meetup-chengdu/forms.jpg | Bin 0 -> 61143 bytes
imgs/blog/meetup-chengdu/speaker.webp | Bin 0 -> 15194 bytes
imgs/blog/meetup-chengdu/trends.jpg | Bin 0 -> 60540 bytes
imgs/blog/meetup-chengdu/what.jpg | Bin 0 -> 71448 bytes
imgs/blog/microservices.png | Bin 0 -> 295839 bytes
imgs/blog/migrate-final.png | Bin 0 -> 356554 bytes
imgs/blog/migrate.png | Bin 0 -> 272647 bytes
imgs/blog/motan-agent.png | Bin 0 -> 194646 bytes
imgs/blog/motan-protocol-en.png | Bin 0 -> 355484 bytes
imgs/blog/motan-protocol.png | Bin 0 -> 340668 bytes
imgs/blog/multiregistries.png | Bin 0 -> 511661 bytes
imgs/blog/multisubscribe.png | Bin 0 -> 802610 bytes
imgs/blog/network/01.png | Bin 0 -> 7603 bytes
imgs/blog/network/02.png | Bin 0 -> 8927 bytes
imgs/blog/network/03.png | Bin 0 -> 10966 bytes
imgs/blog/network/04.png | Bin 0 -> 390818 bytes
imgs/blog/pinpoint-calltree.png | Bin 0 -> 693731 bytes
imgs/blog/pinpoint-home.png | Bin 0 -> 317984 bytes
imgs/blog/pinpoint-mixedview.png | Bin 0 -> 480963 bytes
imgs/blog/pu-server/pu-server-flow.png | Bin 0 -> 75669 bytes
imgs/blog/pu-server/qos-telnet-directcall.png | Bin 0 -> 51182 bytes
imgs/blog/pu-server/qos-telnet-sendayt.png | Bin 0 -> 35833 bytes
imgs/blog/pu-server/reference-service.png | Bin 0 -> 61591 bytes
imgs/blog/qcon-beijing-2018.jpeg | Bin 0 -> 136680 bytes
imgs/blog/qos-architecture.png | Bin 0 -> 30670 bytes
imgs/blog/release/3-1-3.png | Bin 0 -> 1503489 bytes
imgs/blog/release/3-1-4.png | Bin 0 -> 941334 bytes
imgs/blog/release/3-2-0-beta-2.png | Bin 0 -> 1464089 bytes
imgs/blog/release/3-2-0-beta-3.png | Bin 0 -> 843437 bytes
imgs/blog/release/release-roadmap.png | Bin 0 -> 282824 bytes
imgs/blog/rest-sample.png | Bin 0 -> 52554 bytes
imgs/blog/rmi-flow.png | Bin 0 -> 12334 bytes
imgs/blog/route-app.png | Bin 0 -> 328631 bytes
imgs/blog/route-service.png | Bin 0 -> 357813 bytes
imgs/blog/rpc/rpc-structure-1.png | Bin 0 -> 261422 bytes
imgs/blog/rpc/rpc-structure-2.png | Bin 0 -> 328282 bytes
imgs/blog/rpc/rpc-work-principle.png | Bin 0 -> 29109 bytes
imgs/blog/sentinel-dashboard-metrics.png | Bin 0 -> 202135 bytes
imgs/blog/sentinel-dashboard-view-rules.png | Bin 0 -> 123996 bytes
imgs/blog/service-discovery-1.png | Bin 0 -> 152651 bytes
imgs/blog/service-discovery-10.png | Bin 0 -> 64175 bytes
imgs/blog/service-discovery-11.png | Bin 0 -> 187348 bytes
imgs/blog/service-discovery-2.png | Bin 0 -> 26796 bytes
imgs/blog/service-discovery-3.png | Bin 0 -> 41557 bytes
imgs/blog/service-discovery-4.png | Bin 0 -> 46055 bytes
imgs/blog/service-discovery-5.png | Bin 0 -> 203027 bytes
imgs/blog/service-discovery-6.png | Bin 0 -> 559036 bytes
imgs/blog/service-discovery-7.png | Bin 0 -> 131472 bytes
imgs/blog/service-discovery-8.png | Bin 0 -> 20057 bytes
imgs/blog/service-discovery-9.png | Bin 0 -> 177636 bytes
imgs/blog/service-group-1.png | Bin 0 -> 61925 bytes
imgs/blog/service-group-2.png | Bin 0 -> 68881 bytes
imgs/blog/service-idl.png | Bin 0 -> 374229 bytes
imgs/blog/service-idl2.png | Bin 0 -> 1084387 bytes
imgs/blog/servicediscovery-new.png | Bin 0 -> 227813 bytes
imgs/blog/servicediscovery-old.png | Bin 0 -> 527472 bytes
imgs/blog/servicediscovery/arc.png | Bin 0 -> 152651 bytes
imgs/blog/servicediscovery/centers.png | Bin 0 -> 219313 bytes
imgs/blog/servicediscovery/meta.png | Bin 0 -> 131472 bytes
imgs/blog/servicediscovery/metadatacenter.png | Bin 0 -> 64175 bytes
imgs/blog/servicediscovery/metadataservice.png | Bin 0 -> 20057 bytes
imgs/blog/servicediscovery/rpc-dubbo.png | Bin 0 -> 46055 bytes
imgs/blog/servicediscovery/rpc-k8s.png | Bin 0 -> 359553 bytes
imgs/blog/servicediscovery/rpc-sc.png | Bin 0 -> 41557 bytes
imgs/blog/servicediscovery/rpc.png | Bin 0 -> 26796 bytes
imgs/blog/servicediscovery/rpc1.png | Bin 0 -> 41557 bytes
.../servicediscovery/servicediscovery-perf.png | Bin 0 -> 389833 bytes
imgs/blog/servicediscovery/workflow.png | Bin 0 -> 226611 bytes
imgs/blog/shenyu-dubbo/ApacheDubboPlugin.png | Bin 0 -> 14832 bytes
imgs/blog/shenyu-dubbo/ApacheShenYu-Dubbo-en.png | Bin 0 -> 128630 bytes
imgs/blog/shenyu-dubbo/ApacheShenYu-Dubbo-zh.png | Bin 0 -> 113271 bytes
imgs/blog/shenyu-dubbo/MessageWriter.png | Bin 0 -> 15626 bytes
.../ShenyuClientRegisterDubboServiceImpl.png | Bin 0 -> 26691 bytes
imgs/blog/shenyu-dubbo/data-sync-seq-en.png | Bin 0 -> 58201 bytes
imgs/blog/shenyu-dubbo/data-sync-seq-zh.png | Bin 0 -> 93305 bytes
imgs/blog/shenyu-dubbo/data-sync.png | Bin 0 -> 83529 bytes
imgs/blog/shenyu-dubbo/dubbo-enable-en.png | Bin 0 -> 138868 bytes
imgs/blog/shenyu-dubbo/dubbo-enable-zh.png | Bin 0 -> 147345 bytes
imgs/blog/shenyu-dubbo/dubbo-execute-en.png | Bin 0 -> 55691 bytes
imgs/blog/shenyu-dubbo/dubbo-execute-zh.png | Bin 0 -> 72315 bytes
imgs/blog/shenyu-dubbo/dubbo-register-en.png | Bin 0 -> 61502 bytes
imgs/blog/shenyu-dubbo/dubbo-register-zh.png | Bin 0 -> 65742 bytes
imgs/blog/shenyu-dubbo/dubbo-rule-en.png | Bin 0 -> 135915 bytes
imgs/blog/shenyu-dubbo/dubbo-rule-zh.png | Bin 0 -> 129569 bytes
imgs/blog/shenyu-dubbo/dubbo-selector-en.png | Bin 0 -> 136569 bytes
imgs/blog/shenyu-dubbo/dubbo-selector-zh.png | Bin 0 -> 123354 bytes
imgs/blog/shenyu-dubbo/dubbo-service-list-en.png | Bin 0 -> 178276 bytes
imgs/blog/shenyu-dubbo/dubbo-service-list-zh.png | Bin 0 -> 189937 bytes
imgs/blog/shenyu-dubbo/register-client.png | Bin 0 -> 70104 bytes
imgs/blog/shenyu-dubbo/register-server.png | Bin 0 -> 215477 bytes
imgs/blog/shenyu-dubbo/shenyu.png | Bin 0 -> 238554 bytes
imgs/blog/skywalking-alarm.png | Bin 0 -> 181739 bytes
imgs/blog/skywalking-application.png | Bin 0 -> 229539 bytes
imgs/blog/skywalking-application_instance.png | Bin 0 -> 203651 bytes
imgs/blog/skywalking-dashboard.png | Bin 0 -> 257273 bytes
imgs/blog/skywalking-service-consumer.png | Bin 0 -> 282541 bytes
imgs/blog/skywalking-service-provider.png | Bin 0 -> 366038 bytes
imgs/blog/skywalking-span-Info.png | Bin 0 -> 192403 bytes
imgs/blog/skywalking-topology.png | Bin 0 -> 173667 bytes
imgs/blog/skywalking-trace.png | Bin 0 -> 217096 bytes
imgs/blog/source-blog/1-zookeeper-data.png | Bin 0 -> 402843 bytes
imgs/blog/source-blog/1-zookeeper.png | Bin 0 -> 326294 bytes
imgs/blog/source-blog/13-config-1.png | Bin 0 -> 130882 bytes
imgs/blog/source-blog/13-config2.png | Bin 0 -> 104484 bytes
imgs/blog/source-blog/14-config.png | Bin 0 -> 73900 bytes
imgs/blog/source-blog/15-config.png | Bin 0 -> 46176 bytes
imgs/blog/source-blog/15-config2.png | Bin 0 -> 58689 bytes
imgs/blog/source-blog/16-deploy.png | Bin 0 -> 126253 bytes
imgs/blog/source-blog/16-deploy2.png | Bin 0 -> 132338 bytes
imgs/blog/source-blog/16-deploy3.png | Bin 0 -> 85607 bytes
imgs/blog/source-blog/16-deploy4.png | Bin 0 -> 57082 bytes
imgs/blog/source-blog/17-register.png | Bin 0 -> 46613 bytes
imgs/blog/source-blog/17-register10.png | Bin 0 -> 170282 bytes
imgs/blog/source-blog/17-register2.png | Bin 0 -> 69911 bytes
imgs/blog/source-blog/17-register3.png | Bin 0 -> 190531 bytes
imgs/blog/source-blog/17-register4.png | Bin 0 -> 127930 bytes
imgs/blog/source-blog/17-register5.png | Bin 0 -> 58471 bytes
imgs/blog/source-blog/17-register6.png | Bin 0 -> 52195 bytes
imgs/blog/source-blog/17-register7.png | Bin 0 -> 170254 bytes
imgs/blog/source-blog/17-register8.png | Bin 0 -> 121660 bytes
imgs/blog/source-blog/17-register9.png | Bin 0 -> 34491 bytes
imgs/blog/source-blog/18-metadata.png | Bin 0 -> 91782 bytes
imgs/blog/source-blog/18-metadata2.png | Bin 0 -> 365719 bytes
imgs/blog/source-blog/18-metadata3.png | Bin 0 -> 277631 bytes
imgs/blog/source-blog/18-metadata4.png | Bin 0 -> 452399 bytes
imgs/blog/source-blog/19-zk.png | Bin 0 -> 114706 bytes
imgs/blog/source-blog/19-zk2.png | Bin 0 -> 400829 bytes
imgs/blog/source-blog/2-ServiceConfig.png | Bin 0 -> 422176 bytes
imgs/blog/source-blog/20-refe.png | Bin 0 -> 558575 bytes
imgs/blog/source-blog/21-createInvokerRemote.png | Bin 0 -> 233141 bytes
imgs/blog/source-blog/3-extension.png | Bin 0 -> 74859 bytes
imgs/blog/source-blog/3-initextent.png | Bin 0 -> 141853 bytes
imgs/blog/source-blog/3-model.png | Bin 0 -> 53993 bytes
imgs/blog/source-blog/4-dubbo-arch.png | Bin 0 -> 161891 bytes
imgs/blog/source-blog/4-dubbo-arch2.png | Bin 0 -> 849298 bytes
imgs/blog/source-blog/4-dubbo-arch3.png | Bin 0 -> 200010 bytes
imgs/blog/source-blog/4-dubbo-extension.png | Bin 0 -> 71296 bytes
imgs/blog/source-blog/4-dubbo-extension2.png | Bin 0 -> 205415 bytes
imgs/blog/source-blog/register.png | Bin 0 -> 814937 bytes
imgs/blog/springmvc.png | Bin 0 -> 28524 bytes
imgs/blog/subscribe-only.jpg | Bin 0 -> 20626 bytes
imgs/blog/swagger-ui-execute.png | Bin 0 -> 431651 bytes
imgs/blog/swagger-ui.png | Bin 0 -> 160468 bytes
imgs/blog/trace-sample.png | Bin 0 -> 35537 bytes
imgs/blog/url-perf-tuning-1.png | Bin 0 -> 14586 bytes
imgs/blog/url-perf-tuning-2.png | Bin 0 -> 50785 bytes
imgs/blog/url-perf-tuning-3.png | Bin 0 -> 54053 bytes
imgs/blog/url-perf-tuning-4.png | Bin 0 -> 32461 bytes
imgs/blog/url-perf-tuning-5.png | Bin 0 -> 73539 bytes
imgs/blog/url-perf-tuning-6.png | Bin 0 -> 30489 bytes
imgs/blog/url-perf-tuning-7.png | Bin 0 -> 163554 bytes
imgs/blog/url-perf-tuning-8.png | Bin 0 -> 185862 bytes
imgs/blog/zipkin-architecture.png | Bin 0 -> 38500 bytes
imgs/blog/zipkin-dubbo-project.png | Bin 0 -> 147401 bytes
imgs/blog/zipkin-span.png | Bin 0 -> 363230 bytes
imgs/blog/zipkin-trace.png | Bin 0 -> 54776 bytes
imgs/blog/zipkin-web-screenshot.png | Bin 0 -> 356606 bytes
imgs/blog/zk-emsemble.png | Bin 0 -> 86220 bytes
imgs/blog/zk-tree.png | Bin 0 -> 34214 bytes
imgs/dev/checkstyle1.png | Bin 0 -> 72276 bytes
imgs/dev/checkstyle2.png | Bin 0 -> 34066 bytes
imgs/dev/checkstyle3.png | Bin 0 -> 13399 bytes
imgs/dev/checkstyle4.png | Bin 0 -> 29805 bytes
imgs/dev/close-expand.jpg | Bin 0 -> 19287 bytes
imgs/dev/cluster.jpg | Bin 0 -> 32874 bytes
imgs/dev/configcenter_nacos_model.jpg | Bin 0 -> 78352 bytes
imgs/dev/configcenter_zk_model.jpg | Bin 0 -> 189160 bytes
imgs/dev/configcenter_zk_properties.jpg | Bin 0 -> 92946 bytes
imgs/dev/configcenter_zk_rule.jpg | Bin 0 -> 131167 bytes
imgs/dev/configcenter_zk_singleitem.jpg | Bin 0 -> 53837 bytes
imgs/dev/configuration-override.png | Bin 0 -> 11422 bytes
imgs/dev/consistent-hash-data-incline.jpg | Bin 0 -> 101943 bytes
imgs/dev/consistent-hash-invoker.jpg | Bin 0 -> 87844 bytes
imgs/dev/consistent-hash.jpg | Bin 0 -> 95740 bytes
imgs/dev/data-format.jpg | Bin 0 -> 115165 bytes
imgs/dev/ddd.jpg | Bin 0 -> 19358 bytes
imgs/dev/design-step1.png | Bin 0 -> 121672 bytes
imgs/dev/design-step2.png | Bin 0 -> 141298 bytes
imgs/dev/design-step3.png | Bin 0 -> 165828 bytes
imgs/dev/design-step4.png | Bin 0 -> 240786 bytes
imgs/dev/directory-inherit-hierarchy.png | Bin 0 -> 69024 bytes
imgs/dev/dispatcher-location.jpg | Bin 0 -> 89871 bytes
imgs/dev/dubbo-export.jpg | Bin 0 -> 70132 bytes
imgs/dev/dubbo-extension.jpg | Bin 0 -> 112692 bytes
imgs/dev/dubbo-framework.jpg | Bin 0 -> 219759 bytes
imgs/dev/dubbo-modules.jpg | Bin 0 -> 25411 bytes
imgs/dev/dubbo-protocol.jpg | Bin 0 -> 19340 bytes
imgs/dev/dubbo-refer.jpg | Bin 0 -> 105967 bytes
imgs/dev/dubbo-relation.jpg | Bin 0 -> 30304 bytes
imgs/dev/dubbo-spi-result.jpg | Bin 0 -> 33007 bytes
imgs/dev/dubbo_protocol_header.png | Bin 0 -> 74833 bytes
imgs/dev/dubbo_rpc_export.jpg | Bin 0 -> 47624 bytes
imgs/dev/dubbo_rpc_invoke.jpg | Bin 0 -> 45874 bytes
imgs/dev/dubbo_rpc_refer.jpg | Bin 0 -> 50211 bytes
imgs/dev/event-listener.jpg | Bin 0 -> 13192 bytes
imgs/dev/filter-chain.jpg | Bin 0 -> 41029 bytes
imgs/dev/java-spi-result.jpg | Bin 0 -> 46805 bytes
imgs/dev/mix-api-spi.jpg | Bin 0 -> 17004 bytes
imgs/dev/open-expand.jpg | Bin 0 -> 10549 bytes
imgs/dev/request-id-application.jpg | Bin 0 -> 217379 bytes
imgs/dev/send-request-process.jpg | Bin 0 -> 83592 bytes
imgs/dev/send-request-thread-stack.jpg | Bin 0 -> 213679 bytes
imgs/dev/seperate-api-spi.jpg | Bin 0 -> 23683 bytes
imgs/dev/service-registry.png | Bin 0 -> 57116 bytes
...234531-b96c2c80-db46-11eb-8155-a77dbe059f07.png | Bin 0 -> 41542 bytes
...234564-c4bf5800-db46-11eb-94fc-a056af6089cb.png | Bin 0 -> 14336 bytes
...234654-e4568080-db46-11eb-9700-b30022ebee21.png | Bin 0 -> 14323 bytes
...234723-f89a7d80-db46-11eb-82d0-a8aee5322098.png | Bin 0 -> 17530 bytes
...180981-51a0df19-bb03-49c8-9128-a6e95dbabfcd.png | Bin 0 -> 474421 bytes
imgs/docs3-v2/golang-sdk/concept/dubbogo.png | Bin 0 -> 49850 bytes
.../454d1e31-0be3-41fe-97ec-f52673ebf74f.png | Bin 0 -> 488163 bytes
.../894c0e52-9d34-4490-b49b-24973ef4aabc.png | Bin 0 -> 123752 bytes
.../mesh/proxyless_service_mesh/service-mesh.svg | 1 +
.../concept/more/3.0_feature/dest_rule.png | Bin 0 -> 163706 bytes
.../golang-sdk/concept/more/3.0_feature/disc.png | Bin 0 -> 85858 bytes
.../golang-sdk/concept/more/3.0_feature/tri.png | Bin 0 -> 89161 bytes
.../concept/more/3.0_feature/virtual_service.png | Bin 0 -> 157054 bytes
.../more/app_and_interface/dubbogo-concept.png | Bin 0 -> 882144 bytes
.../concept/more/architecture/architecture.png | Bin 0 -> 16744 bytes
...941270-86ce9845-5a88-4cb5-8c8a-da8ae7eeb4d5.png | Bin 0 -> 34598 bytes
...075184-25939db4-f384-452e-a0b8-e1deff7971de.png | Bin 0 -> 53261 bytes
.../rpc/multi_language/dubbogo-3.0-invocation.png | Bin 0 -> 217736 bytes
imgs/docs3-v2/golang-sdk/quickstart/nacos.jpg | Bin 0 -> 56784 bytes
.../samples/adaptive-service/adaptive.png | Bin 0 -> 26693 bytes
.../samples/pixiu-nacos-triple/triple-pixiu.png | Bin 0 -> 197924 bytes
.../tasks/pixiu/http_triple/triple-pixiu.png | Bin 0 -> 197924 bytes
.../triple-health-check/health-check.png | Bin 0 -> 3186 bytes
imgs/docs3-v2/java-sdk/observability/aggre.png | Bin 0 -> 13476 bytes
imgs/docs3-v2/java-sdk/observability/dataflow.png | Bin 0 -> 24738 bytes
imgs/docs3-v2/java-sdk/observability/dubbo.png | Bin 0 -> 800305 bytes
imgs/docs3-v2/java-sdk/seata/transaction-1.png | Bin 0 -> 68513 bytes
imgs/docs3-v2/java-sdk/seata/transaction-2.png | Bin 0 -> 263774 bytes
.../dev/source/refer-service/15417503733794.jpg | Bin 0 -> 146018 bytes
imgs/docsv2.7/user/examples/auth/auth.png | Bin 0 -> 43573 bytes
imgs/dubbo.ico | Bin 0 -> 16958 bytes
imgs/dubbo_colorful.png | Bin 0 -> 2529 bytes
imgs/dubbo_gray.png | Bin 0 -> 1343 bytes
imgs/dubbo_white.png | Bin 0 -> 1150 bytes
imgs/feature_hogh.png | Bin 0 -> 709 bytes
imgs/feature_loadbalances.png | Bin 0 -> 1049 bytes
imgs/feature_maintenance.png | Bin 0 -> 1062 bytes
imgs/feature_runtime.png | Bin 0 -> 1205 bytes
imgs/feature_service.png | Bin 0 -> 1115 bytes
imgs/feature_transpart.png | Bin 0 -> 1091 bytes
imgs/golang/3.0/config-consumer-config.png | Bin 0 -> 334010 bytes
imgs/golang/3.0/config-provider-config.png | Bin 0 -> 333420 bytes
imgs/golang/3.0/config-root-config.png | Bin 0 -> 453400 bytes
imgs/golang/3.0/dubbo-go3.0-arch.jpg | Bin 0 -> 244824 bytes
imgs/golang/3.0/dubbogo-concept.png | Bin 0 -> 882144 bytes
imgs/golang/3.0/module.jpg | Bin 0 -> 225978 bytes
imgs/golang/3.0/triple-go-arch.jpg | Bin 0 -> 215257 bytes
imgs/golang/dubbo-go-architecture.png | Bin 0 -> 17305 bytes
imgs/pixiu/overview/pixiu-overview.png | Bin 0 -> 276707 bytes
imgs/pixiu/overview/pixiu-sidecar.png | Bin 0 -> 41756 bytes
imgs/pixiu/overview/terminology.png | Bin 0 -> 102248 bytes
imgs/pixiu/trie-1.png | Bin 0 -> 176376 bytes
imgs/pixiu/trie-2.png | Bin 0 -> 108297 bytes
imgs/pixiu/trie-3.png | Bin 0 -> 371739 bytes
imgs/pixiu/trie-4.png | Bin 0 -> 437613 bytes
imgs/pixiu/trie-5.png | Bin 0 -> 574774 bytes
imgs/pixiu/trie-6.png | Bin 0 -> 249772 bytes
imgs/pixiu/trie-7.png | Bin 0 -> 459839 bytes
imgs/pixiu/user/appendix/img1.png | Bin 0 -> 699069 bytes
imgs/pixiu/user/appendix/img2.png | Bin 0 -> 94077 bytes
imgs/pixiu/user/quick_start_architecture.png | Bin 0 -> 9243 bytes
imgs/pixiu/user/samples/http_proxy.png | Bin 0 -> 6945 bytes
imgs/rust/dubbo-rust-mesh.png | Bin 0 -> 777430 bytes
imgs/rust/dubbo-rust-module.png | Bin 0 -> 28826 bytes
imgs/rust/dubbo-rust-tasks.png | Bin 0 -> 261957 bytes
imgs/user/1kres.png | Bin 0 -> 39384 bytes
imgs/user/1ktps.png | Bin 0 -> 38814 bytes
imgs/user/200kres.png | Bin 0 -> 39229 bytes
imgs/user/200ktps.png | Bin 0 -> 38997 bytes
imgs/user/50kres.png | Bin 0 -> 39733 bytes
imgs/user/50ktps.png | Bin 0 -> 39723 bytes
imgs/user/apollo-configcenter-application.jpg | Bin 0 -> 156394 bytes
imgs/user/apollo-configcenter-dubbo.jpg | Bin 0 -> 198809 bytes
imgs/user/apollo-configcenter-dubbo.png | Bin 0 -> 175064 bytes
imgs/user/apollo-configcenter-enhance.jpg | Bin 0 -> 244562 bytes
imgs/user/apollo-configcenter-governance-dubbo.png | Bin 0 -> 193607 bytes
imgs/user/apollo-configcenter-governance.jpg | Bin 0 -> 213599 bytes
imgs/user/arch.png | Bin 0 -> 15546 bytes
imgs/user/cluster.jpg | Bin 0 -> 32874 bytes
imgs/user/code-coverage.jpg | Bin 0 -> 141776 bytes
imgs/user/code-dependency.jpg | Bin 0 -> 138868 bytes
imgs/user/code-quality1.jpg | Bin 0 -> 56913 bytes
imgs/user/code-quality2.jpg | Bin 0 -> 56913 bytes
imgs/user/code-quality3.jpg | Bin 0 -> 56913 bytes
imgs/user/code-quality4.jpg | Bin 0 -> 56913 bytes
imgs/user/code-quality5.jpg | Bin 0 -> 41672 bytes
imgs/user/code-quality6.jpg | Bin 0 -> 41672 bytes
imgs/user/code-quality7.jpg | Bin 0 -> 41672 bytes
imgs/user/code-tendency.jpg | Bin 0 -> 54729 bytes
imgs/user/consumer-threadpool0.png | Bin 0 -> 314209 bytes
imgs/user/consumer-threadpool1.png | Bin 0 -> 421182 bytes
imgs/user/context.png | Bin 0 -> 46114 bytes
imgs/user/dubbo-architecture-future.jpg | Bin 0 -> 55605 bytes
imgs/user/dubbo-architecture-roadmap.jpg | Bin 0 -> 33931 bytes
imgs/user/dubbo-architecture.jpg | Bin 0 -> 18810 bytes
imgs/user/dubbo-config-override.jpg | Bin 0 -> 68132 bytes
imgs/user/dubbo-config.jpg | Bin 0 -> 69630 bytes
imgs/user/dubbo-directly.jpg | Bin 0 -> 38922 bytes
imgs/user/dubbo-properties-override.jpg | Bin 0 -> 24590 bytes
imgs/user/dubbo-protocol.jpg | Bin 0 -> 19340 bytes
imgs/user/dubbo-redis-registry.jpg | Bin 0 -> 47205 bytes
imgs/user/dubbo-service-governance.jpg | Bin 0 -> 67000 bytes
imgs/user/dubbo-token.jpg | Bin 0 -> 17153 bytes
imgs/user/eleme/elem-arc.png | Bin 0 -> 107405 bytes
imgs/user/eleme/elem-result.png | Bin 0 -> 78649 bytes
imgs/user/eleme/elem-upgrade-consumer.png | Bin 0 -> 160777 bytes
imgs/user/eleme/elem-upgrade-consumer1.png | Bin 0 -> 119591 bytes
imgs/user/eleme/elem-upgrade-provider.png | Bin 0 -> 202140 bytes
imgs/user/eleme/elem-upgrade1.png | Bin 0 -> 115362 bytes
imgs/user/future.jpg | Bin 0 -> 20793 bytes
imgs/user/icbc/icbc-analyze.png | Bin 0 -> 93318 bytes
imgs/user/icbc/icbc-data1.png | Bin 0 -> 609563 bytes
imgs/user/icbc/icbc-data2.png | Bin 0 -> 751871 bytes
imgs/user/jta-xa.jpg | Bin 0 -> 37931 bytes
imgs/user/lock-get-bean.jpg | Bin 0 -> 109801 bytes
imgs/user/lock-init-context.jpg | Bin 0 -> 39227 bytes
imgs/user/multicast.jpg | Bin 0 -> 20269 bytes
.../nacos-configcenter-application-properties.png | Bin 0 -> 155792 bytes
imgs/user/nacos-configcenter-global-properties.png | Bin 0 -> 166881 bytes
imgs/user/nacos-configcenter-governance.png | Bin 0 -> 192062 bytes
.../nacos-metadata-report-application-metadata.png | Bin 0 -> 425167 bytes
.../nacos-metadata-report-consumer-metadata.png | Bin 0 -> 175292 bytes
.../nacos-metadata-report-provider-metadata.png | Bin 0 -> 311744 bytes
.../nacos-metadata-report-service-name-mapping.png | Bin 0 -> 142215 bytes
imgs/user/pojores.png | Bin 0 -> 37733 bytes
imgs/user/pojotps.png | Bin 0 -> 39797 bytes
imgs/user/rest.jpg | Bin 0 -> 206610 bytes
imgs/user/route-rule1.png | Bin 0 -> 233685 bytes
imgs/user/route-rule2.png | Bin 0 -> 24570 bytes
imgs/user/route-rule3.png | Bin 0 -> 233685 bytes
imgs/user/rt.png | Bin 0 -> 31098 bytes
imgs/user/stub.jpg | Bin 0 -> 28646 bytes
imgs/user/subscribe-only.jpg | Bin 0 -> 20626 bytes
...pg-version=1&modificationDate=1326468174000.jpg | Bin 0 -> 20626 bytes
imgs/user/tps.png | Bin 0 -> 33114 bytes
imgs/user/zk-configcenter-governance.jpg | Bin 0 -> 301240 bytes
imgs/user/zk-configcenter.jpg | Bin 0 -> 247992 bytes
imgs/user/zookeeper.jpg | Bin 0 -> 31272 bytes
imgs/users_alibaba.png | Bin 0 -> 1884 bytes
imgs/users_chinalife.png | Bin 0 -> 3047 bytes
imgs/users_dangdang.png | Bin 0 -> 2060 bytes
imgs/users_didi.png | Bin 0 -> 3229 bytes
imgs/users_handu.png | Bin 0 -> 6884 bytes
imgs/users_icbc.png | Bin 0 -> 1696 bytes
imgs/users_kaola.png | Bin 0 -> 2514 bytes
imgs/users_kingdee.png | Bin 0 -> 1831 bytes
imgs/users_qunar.png | Bin 0 -> 3420 bytes
imgs/users_telecom.png | Bin 0 -> 2617 bytes
imgs/users_wanglian.png | Bin 0 -> 1790 bytes
imgs/users_weidian.png | Bin 0 -> 2442 bytes
imgs/users_yinlian.png | Bin 0 -> 2293 bytes
imgs/users_zhengcaiyun.png | Bin 0 -> 1423 bytes
imgs/v3/concepts/application-instance.png | Bin 0 -> 18706 bytes
imgs/v3/concepts/application-rpc-mapping.png | Bin 0 -> 72162 bytes
imgs/v3/concepts/architecture-1.png | Bin 0 -> 15318 bytes
imgs/v3/concepts/capacity.png | Bin 0 -> 103042 bytes
imgs/v3/concepts/centers-config.png | Bin 0 -> 103809 bytes
imgs/v3/concepts/centers-metadata.png | Bin 0 -> 106862 bytes
imgs/v3/concepts/centers-registry.png | Bin 0 -> 101211 bytes
imgs/v3/concepts/dubbo-hsf.png | Bin 0 -> 22917 bytes
imgs/v3/concepts/dubbo.png | Bin 0 -> 31499 bytes
imgs/v3/concepts/dubbo3-goals.png | Bin 0 -> 51955 bytes
imgs/v3/concepts/extension-load.png | Bin 0 -> 84561 bytes
imgs/v3/concepts/extension-use.png | Bin 0 -> 138943 bytes
imgs/v3/concepts/filter-arch.jpg | Bin 0 -> 193805 bytes
imgs/v3/concepts/invoke-arch.jpg | Bin 0 -> 121885 bytes
imgs/v3/concepts/metadatacenter.png | Bin 0 -> 25468 bytes
imgs/v3/concepts/metadataservice-rpc.png | Bin 0 -> 10079 bytes
.../multiple-registry-deployment-architecture.png | Bin 0 -> 52826 bytes
imgs/v3/concepts/proxyless-mesh.png | Bin 0 -> 43666 bytes
imgs/v3/concepts/rpc-application-mapping.png | Bin 0 -> 55274 bytes
imgs/v3/concepts/rpc.png | Bin 0 -> 22695 bytes
imgs/v3/concepts/rpccontext.png | Bin 0 -> 222532 bytes
imgs/v3/concepts/servicediscovery_k8s.png | Bin 0 -> 170454 bytes
imgs/v3/concepts/servicediscovery_mem.png | Bin 0 -> 581805 bytes
imgs/v3/concepts/servicediscovery_old.png | Bin 0 -> 188631 bytes
imgs/v3/concepts/spring-cloud.png | Bin 0 -> 30793 bytes
imgs/v3/concepts/threecenters.png | Bin 0 -> 113151 bytes
imgs/v3/concepts/triple-protocol.png | Bin 0 -> 8808 bytes
imgs/v3/concepts/triple.png | Bin 0 -> 56249 bytes
imgs/v3/concepts/what-is-traffic-control.png | Bin 0 -> 307011 bytes
imgs/v3/config-center/nacos-extenal-properties.png | Bin 0 -> 148997 bytes
imgs/v3/config/config-load.svg | 1 +
imgs/v3/config/properties-override.svg | 1 +
...dubbbo-provider-connectionOrderedDispatcher.png | Bin 0 -> 94704 bytes
.../dubbo-provider-alldispatcher.png | Bin 0 -> 82195 bytes
.../dubbo-provider-directDispatcher.png | Bin 0 -> 84703 bytes
.../dubbo-provider-executionDispatcher.png | Bin 0 -> 80491 bytes
.../dubbo-provider-messageOnlyDispatcher.png | Bin 0 -> 80491 bytes
.../threading-model/triple-consumer.png | Bin 0 -> 72914 bytes
.../threading-model/triple-provider.png | Bin 0 -> 57135 bytes
imgs/v3/mesh/dubbo-mesh-arc.png | Bin 0 -> 25742 bytes
imgs/v3/mesh/dubbo-proxyless.png | Bin 0 -> 118155 bytes
imgs/v3/mesh/dubbo-sidecar.png | Bin 0 -> 127440 bytes
imgs/v3/mesh/istio.jpg | Bin 0 -> 44471 bytes
imgs/v3/mesh/mix-mesh.png | Bin 0 -> 126151 bytes
imgs/v3/mesh/mix-meshj.png | Bin 0 -> 126151 bytes
imgs/v3/mesh/thinsdk-envoy.png | Bin 0 -> 7418 bytes
imgs/v3/migration/consumer-subscription.png | Bin 0 -> 225748 bytes
imgs/v3/migration/migration-1.png | Bin 0 -> 309735 bytes
imgs/v3/migration/migration-2.png | Bin 0 -> 107011 bytes
imgs/v3/migration/migration-3.png | Bin 0 -> 145475 bytes
imgs/v3/migration/migration-4.png | Bin 0 -> 269864 bytes
imgs/v3/migration/migration-5.png | Bin 0 -> 271929 bytes
imgs/v3/migration/migration-6.png | Bin 0 -> 260915 bytes
imgs/v3/migration/migration-cluster-invoker.png | Bin 0 -> 87874 bytes
imgs/v3/migration/migtaion-1.png | Bin 0 -> 309735 bytes
imgs/v3/migration/migtaion-2.png | Bin 0 -> 107011 bytes
imgs/v3/migration/migtaion-3.png | Bin 0 -> 145475 bytes
imgs/v3/migration/migtaion-4.png | Bin 0 -> 269864 bytes
imgs/v3/migration/migtaion-5.png | Bin 0 -> 271929 bytes
imgs/v3/migration/migtaion-6.png | Bin 0 -> 260915 bytes
imgs/v3/migration/nacos-migration-item.png | Bin 0 -> 114326 bytes
imgs/v3/migration/provider-registration.png | Bin 0 -> 233292 bytes
.../dubbo3-tri-migration-both-dubbo-tri-result.png | Bin 0 -> 823923 bytes
.../dubbo3-tri-migration-dubbo-dubbo-result.png | Bin 0 -> 931399 bytes
.../tri/dubbo3-tri-migration-tri-tri-result.png | Bin 0 -> 968885 bytes
.../dubbo3-tri-mirgration-protobuf-tri-result.png | Bin 0 -> 882985 bytes
imgs/v3/migration/tri/migrate-bi-stream.png | Bin 0 -> 171870 bytes
imgs/v3/migration/tri/migrate-client-stream.png | Bin 0 -> 112051 bytes
imgs/v3/migration/tri/migrate-dubbo-tri-strust.png | Bin 0 -> 195043 bytes
imgs/v3/migration/tri/migrate-only-tri-strust.png | Bin 0 -> 197407 bytes
imgs/v3/migration/tri/migrate-server-stream.png | Bin 0 -> 148588 bytes
imgs/v3/performance/registry-gc.svg | 3 +
imgs/v3/performance/registry-mem.svg | 3 +
imgs/v3/performance/rpc-dubbo.svg | 3 +
imgs/v3/performance/rpc-triple.svg | 3 +
imgs/v3/registry/aggregation.png | Bin 0 -> 39102 bytes
imgs/v3/registry/no-aggregation.png | Bin 0 -> 35253 bytes
imgs/v3/tasks/config-rule/BasicProvider1_check.png | Bin 0 -> 54564 bytes
imgs/v3/tasks/config-rule/BasicProvider2_check.png | Bin 0 -> 64323 bytes
imgs/v3/tasks/config-rule/BasicProvider_run.png | Bin 0 -> 178743 bytes
imgs/v3/tasks/config-rule/demo_architecture.png | Bin 0 -> 15088 bytes
imgs/v3/tasks/config-rule/dubbo_console.png | Bin 0 -> 20891 bytes
imgs/v3/tasks/config-rule/service_timeout.png | Bin 0 -> 105959 bytes
imgs/v3/users/pingan-1.png | Bin 0 -> 72772 bytes
imgs/v3/users/pingan-2.png | Bin 0 -> 171346 bytes
imgs/v3/users/pingan-3.png | Bin 0 -> 98272 bytes
imgs/v3/users/pingan-4.png | Bin 0 -> 114615 bytes
imgs/v3/users/pingan-5.png | Bin 0 -> 112844 bytes
imgs/v3/users/pingan-6.png | Bin 0 -> 112176 bytes
imgs/v3/users/pingan-7.png | Bin 0 -> 71509 bytes
imgs/v3/users/pingan-8.png | Bin 0 -> 62863 bytes
imgs/v3/users/yunxiaomi-1.png | Bin 0 -> 633721 bytes
imgs/v3/users/yunxiaomi-2.png | Bin 0 -> 302005 bytes
imgs/v3/users/yunxiaomi-3.png | Bin 0 -> 129716 bytes
imgs/v3/users/yunxiaomi-4.png | Bin 0 -> 94913 bytes
imgs/v3/users/zhonglunwangluo-1.png | Bin 0 -> 286881 bytes
imgs/v3/users/zhonglunwangluo-2.png | Bin 0 -> 76830 bytes
imgs/v3/users/zhonglunwangluo-3.png | Bin 0 -> 71265 bytes
imgs/v3/users/zhonglunwangluo-4.png | Bin 0 -> 118708 bytes
index.html | 1 +
index.xml | 5471 +++++++
js/bootstrap.min.js | 7 +
js/deflate.js | 1652 +++
js/jquery-3.5.1.min.js | 2 +
js/lunr.min.js | 6 +
...6e292df449e3532274931145bb2afe52ef44ec64c451.js | 1 +
...d86e083561892fc8779b83b121661e2a6ca6e2fb9e84.js | 1 +
...8af304cb142e92e4bf9860e8fee7857669f773b30be9.js | 6 +
...22923c361575b563af25c0fd56279cf20f3a2417cff4.js | 1 +
...5a2424ceff1cf41fa3fea170a94a53582b7226e2044e.js | 1 +
...54bd4d804738eaf24c0cec53009b4c6899989be55a47.js | 6 +
...f8b35e182c47aeb6e040e8d6d93913cebf8dbbfb4010.js | 1 +
...a409583344232bd08794fbca50d0c34bfe7218d9dfb7.js | 1 +
...9332d6ee7c773fb6aa6d1c6ef424bee239ec51a7e623.js | 6 +
js/mermaid.min.js | 32 +
js/popper.min.js | 5 +
js/prism.js | 21 +
js/swagger-ui-bundle.js | 134 +
js/swagger-ui-standalone-preset.js | 22 +
js/tabpane-persist.js | 19 +
robots.txt | 1 +
schema/dubbo/dubbo.xsd | 1723 +++
...42b00e5d7944e1cf433cd4e0b99131eb0b0da0f682a.css | 7 +
...b5a5418d33082916253cd20656c3ceed0ca59752f0f.css | 7 +
...5422db8d261188767c75f4a473b1868b5bda9ef2dd4.css | 7 +
...1aa8868868ccb54c8c2be3c136bbe75c3e405dcf8f9.css | 7 +
...967441006a13e5f60c35051427324c25c6644ae0ae3.css | 7 +
...e8497df4c2bb1491ef3d5cf721391a219516446870d.css | 7 +
...6201d9e8ca6f05a740a6e10a97d1f2c239aa69e972e.css | 7 +
...0a302450a2e3baad4af648f63bdc75f35544f351ca8.css | 7 +
...05640f22ebf287239f9f7b676f2d2402427b3ea980d.css | 7 +
...e4e83652c0cebe2d667477b88c8a046be155bcf7cfe.css | 7 +
...94f7583d0b2a7c043e9717486d0407c2dfdf725043f.css | 7 +
...4386c269cfd0c363b329f020f483656c1193857d326.css | 7 +
...377370834b1aec7190a7ed4e8ddf321e29856e0b6b6.css | 7 +
...af1502f9e30557662d8748e7e79569b9a98ad8e3c9c.css | 7 +
...b302af40250f182a610d0622d104d3520a8ae1d4030.css | 7 +
sitemap.xml | 1 +
webfonts/fa-brands-400.eot | Bin 0 -> 129734 bytes
webfonts/fa-brands-400.svg | 3451 +++++
webfonts/fa-brands-400.ttf | Bin 0 -> 129428 bytes
webfonts/fa-brands-400.woff | Bin 0 -> 87644 bytes
webfonts/fa-brands-400.woff2 | Bin 0 -> 74740 bytes
webfonts/fa-regular-400.eot | Bin 0 -> 34394 bytes
webfonts/fa-regular-400.svg | 803 +
webfonts/fa-regular-400.ttf | Bin 0 -> 34096 bytes
webfonts/fa-regular-400.woff | Bin 0 -> 16804 bytes
webfonts/fa-regular-400.woff2 | Bin 0 -> 13656 bytes
webfonts/fa-solid-900.eot | Bin 0 -> 192122 bytes
webfonts/fa-solid-900.svg | 4649 ++++++
webfonts/fa-solid-900.ttf | Bin 0 -> 191836 bytes
webfonts/fa-solid-900.woff | Bin 0 -> 98020 bytes
webfonts/fa-solid-900.woff2 | Bin 0 -> 75336 bytes
zh/404.html | 7 +
.../index.html" | 87 +
.../index.html" | 31 +
.../index.html" | 14 +
.../index.html" | 98 +
zh/blog/1/01/01/index.html | 362 +
.../index.html" | 211 +
.../index.html" | 26 +
.../index.html" | 29 +
.../index.html" | 46 +
.../index.html" | 12 +
.../index.html" | 28 +
.../index.html" | 23 +
.../index.html" | 50 +
.../index.html" | 11 +
.../index.html" | 20 +
.../index.html" | 11 +
.../index.html" | 105 +
.../index.html" | 92 +
.../index.html" | 75 +
.../index.html" | 13 +
.../index.html" | 13 +
.../index.html" | 13 +
.../index.html" | 19 +
.../index.html" | 13 +
.../index.html" | 13 +
.../index.html" | 10 +
.../index.html" | 290 +
.../index.html" | 20 +
.../index.html" | 353 +
.../index.html" | 10 +
.../index.html" | 76 +
.../index.html" | 152 +
.../index.html" | 112 +
.../index.html" | 14 +
.../index.html" | 282 +
.../index.html" | 80 +
.../index.html" | 23 +
.../index.html" | 10 +
zh/blog/2018/08/07/dubbo-101/index.html | 147 +
.../index.html" | 416 +
.../index.html" | 40 +
.../index.html" | 198 +
.../index.html" | 147 +
.../index.html" | 189 +
.../index.html" | 99 +
.../index.html" | 34 +
.../index.html" | 101 +
.../index.html" | 94 +
.../index.html" | 132 +
.../index.html" | 102 +
.../index.html" | 122 +
.../index.html" | 123 +
.../index.html" | 123 +
.../index.html" | 56 +
.../index.html" | 154 +
.../index.html" | 71 +
.../index.html" | 108 +
.../index.html" | 515 +
.../index.html" | 10 +
.../index.html" | 244 +
.../index.html" | 206 +
.../index.html" | 15 +
.../index.html" | 21 +
.../index.html" | 33 +
.../index.html" | 143 +
.../index.html" | 307 +
.../index.html" | 10 +
.../index.html" | 74 +
.../index.html" | 20 +
.../01/07/\346\265\205\350\260\210-rpc/index.html" | 50 +
.../index.html" | 182 +
.../index.html" | 152 +
.../26/\351\201\207\350\247\201dubbo/index.html" | 13 +
.../index.html" | 204 +
.../index.html" | 107 +
.../index.html" | 74 +
.../index.html" | 118 +
.../index.html" | 281 +
.../index.html" | 59 +
.../index.html" | 443 +
.../index.html" | 61 +
.../index.html" | 35 +
.../index.html" | 174 +
zh/blog/2019/08/26/service-test/index.html | 132 +
.../index.html" | 219 +
.../index.html" | 72 +
.../index.html" | 140 +
.../2-grpc-\345\222\214-protobuf/index.html" | 365 +
.../index.html" | 31 +
.../index.html" | 35 +
.../index.html" | 14 +
.../index.html" | 58 +
.../index.html" | 44 +
.../index.html" | 88 +
.../index.html" | 123 +
.../index.html" | 96 +
.../index.html" | 639 +
.../index.html" | 48 +
.../index.html" | 14 +
.../index.html" | 104 +
.../index.html" | 65 +
.../index.html" | 10 +
.../index.html" | 95 +
.../index.html" | 10 +
.../index.html" | 117 +
.../index.html" | 10 +
.../index.html" | 83 +
.../index.html" | 10 +
zh/blog/2021/01/12/dubbo-go-1.4.0/index.html | 18 +
.../index.html" | 87 +
.../index.html" | 97 +
zh/blog/2021/01/14/dubbo-go-1.5.0/index.html | 13 +
zh/blog/2021/01/14/dubbo-go-1.5.1/index.html | 58 +
.../2021/01/14/dubbo-go-hessian2-v1.6.0/index.html | 18 +
.../2021/01/14/dubbo-go-hessian2-v1.7.0/index.html | 140 +
.../index.html" | 111 +
.../index.html" | 26 +
.../index.html" | 62 +
.../index.html" | 175 +
.../index.html" | 23 +
.../index.html" | 13 +
.../index.html" | 181 +
.../index.html" | 89 +
.../index.html" | 158 +
.../index.html" | 28 +
.../index.html" | 271 +
.../index.html" | 13 +
.../index.html" | 331 +
.../index.html" | 14 +
.../index.html" | 494 +
.../index.html" | 417 +
.../index.html" | 130 +
.../index.html" | 18 +
.../index.html" | 55 +
.../index.html" | 14 +
.../index.html" | 13 +
.../index.html" | 140 +
.../index.html" | 138 +
.../index.html" | 102 +
.../index.html" | 88 +
.../index.html" | 85 +
.../index.html" | 85 +
.../index.html" | 138 +
.../index.html" | 601 +
.../index.html" | 211 +
.../index.html" | 613 +
.../index.html" | 138 +
.../index.html" | 254 +
.../index.html" | 190 +
.../index.html" | 86 +
.../index.html" | 110 +
.../index.html" | 135 +
.../index.html" | 39 +
.../index.html" | 265 +
.../index.html" | 336 +
.../index.html" | 337 +
.../index.html" | 632 +
.../index.html" | 742 +
.../index.html" | 622 +
.../index.html" | 414 +
.../index.html" | 105 +
.../index.html" | 17 +
.../index.html" | 375 +
.../index.html" | 207 +
.../index.html" | 261 +
.../index.html" | 112 +
.../index.html" | 13 +
.../index.html" | 13 +
.../index.html" | 132 +
.../index.html" | 13 +
.../index.html" | 13 +
.../index.html" | 44 +
zh/blog/contact/committer/index.html | 11 +
zh/blog/contact/committer/index.xml | 154 +
zh/blog/contact/committer/release-guide/index.html | 11 +
zh/blog/contact/committer/release-guide/index.xml | 454 +
zh/blog/contact/contributor/index.html | 11 +
zh/blog/contact/contributor/index.xml | 355 +
zh/blog/contact/index.html | 18 +
zh/blog/contact/index.xml | 1 +
zh/blog/golang/index.html | 28 +
zh/blog/golang/index.xml | 4953 +++++++
zh/blog/golang/page/1/index.html | 1 +
zh/blog/golang/page/2/index.html | 30 +
zh/blog/golang/page/3/index.html | 18 +
zh/blog/index.html | 20 +
zh/blog/index.xml | 14472 +++++++++++++++++++
zh/blog/integration/index.html | 26 +
zh/blog/integration/index.xml | 3411 +++++
zh/blog/integration/page/1/index.html | 1 +
zh/blog/integration/page/2/index.html | 16 +
zh/blog/java/codeanalysis/3.0.8/index.html | 21 +
zh/blog/java/codeanalysis/3.0.8/index.xml | 9512 ++++++++++++
zh/blog/java/codeanalysis/3.0.8/page/1/index.html | 1 +
zh/blog/java/codeanalysis/3.0.8/page/2/index.html | 22 +
zh/blog/java/codeanalysis/3.0.8/page/3/index.html | 12 +
zh/blog/java/codeanalysis/index.html | 19 +
zh/blog/java/codeanalysis/index.xml | 751 +
zh/blog/java/codeanalysis/page/1/index.html | 1 +
zh/blog/java/demos/index.html | 23 +
zh/blog/java/demos/index.xml | 9567 ++++++++++++
zh/blog/java/demos/page/1/index.html | 1 +
zh/blog/java/demos/page/2/index.html | 23 +
zh/blog/java/demos/page/3/index.html | 26 +
zh/blog/java/demos/page/4/index.html | 27 +
zh/blog/java/demos/page/5/index.html | 20 +
zh/blog/java/index.html | 10 +
zh/blog/java/index.xml | 1 +
zh/blog/java/page/1/index.html | 1 +
zh/blog/news/index.html | 26 +
zh/blog/news/index.xml | 1233 ++
zh/blog/news/page/1/index.html | 1 +
zh/blog/news/page/10/index.html | 21 +
zh/blog/news/page/11/index.html | 17 +
zh/blog/news/page/2/index.html | 20 +
zh/blog/news/page/3/index.html | 29 +
zh/blog/news/page/4/index.html | 22 +
zh/blog/news/page/5/index.html | 20 +
zh/blog/news/page/6/index.html | 26 +
zh/blog/news/page/7/index.html | 29 +
zh/blog/news/page/8/index.html | 27 +
zh/blog/news/page/9/index.html | 25 +
zh/blog/news/releases/index.html | 23 +
zh/blog/news/releases/index.xml | 1210 ++
zh/blog/news/releases/page/1/index.html | 1 +
zh/blog/news/releases/page/2/index.html | 11 +
zh/blog/notices/index.html | 11 +
zh/blog/notices/index.xml | 57 +
zh/blog/others/index.html | 12 +
zh/blog/others/index.xml | 201 +
zh/blog/others/page/1/index.html | 1 +
zh/blog/page/1/index.html | 1 +
zh/blog/page/10/index.html | 26 +
zh/blog/page/11/index.html | 28 +
zh/blog/page/12/index.html | 26 +
zh/blog/page/13/index.html | 27 +
zh/blog/page/14/index.html | 21 +
zh/blog/page/15/index.html | 31 +
zh/blog/page/16/index.html | 31 +
zh/blog/page/17/index.html | 12 +
zh/blog/page/2/index.html | 22 +
zh/blog/page/3/index.html | 23 +
zh/blog/page/4/index.html | 21 +
zh/blog/page/5/index.html | 29 +
zh/blog/page/6/index.html | 29 +
zh/blog/page/7/index.html | 28 +
zh/blog/page/8/index.html | 23 +
zh/blog/page/9/index.html | 21 +
zh/blog/pixiu/index.html | 12 +
zh/blog/pixiu/index.xml | 326 +
zh/blog/pixiu/page/1/index.html | 1 +
zh/blog/releases/index.html | 24 +
zh/blog/releases/index.xml | 1204 ++
zh/blog/releases/page/1/index.html | 1 +
zh/blog/releases/page/2/index.html | 12 +
zh/blog/rust/index.html | 11 +
zh/blog/rust/index.xml | 198 +
zh/blog/rust/page/1/index.html | 1 +
zh/community/index.html | 9 +
zh/community/index.xml | 1 +
.../committer/apache-dubbo-page_dev/index.html | 46 +
zh/contribution-guidelines/committer/index.html | 11 +
zh/contribution-guidelines/committer/index.xml | 485 +
.../committer/label-an-issue-guide_dev/index.html | 20 +
.../committer/new-committer-guide_dev/index.html | 31 +
.../committer/release-guide_dev/index.html | 215 +
.../committer/website-guide_dev/index.html | 11 +
.../contributor/become-a-committer_dev/index.html | 26 +
.../contributor/cla-signing-guide_dev/index.html | 14 +
.../dubbo-extension-guide_dev/index.html | 28 +
zh/contribution-guidelines/contributor/index.html | 11 +
zh/contribution-guidelines/contributor/index.xml | 374 +
.../mailing-list-subscription-guide_dev/index.html | 75 +
.../new-contributor-guide_dev/index.html | 50 +
.../reporting-security-issues_dev/index.html | 23 +
.../software-donation-guide_dev/index.html | 105 +
.../contributor/test-coverage-guide_dev/index.html | 11 +
zh/contribution-guidelines/index.html | 18 +
zh/contribution-guidelines/index.xml | 1 +
zh/docs/advanced/accesslog/index.html | 13 +
zh/docs/advanced/async-call/index.html | 62 +
.../advanced/async-execute-on-provider/index.html | 52 +
zh/docs/advanced/attachment/index.html | 21 +
zh/docs/advanced/auth/index.html | 14 +
zh/docs/advanced/callback-parameter/index.html | 86 +
zh/docs/advanced/concurrency-control/index.html | 25 +
zh/docs/advanced/config-connections/index.html | 15 +
zh/docs/advanced/config-rule-deprecated/index.html | 18 +
zh/docs/advanced/config-rule/index.html | 101 +
zh/docs/advanced/consumer-threadpool/index.html | 11 +
zh/docs/advanced/context/index.html | 36 +
zh/docs/advanced/delay-publish/index.html | 14 +
.../advanced/distributed-transaction/index.html | 11 +
zh/docs/advanced/dump/index.html | 16 +
zh/docs/advanced/echo-service/index.html | 21 +
zh/docs/advanced/events-notify/index.html | 58 +
zh/docs/advanced/explicit-target/index.html | 15 +
.../advanced/fault-tolerent-strategy/index.html | 27 +
zh/docs/advanced/generic-reference/index.html | 71 +
zh/docs/advanced/generic-service/index.html | 36 +
zh/docs/advanced/graceful-shutdown/index.html | 14 +
zh/docs/advanced/group-merger/index.html | 25 +
zh/docs/advanced/hostname-binding/index.html | 16 +
zh/docs/advanced/index.html | 11 +
zh/docs/advanced/index.xml | 2816 ++++
zh/docs/advanced/lazy-connect/index.html | 12 +
zh/docs/advanced/loadbalance/index.html | 19 +
zh/docs/advanced/local-call/index.html | 19 +
zh/docs/advanced/local-mock/index.html | 34 +
zh/docs/advanced/local-stub/index.html | 32 +
zh/docs/advanced/logger-strategy/index.html | 14 +
zh/docs/advanced/migration-invoker/index.html | 77 +
zh/docs/advanced/multi-protocols/index.html | 39 +
zh/docs/advanced/multi-registry/index.html | 62 +
zh/docs/advanced/multi-versions/index.html | 16 +
zh/docs/advanced/netty4/index.html | 20 +
zh/docs/advanced/parameter-validation/index.html | 144 +
zh/docs/advanced/pb-generic-reference/index.html | 64 +
zh/docs/advanced/preflight-check/index.html | 20 +
zh/docs/advanced/protobuf-idl/index.html | 35 +
zh/docs/advanced/protobufinterface/index.html | 38 +
zh/docs/advanced/reference-config-cache/index.html | 25 +
zh/docs/advanced/registry-only/index.html | 15 +
zh/docs/advanced/result-cache/index.html | 15 +
.../advanced/routing-rule-deprecated/index.html | 53 +
zh/docs/advanced/routing-rule/index.html | 65 +
zh/docs/advanced/serialization-security/index.html | 12 +
zh/docs/advanced/serialization/index.html | 57 +
zh/docs/advanced/service-container/index.html | 16 +
zh/docs/advanced/service-downgrade/index.html | 14 +
zh/docs/advanced/service-group/index.html | 16 +
zh/docs/advanced/set-host/index.html | 18 +
zh/docs/advanced/simplify-registry-data/index.html | 106 +
zh/docs/advanced/static-service/index.html | 16 +
zh/docs/advanced/stickiness/index.html | 15 +
zh/docs/advanced/subscribe-only/index.html | 13 +
zh/docs/advanced/thread-model/index.html | 12 +
zh/docs/advanced/tls/index.html | 28 +
zh/docs/advanced/token-authorization/index.html | 19 +
zh/docs/concepts/configuration/index.html | 11 +
zh/docs/concepts/extensibility/index.html | 18 +
zh/docs/concepts/index.html | 12 +
zh/docs/concepts/index.xml | 442 +
.../registry-configcenter-metadata/index.html | 14 +
zh/docs/concepts/rpc-protocol/index.html | 17 +
zh/docs/concepts/service-discovery/index.html | 27 +
zh/docs/concepts/traffic-management/index.html | 11 +
.../committer/apache-dubbo-page_dev/index.html | 1001 ++
.../contribution-guidelines/committer/index.html | 979 ++
.../contribution-guidelines/committer/index.xml | 457 +
.../committer/label-an-issue-guide_dev/index.html | 996 ++
.../committer/new-committer-guide_dev/index.html | 1072 ++
.../committer/release-guide_dev/index.html | 1358 ++
.../committer/website-guide_dev/index.html | 955 ++
.../contributor/become-a-committer_dev/index.html | 973 ++
.../contributor/cla-signing-guide_dev/index.html | 990 ++
.../dubbo-extension-guide_dev/index.html | 1008 ++
.../contribution-guidelines/contributor/index.html | 997 ++
.../contribution-guidelines/contributor/index.xml | 330 +
.../mailing-list-subscription-guide_dev/index.html | 1036 ++
.../new-contributor-guide_dev/index.html | 1078 ++
.../reporting-security-issues_dev/index.html | 976 ++
.../software-donation-guide_dev/index.html | 1059 ++
.../contributor/test-coverage-guide_dev/index.html | 982 ++
zh/docs/contribution-guidelines/index.html | 1047 ++
zh/docs/contribution-guidelines/index.xml | 1 +
zh/docs/examples/configuration-override/index.html | 11 +
zh/docs/examples/index.html | 11 +
zh/docs/examples/index.xml | 140 +
.../routing/ab-testing-deployment/index.html | 11 +
.../routing/blue-green-deployment/index.html | 11 +
.../examples/routing/canary-deployment/index.html | 11 +
.../routing/demo-rule-deployment/index.html | 224 +
.../routing/dynamic-rule-deployment/index.html | 79 +
zh/docs/examples/routing/index.html | 11 +
zh/docs/examples/routing/index.xml | 432 +
.../routing/weight-rule-deployment/index.html | 48 +
zh/docs/examples/service-discovery/index.html | 55 +
zh/docs/index.html | 11 +
zh/docs/index.xml | 6824 +++++++++
zh/docs/introduction/index.html | 13 +
zh/docs/languages/erlang/index.html | 11 +
zh/docs/languages/erlang/index.xml | 130 +
zh/docs/languages/erlang/quick-start/index.html | 27 +
zh/docs/languages/erlang/reference/index.html | 19 +
zh/docs/languages/erlang/serialization/index.html | 15 +
zh/docs/languages/erlang/service/index.html | 19 +
.../dubbo-go-1.5/configuration/client/index.html | 147 +
.../golang/dubbo-go-1.5/configuration/index.html | 11 +
.../golang/dubbo-go-1.5/configuration/index.xml | 351 +
.../dubbo-go-1.5/configuration/provider/index.html | 138 +
zh/docs/languages/golang/dubbo-go-1.5/index.html | 11 +
zh/docs/languages/golang/dubbo-go-1.5/index.xml | 185 +
.../golang/dubbo-go-1.5/quick-start/index.html | 96 +
.../concept/app_and_interface/index.html | 11 +
.../dubbo-go-3.0/concept/configuration/index.html | 176 +
.../golang/dubbo-go-3.0/concept/index.html | 11 +
.../golang/dubbo-go-3.0/concept/index.xml | 529 +
.../dubbo-go-3.0/concept/protocol/index.html | 54 +
.../dubbo-go-3.0/concept/registry/index.html | 116 +
.../dubbo-go-3.0/developer/design/index.html | 11 +
.../golang/dubbo-go-3.0/developer/index.html | 11 +
.../golang/dubbo-go-3.0/developer/index.xml | 8 +
zh/docs/languages/golang/dubbo-go-3.0/index.html | 11 +
zh/docs/languages/golang/dubbo-go-3.0/index.xml | 16 +
.../dubbo-go-3.0/preface/3.0_feature/index.html | 11 +
.../dubbo-go-3.0/preface/architecture/index.html | 11 +
.../golang/dubbo-go-3.0/preface/index.html | 11 +
.../golang/dubbo-go-3.0/preface/index.xml | 63 +
.../golang/dubbo-go-3.0/quickstart/index.html | 11 +
.../golang/dubbo-go-3.0/quickstart/index.xml | 455 +
.../quickstart/quickstart_dubbo/index.html | 162 +
.../quickstart/quickstart_triple/index.html | 226 +
.../samples/config-center-dynamic/index.html | 111 +
.../dubbo-go-3.0/samples/custom-filter/index.html | 46 +
.../dubbo-go-3.0/samples/custom-logger/index.html | 68 +
.../samples/exception_response/index.html | 93 +
.../golang/dubbo-go-3.0/samples/generic/index.html | 72 +
.../samples/go_java_interactive/index.html | 541 +
.../golang/dubbo-go-3.0/samples/index.html | 11 +
.../golang/dubbo-go-3.0/samples/index.xml | 1746 +++
.../dubbo-go-3.0/samples/mesh_router/index.html | 82 +
.../golang/dubbo-go-3.0/samples/metrics/index.html | 174 +
.../dubbo-go-3.0/samples/registry/index.html | 85 +
.../dubbo-go-3.0/samples/samples_repo/index.html | 51 +
.../samples/service-discovery/index.html | 42 +
.../dubbo-go-3.0/samples/start-check/index.html | 18 +
zh/docs/languages/golang/go-specific/index.html | 11 +
zh/docs/languages/golang/index.html | 11 +
zh/docs/languages/golang/index.xml | 192 +
zh/docs/languages/golang/quick-start/index.html | 114 +
zh/docs/languages/index.html | 11 +
zh/docs/languages/index.xml | 10 +
.../java/configuration/annotation/index.html | 640 +
.../languages/java/configuration/api/index.html | 680 +
.../java/configuration/config-center/index.html | 666 +
.../java/configuration/properties/index.html | 590 +
.../languages/java/configuration/xml/index.html | 694 +
zh/docs/languages/java/index.html | 11 +
zh/docs/languages/java/index.xml | 228 +
zh/docs/languages/java/java-specific/index.html | 58 +
zh/docs/languages/java/quick-start/index.html | 137 +
zh/docs/migration/index.html | 11 +
zh/docs/migration/index.xml | 416 +
.../migration-and-compatibility-guide/index.html | 16 +
zh/docs/migration/migration-routingrule/index.html | 11 +
zh/docs/migration/migration-rule/index.html | 730 +
.../migration-service-discovery/index.html | 28 +
zh/docs/migration/migration-triple/index.html | 163 +
zh/docs/new-in-dubbo3/index.html | 59 +
zh/docs/notices/index.html | 952 ++
zh/docs/notices/index.xml | 20 +
zh/docs/notices/security/index.html | 968 ++
zh/docs/performance/benchmarking/index.html | 23 +
zh/docs/performance/index.html | 11 +
zh/docs/performance/index.xml | 141 +
zh/docs/quick-start/index.html | 90 +
zh/docs/references/api/index.html | 30 +
zh/docs/references/config-center/index.html | 15 +
.../references/configuration/annotation/index.html | 56 +
zh/docs/references/configuration/api/index.html | 257 +
.../configuration/config-center/index.html | 685 +
.../configuration-load-process/index.html | 701 +
.../configuration/environment-variables/index.html | 19 +
.../configuration/external-config/index.html | 42 +
zh/docs/references/configuration/index.html | 11 +
zh/docs/references/configuration/index.xml | 1009 ++
.../references/configuration/overview/index.html | 71 +
.../references/configuration/properties/index.html | 125 +
zh/docs/references/configuration/xml/index.html | 41 +
zh/docs/references/features/accesslog/index.html | 557 +
zh/docs/references/features/async-call/index.html | 648 +
.../features/async-execute-on-provider/index.html | 619 +
zh/docs/references/features/attachment/index.html | 571 +
zh/docs/references/features/auth/index.html | 593 +
.../features/callback-parameter/index.html | 639 +
.../features/concurrency-control/index.html | 594 +
.../features/config-connections/index.html | 573 +
.../features/config-rule-deprecated/index.html | 589 +
zh/docs/references/features/config-rule/index.html | 716 +
.../features/consumer-threadpool/index.html | 579 +
zh/docs/references/features/context/index.html | 581 +
.../references/features/delay-publish/index.html | 603 +
.../features/distributed-transaction/index.html | 555 +
zh/docs/references/features/dump/index.html | 564 +
.../references/features/echo-service/index.html | 566 +
.../references/features/events-notify/index.html | 623 +
.../references/features/explicit-target/index.html | 590 +
.../features/fault-tolerent-strategy/index.html | 621 +
.../features/generic-reference/index.html | 628 +
.../references/features/generic-service/index.html | 588 +
.../features/graceful-shutdown/index.html | 574 +
.../references/features/group-merger/index.html | 583 +
.../features/hostname-binding/index.html | 631 +
zh/docs/references/features/index.html | 883 ++
zh/docs/references/features/index.xml | 2463 ++++
.../references/features/lazy-connect/index.html | 558 +
zh/docs/references/features/loadbalance/index.html | 611 +
zh/docs/references/features/local-call/index.html | 574 +
zh/docs/references/features/local-mock/index.html | 623 +
zh/docs/references/features/local-stub/index.html | 588 +
.../references/features/logger-strategy/index.html | 567 +
.../references/features/multi-protocols/index.html | 585 +
.../references/features/multi-registry/index.html | 625 +
.../references/features/multi-versions/index.html | 573 +
zh/docs/references/features/netty4/index.html | 574 +
.../features/parameter-validation/index.html | 721 +
.../features/pb-generic-reference/index.html | 624 +
.../references/features/preflight-check/index.html | 588 +
.../references/features/protobuf-idl/index.html | 578 +
.../features/reference-config-cache/index.html | 572 +
.../references/features/registry-only/index.html | 559 +
.../references/features/result-cache/index.html | 571 +
.../features/routing-rule-deprecated/index.html | 735 +
.../references/features/routing-rule/index.html | 774 +
.../references/features/serialization/index.html | 826 ++
.../features/service-container/index.html | 609 +
.../features/service-downgrade/index.html | 565 +
.../references/features/service-group/index.html | 565 +
zh/docs/references/features/set-host/index.html | 616 +
.../features/simplify-registry-data/index.html | 859 ++
.../references/features/static-service/index.html | 568 +
zh/docs/references/features/stickiness/index.html | 559 +
.../references/features/subscribe-only/index.html | 559 +
.../references/features/thread-model/index.html | 572 +
zh/docs/references/features/tls/index.html | 579 +
.../features/token-authorization/index.html | 566 +
zh/docs/references/graalvm/index.html | 11 +
zh/docs/references/graalvm/index.xml | 177 +
.../references/graalvm/support-graalvm/index.html | 181 +
zh/docs/references/index.html | 11 +
zh/docs/references/index.xml | 1079 ++
zh/docs/references/lifecycle/brief/index.html | 47 +
zh/docs/references/lifecycle/index.html | 11 +
zh/docs/references/lifecycle/index.xml | 1010 ++
zh/docs/references/lifecycle/liveness/index.html | 54 +
zh/docs/references/lifecycle/readiness/index.html | 51 +
zh/docs/references/lifecycle/rest/index.html | 363 +
zh/docs/references/lifecycle/startup/index.html | 51 +
zh/docs/references/maven/index.html | 13 +
zh/docs/references/metadata/index.html | 307 +
zh/docs/references/protobuf/idl/index.html | 11 +
zh/docs/references/protobuf/index.html | 11 +
zh/docs/references/protobuf/index.xml | 6 +
zh/docs/references/protocols/dubbo/index.html | 20 +
zh/docs/references/protocols/grpc/index.html | 12 +
zh/docs/references/protocols/hessian/index.html | 22 +
zh/docs/references/protocols/http/index.html | 23 +
zh/docs/references/protocols/index.html | 11 +
zh/docs/references/protocols/index.xml | 1597 ++
zh/docs/references/protocols/memcached/index.html | 18 +
zh/docs/references/protocols/redis/index.html | 18 +
zh/docs/references/protocols/rest/index.html | 363 +
zh/docs/references/protocols/rmi/index.html | 20 +
zh/docs/references/protocols/thrift/index.html | 17 +
zh/docs/references/protocols/tri/index.html | 212 +
zh/docs/references/protocols/webservice/index.html | 39 +
zh/docs/references/qos/index.html | 119 +
zh/docs/references/registry/index.html | 11 +
zh/docs/references/registry/index.xml | 299 +
zh/docs/references/registry/multicast/index.html | 19 +
zh/docs/references/registry/nacos/index.html | 69 +
zh/docs/references/registry/redis/index.html | 15 +
zh/docs/references/registry/simple/index.html | 31 +
zh/docs/references/registry/zookeeper/index.html | 53 +
.../references/routers/destination-rule/index.html | 43 +
zh/docs/references/routers/index.html | 210 +
zh/docs/references/routers/index.xml | 1109 ++
.../references/routers/virtualservice/index.html | 251 +
zh/docs/references/spis/cache/index.html | 69 +
zh/docs/references/spis/cluster/index.html | 60 +
zh/docs/references/spis/compiler/index.html | 52 +
zh/docs/references/spis/config-center/index.html | 39 +
zh/docs/references/spis/container/index.html | 54 +
zh/docs/references/spis/dispatcher/index.html | 52 +
zh/docs/references/spis/dubbo-spi/index.html | 509 +
zh/docs/references/spis/exchanger/index.html | 70 +
.../references/spis/exporter-listener/index.html | 59 +
.../references/spis/extension-factory/index.html | 50 +
zh/docs/references/spis/filter/index.html | 58 +
zh/docs/references/spis/index.html | 11 +
zh/docs/references/spis/index.xml | 2205 +++
.../references/spis/invoker-listener/index.html | 58 +
zh/docs/references/spis/load-balance/index.html | 55 +
zh/docs/references/spis/logger-adapter/index.html | 67 +
zh/docs/references/spis/merger/index.html | 50 +
zh/docs/references/spis/monitor/index.html | 63 +
zh/docs/references/spis/networker/index.html | 52 +
zh/docs/references/spis/page/index.html | 52 +
zh/docs/references/spis/protocol/index.html | 111 +
zh/docs/references/spis/proxy-factory/index.html | 55 +
zh/docs/references/spis/registry/index.html | 167 +
zh/docs/references/spis/remoting/index.html | 96 +
zh/docs/references/spis/router/index.html | 49 +
zh/docs/references/spis/serialize/index.html | 55 +
zh/docs/references/spis/status-checker/index.html | 52 +
zh/docs/references/spis/telnet-handler/index.html | 53 +
zh/docs/references/spis/threadpool/index.html | 53 +
zh/docs/references/spis/validation/index.html | 67 +
zh/docs/references/telnet/index.html | 13 +
.../references/xml/dubbo-application/index.html | 11 +
zh/docs/references/xml/dubbo-argument/index.html | 14 +
.../references/xml/dubbo-config-center/index.html | 11 +
zh/docs/references/xml/dubbo-consumer/index.html | 11 +
zh/docs/references/xml/dubbo-method/index.html | 14 +
zh/docs/references/xml/dubbo-module/index.html | 11 +
zh/docs/references/xml/dubbo-monitor/index.html | 11 +
zh/docs/references/xml/dubbo-parameter/index.html | 15 +
zh/docs/references/xml/dubbo-protocol/index.html | 11 +
zh/docs/references/xml/dubbo-provider/index.html | 11 +
zh/docs/references/xml/dubbo-reference/index.html | 11 +
zh/docs/references/xml/dubbo-registry/index.html | 11 +
zh/docs/references/xml/dubbo-service/index.html | 11 +
zh/docs/references/xml/index.html | 11 +
zh/docs/references/xml/index.xml | 2382 +++
zh/docs/v2.7/admin/index.html | 961 ++
zh/docs/v2.7/admin/index.xml | 15 +
.../v2.7/admin/install/admin-console/index.html | 1001 ++
.../v2.7/admin/install/consumer-demo/index.html | 973 ++
zh/docs/v2.7/admin/install/index.html | 1001 ++
zh/docs/v2.7/admin/install/index.xml | 145 +
.../v2.7/admin/install/monitor-center/index.html | 955 ++
.../v2.7/admin/install/provider-demo/index.html | 970 ++
zh/docs/v2.7/admin/install/redis/index.html | 1023 ++
zh/docs/v2.7/admin/install/zookeeper/index.html | 1042 ++
zh/docs/v2.7/admin/ops/apidocs/index.html | 1083 ++
zh/docs/v2.7/admin/ops/functions/index.html | 977 ++
zh/docs/v2.7/admin/ops/governance/index.html | 1062 ++
zh/docs/v2.7/admin/ops/index.html | 1001 ++
zh/docs/v2.7/admin/ops/index.xml | 643 +
zh/docs/v2.7/admin/ops/introduction/index.html | 1032 ++
zh/docs/v2.7/admin/ops/pinpoint/index.html | 1384 ++
zh/docs/v2.7/admin/ops/search/index.html | 961 ++
zh/docs/v2.7/admin/ops/skywalking/index.html | 1085 ++
zh/docs/v2.7/admin/ops/test/index.html | 955 ++
zh/docs/v2.7/dev/build/index.html | 1009 ++
zh/docs/v2.7/dev/checklist/index.html | 985 ++
zh/docs/v2.7/dev/code-smell/index.html | 1092 ++
zh/docs/v2.7/dev/coding/index.html | 1023 ++
zh/docs/v2.7/dev/contract/index.html | 963 ++
zh/docs/v2.7/dev/design/index.html | 1047 ++
zh/docs/v2.7/dev/implementation/index.html | 1155 ++
zh/docs/v2.7/dev/impls/cache/index.html | 1035 ++
zh/docs/v2.7/dev/impls/cluster/index.html | 1028 ++
zh/docs/v2.7/dev/impls/compiler/index.html | 1017 ++
zh/docs/v2.7/dev/impls/config-center/index.html | 1072 ++
zh/docs/v2.7/dev/impls/container/index.html | 1019 ++
zh/docs/v2.7/dev/impls/dispatcher/index.html | 1019 ++
zh/docs/v2.7/dev/impls/exchanger/index.html | 1037 ++
.../v2.7/dev/impls/exporter-listener/index.html | 1020 ++
.../v2.7/dev/impls/extension-factory/index.html | 1014 ++
zh/docs/v2.7/dev/impls/filter/index.html | 1040 ++
zh/docs/v2.7/dev/impls/index.html | 1115 ++
zh/docs/v2.7/dev/impls/index.xml | 1447 ++
zh/docs/v2.7/dev/impls/invoker-listener/index.html | 1019 ++
zh/docs/v2.7/dev/impls/load-balance/index.html | 1020 ++
zh/docs/v2.7/dev/impls/logger-adapter/index.html | 1036 ++
zh/docs/v2.7/dev/impls/merger/index.html | 1016 ++
zh/docs/v2.7/dev/impls/monitor/index.html | 1028 ++
zh/docs/v2.7/dev/impls/networker/index.html | 1016 ++
zh/docs/v2.7/dev/impls/page/index.html | 1019 ++
zh/docs/v2.7/dev/impls/protocol/index.html | 1094 ++
zh/docs/v2.7/dev/impls/proxy-factory/index.html | 1019 ++
zh/docs/v2.7/dev/impls/registry/index.html | 1137 ++
zh/docs/v2.7/dev/impls/remoting/index.html | 1067 ++
zh/docs/v2.7/dev/impls/router/index.html | 1021 ++
zh/docs/v2.7/dev/impls/serialize/index.html | 1025 ++
zh/docs/v2.7/dev/impls/status-checker/index.html | 1021 ++
zh/docs/v2.7/dev/impls/telnet-handler/index.html | 1028 ++
zh/docs/v2.7/dev/impls/threadpool/index.html | 1017 ++
zh/docs/v2.7/dev/impls/validation/index.html | 1029 ++
zh/docs/v2.7/dev/index.html | 1028 ++
zh/docs/v2.7/dev/index.xml | 693 +
zh/docs/v2.7/dev/principals/code-detail/index.html | 1007 ++
.../v2.7/dev/principals/configuration/index.html | 1050 ++
zh/docs/v2.7/dev/principals/dummy/index.html | 1142 ++
.../v2.7/dev/principals/expansibility/index.html | 970 ++
zh/docs/v2.7/dev/principals/extension/index.html | 1076 ++
.../dev/principals/general-knowledge/index.html | 1012 ++
zh/docs/v2.7/dev/principals/index.html | 1001 ++
zh/docs/v2.7/dev/principals/index.xml | 382 +
.../v2.7/dev/principals/introduction/index.html | 956 ++
zh/docs/v2.7/dev/principals/robustness/index.html | 1085 ++
zh/docs/v2.7/dev/release/index.html | 991 ++
.../v2.7/dev/source/adaptive-extension/index.html | 1600 ++
zh/docs/v2.7/dev/source/cluster/index.html | 1482 ++
zh/docs/v2.7/dev/source/directory/index.html | 1443 ++
zh/docs/v2.7/dev/source/dubbo-spi/index.html | 1321 ++
zh/docs/v2.7/dev/source/export-service/index.html | 2289 +++
zh/docs/v2.7/dev/source/index.html | 1007 ++
zh/docs/v2.7/dev/source/index.xml | 6506 +++++++++
zh/docs/v2.7/dev/source/loadbalance/index.html | 1667 +++
zh/docs/v2.7/dev/source/refer-service/index.html | 1775 +++
zh/docs/v2.7/dev/source/router/index.html | 1384 ++
.../dev/source/service-invoking-process/index.html | 2826 ++++
zh/docs/v2.7/dev/spi/index.html | 1131 ++
zh/docs/v2.7/dev/tck/index.html | 965 ++
zh/docs/v2.7/index.html | 964 ++
zh/docs/v2.7/index.xml | 3 +
zh/docs/v2.7/user/benchmark-tool/index.html | 990 ++
zh/docs/v2.7/user/best-practice/index.html | 995 ++
zh/docs/v2.7/user/capacity-plan/index.html | 973 ++
.../v2.7/user/configuration/annotation/index.html | 1034 ++
zh/docs/v2.7/user/configuration/api/index.html | 1074 ++
.../user/configuration/config-center/index.html | 1060 ++
.../configuration-load-process/index.html | 1096 ++
.../configuration/environment-variables/index.html | 976 ++
zh/docs/v2.7/user/configuration/index.html | 994 ++
zh/docs/v2.7/user/configuration/index.xml | 526 +
.../v2.7/user/configuration/properties/index.html | 984 ++
zh/docs/v2.7/user/configuration/xml/index.html | 1088 ++
zh/docs/v2.7/user/coveragence/index.html | 962 ++
zh/docs/v2.7/user/dependencies/index.html | 1024 ++
zh/docs/v2.7/user/examples/accesslog/index.html | 961 ++
zh/docs/v2.7/user/examples/async-call/index.html | 1052 ++
.../examples/async-execute-on-provider/index.html | 1023 ++
zh/docs/v2.7/user/examples/attachment/index.html | 975 ++
zh/docs/v2.7/user/examples/auth/index.html | 997 ++
.../examples/broadcast-resp-collect/index.html | 1006 ++
.../user/examples/callback-parameter/index.html | 1043 ++
.../user/examples/concurrency-control/index.html | 998 ++
.../user/examples/config-connections/index.html | 977 ++
.../examples/config-rule-deprecated/index.html | 993 ++
zh/docs/v2.7/user/examples/config-rule/index.html | 1120 ++
.../user/examples/consumer-threadpool/index.html | 983 ++
zh/docs/v2.7/user/examples/context/index.html | 985 ++
.../v2.7/user/examples/delay-publish/index.html | 1007 ++
.../examples/distributed-transaction/index.html | 959 ++
zh/docs/v2.7/user/examples/dump/index.html | 968 ++
zh/docs/v2.7/user/examples/echo-service/index.html | 970 ++
.../v2.7/user/examples/events-notify/index.html | 1027 ++
.../v2.7/user/examples/explicit-target/index.html | 994 ++
.../examples/fault-tolerent-strategy/index.html | 1025 ++
.../examples/generic-invoke-with-json/index.html | 1005 ++
.../user/examples/generic-reference/index.html | 1032 ++
.../v2.7/user/examples/generic-service/index.html | 992 ++
.../user/examples/graceful-shutdown/index.html | 978 ++
zh/docs/v2.7/user/examples/group-merger/index.html | 987 ++
.../v2.7/user/examples/hostname-binding/index.html | 1035 ++
zh/docs/v2.7/user/examples/index.html | 1323 ++
zh/docs/v2.7/user/examples/index.xml | 2463 ++++
.../examples/invoke-with-specified-ip/index.html | 1015 ++
zh/docs/v2.7/user/examples/lazy-connect/index.html | 962 ++
zh/docs/v2.7/user/examples/loadbalance/index.html | 1015 ++
zh/docs/v2.7/user/examples/local-call/index.html | 978 ++
zh/docs/v2.7/user/examples/local-mock/index.html | 1027 ++
zh/docs/v2.7/user/examples/local-stub/index.html | 992 ++
.../v2.7/user/examples/logger-strategy/index.html | 971 ++
.../user/examples/msgpack-serialization/index.html | 1071 ++
.../v2.7/user/examples/multi-protocols/index.html | 989 ++
.../v2.7/user/examples/multi-registry/index.html | 1029 ++
.../v2.7/user/examples/multi-versions/index.html | 977 ++
zh/docs/v2.7/user/examples/netty4/index.html | 978 ++
.../user/examples/parameter-validation/index.html | 1125 ++
.../user/examples/pb-generic-reference/index.html | 1028 ++
.../v2.7/user/examples/preflight-check/index.html | 992 ++
zh/docs/v2.7/user/examples/protobuf-idl/index.html | 982 ++
.../examples/provider-timeout-release/index.html | 1079 ++
.../examples/reference-config-cache/index.html | 976 ++
.../v2.7/user/examples/registry-only/index.html | 963 ++
zh/docs/v2.7/user/examples/result-cache/index.html | 975 ++
.../examples/routing-rule-deprecated/index.html | 1139 ++
zh/docs/v2.7/user/examples/routing-rule/index.html | 1178 ++
.../v2.7/user/examples/serialization/index.html | 1009 ++
.../user/examples/service-container/index.html | 1013 ++
.../user/examples/service-downgrade/index.html | 969 ++
.../v2.7/user/examples/service-group/index.html | 969 ++
zh/docs/v2.7/user/examples/set-host/index.html | 1020 ++
.../examples/simplify-registry-data/index.html | 1263 ++
.../v2.7/user/examples/static-service/index.html | 972 ++
zh/docs/v2.7/user/examples/stickiness/index.html | 963 ++
.../v2.7/user/examples/subscribe-only/index.html | 963 ++
zh/docs/v2.7/user/examples/thread-model/index.html | 976 ++
zh/docs/v2.7/user/examples/tls/index.html | 983 ++
.../user/examples/token-authorization/index.html | 970 ++
.../index.html" | 965 ++
zh/docs/v2.7/user/index.html | 1064 ++
zh/docs/v2.7/user/index.xml | 2581 ++++
zh/docs/v2.7/user/languages/erlang/index.html | 979 ++
zh/docs/v2.7/user/languages/erlang/index.xml | 117 +
.../user/languages/erlang/quick-start/index.html | 1017 ++
.../user/languages/erlang/reference/index.html | 969 ++
.../user/languages/erlang/serialization/index.html | 984 ++
.../v2.7/user/languages/erlang/service/index.html | 999 ++
zh/docs/v2.7/user/languages/index.html | 958 ++
zh/docs/v2.7/user/languages/index.xml | 1 +
zh/docs/v2.7/user/maturity/index.html | 1556 ++
.../v2.7/user/new-features-in-a-glance/index.html | 1092 ++
zh/docs/v2.7/user/perf-test/index.html | 1337 ++
zh/docs/v2.7/user/preface/architecture/index.html | 1077 ++
zh/docs/v2.7/user/preface/background/index.html | 965 ++
zh/docs/v2.7/user/preface/index.html | 976 ++
zh/docs/v2.7/user/preface/index.xml | 147 +
zh/docs/v2.7/user/preface/requirements/index.html | 961 ++
zh/docs/v2.7/user/preface/usage/index.html | 986 ++
zh/docs/v2.7/user/quick-start/index.html | 1074 ++
zh/docs/v2.7/user/recommend/index.html | 1093 ++
zh/docs/v2.7/user/references/api/index.html | 999 ++
zh/docs/v2.7/user/references/index.html | 1000 ++
zh/docs/v2.7/user/references/index.xml | 616 +
zh/docs/v2.7/user/references/maven/index.html | 975 ++
zh/docs/v2.7/user/references/metadata/index.html | 1257 ++
.../v2.7/user/references/protocol/dubbo/index.html | 1081 ++
.../v2.7/user/references/protocol/grpc/index.html | 980 ++
.../user/references/protocol/hessian/index.html | 1013 ++
.../v2.7/user/references/protocol/http/index.html | 999 ++
zh/docs/v2.7/user/references/protocol/index.html | 1016 ++
zh/docs/v2.7/user/references/protocol/index.xml | 862 ++
.../user/references/protocol/memcached/index.html | 997 ++
.../v2.7/user/references/protocol/redis/index.html | 997 ++
.../v2.7/user/references/protocol/rest/index.html | 1425 ++
.../v2.7/user/references/protocol/rmi/index.html | 1029 ++
.../user/references/protocol/thrift/index.html | 998 ++
.../user/references/protocol/webservice/index.html | 1042 ++
zh/docs/v2.7/user/references/qos/index.html | 1157 ++
zh/docs/v2.7/user/references/registry/index.html | 986 ++
zh/docs/v2.7/user/references/registry/index.xml | 279 +
.../user/references/registry/multicast/index.html | 980 ++
.../v2.7/user/references/registry/nacos/index.html | 1058 ++
.../v2.7/user/references/registry/redis/index.html | 1026 ++
.../user/references/registry/simple/index.html | 986 ++
.../user/references/registry/zookeeper/index.html | 1063 ++
zh/docs/v2.7/user/references/telnet/index.html | 1071 ++
.../references/xml/dubbo-application/index.html | 1055 ++
.../user/references/xml/dubbo-argument/index.html | 1008 ++
.../references/xml/dubbo-config-center/index.html | 1091 ++
.../user/references/xml/dubbo-consumer/index.html | 1155 ++
.../user/references/xml/dubbo-method/index.html | 1140 ++
.../user/references/xml/dubbo-module/index.html | 1015 ++
.../user/references/xml/dubbo-monitor/index.html | 995 ++
.../user/references/xml/dubbo-parameter/index.html | 1002 ++
.../user/references/xml/dubbo-protocol/index.html | 1215 ++
.../user/references/xml/dubbo-provider/index.html | 1415 ++
.../user/references/xml/dubbo-reference/index.html | 1245 ++
.../user/references/xml/dubbo-registry/index.html | 1155 ++
.../user/references/xml/dubbo-service/index.html | 1285 ++
zh/docs/v2.7/user/references/xml/index.html | 1055 ++
zh/docs/v2.7/user/references/xml/index.xml | 2323 +++
zh/docs/v2.7/user/rest/index.html | 1885 +++
zh/docs/v2.7/user/serialization/index.html | 1227 ++
zh/docs/v2.7/user/simple-monitor/index.html | 1013 ++
zh/docs/v2.7/user/versions/index.html | 958 ++
zh/docs/v2.7/user/versions/index.xml | 291 +
zh/docs/v2.7/user/versions/version-270/index.html | 1251 ++
zh/docs/v3.0/advanced/index.html | 961 ++
zh/docs/v3.0/advanced/index.xml | 384 +
zh/docs/v3.0/advanced/migration-invoker/index.html | 1118 ++
zh/docs/v3.0/advanced/protobufinterface/index.html | 1213 ++
zh/docs/v3.0/concepts/configuration/index.html | 952 ++
zh/docs/v3.0/concepts/extensibility/index.html | 1033 ++
zh/docs/v3.0/concepts/index.html | 987 ++
zh/docs/v3.0/concepts/index.xml | 342 +
.../registry-configcenter-metadata/index.html | 991 ++
zh/docs/v3.0/concepts/rpc-protocol/index.html | 1141 ++
zh/docs/v3.0/concepts/service-discovery/index.html | 1008 ++
.../v3.0/concepts/traffic-management/index.html | 984 ++
zh/docs/v3.0/concepts/triple-protocol/index.html | 320 +
.../examples/configuration-override/index.html | 952 ++
zh/docs/v3.0/examples/idl-service/index.html | 312 +
zh/docs/v3.0/examples/index.html | 973 ++
zh/docs/v3.0/examples/index.xml | 86 +
zh/docs/v3.0/examples/quick-start/index.html | 1070 ++
zh/docs/v3.0/examples/routing-rule/index.html | 867 ++
.../routing/ab-testing-deployment/index.html | 974 ++
.../routing/blue-green-deployment/index.html | 974 ++
.../examples/routing/canary-deployment/index.html | 974 ++
.../routing/demo-rule-deployment/index.html | 1221 ++
.../routing/dynamic-rule-deployment/index.html | 1024 ++
zh/docs/v3.0/examples/routing/index.html | 988 ++
zh/docs/v3.0/examples/routing/index.xml | 393 +
.../routing/weight-rule-deployment/index.html | 993 ++
zh/docs/v3.0/examples/service-discovery/index.html | 951 ++
zh/docs/v3.0/index.html | 998 ++
zh/docs/v3.0/index.xml | 193 +
zh/docs/v3.0/introduction/index.html | 1061 ++
zh/docs/v3.0/languages/erlang/index.html | 976 ++
zh/docs/v3.0/languages/erlang/index.xml | 117 +
.../v3.0/languages/erlang/quick-start/index.html | 1014 ++
zh/docs/v3.0/languages/erlang/reference/index.html | 966 ++
.../v3.0/languages/erlang/serialization/index.html | 981 ++
zh/docs/v3.0/languages/erlang/service/index.html | 996 ++
.../v3.0/languages/golang/go-specific/index.html | 954 ++
zh/docs/v3.0/languages/golang/index.html | 964 ++
zh/docs/v3.0/languages/golang/index.xml | 173 +
.../v3.0/languages/golang/quick-start/index.html | 1168 ++
zh/docs/v3.0/languages/index.html | 967 ++
zh/docs/v3.0/languages/index.xml | 1 +
.../java/configuration/annotation/index.html | 1034 ++
.../languages/java/configuration/api/index.html | 1074 ++
.../java/configuration/config-center/index.html | 1060 ++
.../java/configuration/properties/index.html | 984 ++
.../languages/java/configuration/xml/index.html | 1088 ++
zh/docs/v3.0/languages/java/index.html | 994 ++
zh/docs/v3.0/languages/java/index.xml | 597 +
.../v3.0/languages/java/java-specific/index.html | 1054 ++
zh/docs/v3.0/languages/java/quick-start/index.html | 1127 ++
.../index.html | 198 +
zh/docs/v3.0/migration/index.html | 976 ++
zh/docs/v3.0/migration/index.xml | 117 +
.../migration-and-compatibility-guide/index.html | 989 ++
.../migration/migration-routingrule/index.html | 952 ++
.../migration-service-discovery/index.html | 1052 ++
zh/docs/v3.0/migration/migration-triple/index.html | 952 ++
.../migration/v3-migration-and-compatibility-guide | 46 +
zh/docs/v3.0/new-in-dubbo3/index.html | 1051 ++
zh/docs/v3.0/references/api/index.html | 996 ++
.../references/configuration/annotation/index.html | 1034 ++
.../v3.0/references/configuration/api/index.html | 1074 ++
.../configuration/config-center/index.html | 1080 ++
.../configuration-load-process/index.html | 1096 ++
.../configuration/environment-variables/index.html | 976 ++
zh/docs/v3.0/references/configuration/index.html | 994 ++
zh/docs/v3.0/references/configuration/index.xml | 546 +
.../references/configuration/properties/index.html | 984 ++
.../configuration/references/api/index.html | 331 +
.../references/configuration/references/index.html | 312 +
.../references/configuration/references/index.xml | 724 +
.../configuration/references/maven/index.html | 314 +
.../configuration/references/metadata/index.html | 599 +
.../references/protocol/dubbo/index.html | 322 +
.../references/protocol/grpc/index.html | 313 +
.../references/protocol/hessian/index.html | 323 +
.../references/protocol/http/index.html | 324 +
.../configuration/references/protocol/index.html | 312 +
.../configuration/references/protocol/index.xml | 862 ++
.../references/protocol/memcached/index.html | 319 +
.../references/protocol/redis/index.html | 319 +
.../references/protocol/rest/index.html | 591 +
.../references/protocol/rmi/index.html | 322 +
.../references/protocol/thrift/index.html | 318 +
.../references/protocol/webservice/index.html | 340 +
.../configuration/references/qos/index.html | 420 +
.../configuration/references/registry/index.html | 312 +
.../configuration/references/registry/index.xml | 279 +
.../references/registry/multicast/index.html | 320 +
.../references/registry/nacos/index.html | 370 +
.../references/registry/redis/index.html | 316 +
.../references/registry/simple/index.html | 332 +
.../references/registry/zookeeper/index.html | 350 +
.../configuration/references/telnet/index.html | 314 +
.../references/xml/dubbo-application/index.html | 312 +
.../references/xml/dubbo-argument/index.html | 315 +
.../references/xml/dubbo-config-center/index.html | 312 +
.../references/xml/dubbo-consumer/index.html | 312 +
.../references/xml/dubbo-method/index.html | 315 +
.../references/xml/dubbo-module/index.html | 312 +
.../references/xml/dubbo-monitor/index.html | 312 +
.../references/xml/dubbo-parameter/index.html | 316 +
.../references/xml/dubbo-protocol/index.html | 312 +
.../references/xml/dubbo-provider/index.html | 312 +
.../references/xml/dubbo-reference/index.html | 312 +
.../references/xml/dubbo-registry/index.html | 312 +
.../references/xml/dubbo-service/index.html | 312 +
.../configuration/references/xml/index.html | 312 +
.../configuration/references/xml/index.xml | 2323 +++
.../v3.0/references/configuration/xml/index.html | 1088 ++
.../v3.0/references/features/accesslog/index.html | 961 ++
.../v3.0/references/features/async-call/index.html | 1052 ++
.../features/async-execute-on-provider/index.html | 1023 ++
.../v3.0/references/features/attachment/index.html | 975 ++
zh/docs/v3.0/references/features/auth/index.html | 997 ++
.../features/callback-parameter/index.html | 1043 ++
.../features/concurrency-control/index.html | 998 ++
.../features/config-connections/index.html | 977 ++
.../features/config-rule-deprecated/index.html | 993 ++
.../references/features/config-rule/index.html | 1120 ++
.../features/consumer-threadpool/index.html | 983 ++
.../v3.0/references/features/context/index.html | 985 ++
.../references/features/delay-publish/index.html | 1007 ++
.../features/distributed-transaction/index.html | 959 ++
zh/docs/v3.0/references/features/dump/index.html | 968 ++
.../references/features/echo-service/index.html | 970 ++
.../references/features/events-notify/index.html | 1027 ++
.../references/features/explicit-target/index.html | 994 ++
.../features/fault-tolerent-strategy/index.html | 1025 ++
.../features/generic-reference/index.html | 1032 ++
.../references/features/generic-service/index.html | 992 ++
.../features/graceful-shutdown/index.html | 978 ++
.../references/features/group-merger/index.html | 987 ++
.../features/hostname-binding/index.html | 1035 ++
zh/docs/v3.0/references/features/index.html | 1287 ++
zh/docs/v3.0/references/features/index.xml | 2463 ++++
.../references/features/lazy-connect/index.html | 962 ++
.../references/features/loadbalance/index.html | 1015 ++
.../v3.0/references/features/local-call/index.html | 978 ++
.../v3.0/references/features/local-mock/index.html | 1027 ++
.../v3.0/references/features/local-stub/index.html | 992 ++
.../references/features/logger-strategy/index.html | 971 ++
.../references/features/multi-protocols/index.html | 989 ++
.../references/features/multi-registry/index.html | 1029 ++
.../references/features/multi-versions/index.html | 977 ++
zh/docs/v3.0/references/features/netty4/index.html | 978 ++
.../features/parameter-validation/index.html | 1125 ++
.../features/pb-generic-reference/index.html | 1028 ++
.../references/features/preflight-check/index.html | 992 ++
.../references/features/protobuf-idl/index.html | 982 ++
.../features/reference-config-cache/index.html | 976 ++
.../references/features/registry-only/index.html | 963 ++
.../references/features/result-cache/index.html | 975 ++
.../features/routing-rule-deprecated/index.html | 1139 ++
.../references/features/routing-rule/index.html | 1178 ++
.../references/features/serialization/index.html | 1230 ++
.../features/service-container/index.html | 1013 ++
.../features/service-downgrade/index.html | 969 ++
.../references/features/service-group/index.html | 969 ++
.../v3.0/references/features/set-host/index.html | 1020 ++
.../features/simplify-registry-data/index.html | 1263 ++
.../references/features/static-service/index.html | 972 ++
.../v3.0/references/features/stickiness/index.html | 963 ++
.../references/features/subscribe-only/index.html | 963 ++
.../references/features/thread-model/index.html | 976 ++
zh/docs/v3.0/references/features/tls/index.html | 983 ++
.../features/token-authorization/index.html | 970 ++
zh/docs/v3.0/references/graalvm/index.html | 549 +
zh/docs/v3.0/references/graalvm/index.xml | 117 +
.../references/graalvm/support-graalvm/index.html | 774 +
zh/docs/v3.0/references/index.html | 1033 ++
zh/docs/v3.0/references/index.xml | 967 ++
zh/docs/v3.0/references/lifecycle/brief/index.html | 1017 ++
zh/docs/v3.0/references/lifecycle/index.html | 982 ++
zh/docs/v3.0/references/lifecycle/index.xml | 956 ++
.../v3.0/references/lifecycle/liveness/index.html | 1016 ++
.../v3.0/references/lifecycle/readiness/index.html | 1016 ++
zh/docs/v3.0/references/lifecycle/rest/index.html | 1888 +++
.../v3.0/references/lifecycle/startup/index.html | 1015 ++
zh/docs/v3.0/references/maven/index.html | 972 ++
zh/docs/v3.0/references/metadata/index.html | 1388 ++
zh/docs/v3.0/references/protobuf/idl/index.html | 957 ++
zh/docs/v3.0/references/protobuf/index.html | 958 ++
zh/docs/v3.0/references/protobuf/index.xml | 3 +
zh/docs/v3.0/references/protocols/dubbo/index.html | 1078 ++
zh/docs/v3.0/references/protocols/grpc/index.html | 977 ++
.../v3.0/references/protocols/hessian/index.html | 1010 ++
zh/docs/v3.0/references/protocols/http/index.html | 996 ++
zh/docs/v3.0/references/protocols/index.html | 1018 ++
zh/docs/v3.0/references/protocols/index.xml | 1513 ++
.../v3.0/references/protocols/memcached/index.html | 994 ++
zh/docs/v3.0/references/protocols/redis/index.html | 994 ++
zh/docs/v3.0/references/protocols/rest/index.html | 1888 +++
zh/docs/v3.0/references/protocols/rmi/index.html | 1026 ++
.../v3.0/references/protocols/thrift/index.html | 995 ++
zh/docs/v3.0/references/protocols/tri/index.html | 1231 ++
.../references/protocols/webservice/index.html | 1039 ++
zh/docs/v3.0/references/qos/index.html | 1154 ++
zh/docs/v3.0/references/registry/index.html | 983 ++
zh/docs/v3.0/references/registry/index.xml | 279 +
.../v3.0/references/registry/multicast/index.html | 977 ++
zh/docs/v3.0/references/registry/nacos/index.html | 1055 ++
zh/docs/v3.0/references/registry/redis/index.html | 1023 ++
zh/docs/v3.0/references/registry/simple/index.html | 983 ++
.../v3.0/references/registry/zookeeper/index.html | 1060 ++
.../references/routers/destination-rule/index.html | 1127 ++
zh/docs/v3.0/references/routers/index.html | 1201 ++
zh/docs/v3.0/references/routers/index.xml | 1098 ++
.../v3.0/references/routers/routerule/index.html | 867 ++
.../references/routers/virtualservice/index.html | 1883 +++
zh/docs/v3.0/references/routerule/index.html | 749 +
zh/docs/v3.0/references/serializations/index.html | 310 +
zh/docs/v3.0/references/serializations/index.xml | 256 +
.../serializations/serialization/index.html | 356 +
zh/docs/v3.0/references/spis/cache/index.html | 1035 ++
zh/docs/v3.0/references/spis/cluster/index.html | 1028 ++
zh/docs/v3.0/references/spis/compiler/index.html | 1017 ++
.../v3.0/references/spis/config-center/index.html | 1072 ++
zh/docs/v3.0/references/spis/container/index.html | 1019 ++
zh/docs/v3.0/references/spis/dispatcher/index.html | 1019 ++
zh/docs/v3.0/references/spis/dubbo-spi/index.html | 1557 ++
zh/docs/v3.0/references/spis/exchanger/index.html | 1037 ++
.../references/spis/exporter-listener/index.html | 1020 ++
.../references/spis/extension-factory/index.html | 1014 ++
zh/docs/v3.0/references/spis/filter/index.html | 1040 ++
zh/docs/v3.0/references/spis/index.html | 1121 ++
zh/docs/v3.0/references/spis/index.xml | 1984 +++
.../references/spis/invoker-listener/index.html | 1019 ++
.../v3.0/references/spis/load-balance/index.html | 1020 ++
.../v3.0/references/spis/logger-adapter/index.html | 1036 ++
zh/docs/v3.0/references/spis/merger/index.html | 1016 ++
zh/docs/v3.0/references/spis/monitor/index.html | 1028 ++
zh/docs/v3.0/references/spis/networker/index.html | 1016 ++
zh/docs/v3.0/references/spis/page/index.html | 1019 ++
zh/docs/v3.0/references/spis/protocol/index.html | 1094 ++
.../v3.0/references/spis/proxy-factory/index.html | 1019 ++
zh/docs/v3.0/references/spis/registry/index.html | 1137 ++
zh/docs/v3.0/references/spis/remoting/index.html | 1067 ++
zh/docs/v3.0/references/spis/router/index.html | 1021 ++
zh/docs/v3.0/references/spis/serialize/index.html | 1025 ++
.../v3.0/references/spis/status-checker/index.html | 1021 ++
.../v3.0/references/spis/telnet-handler/index.html | 1028 ++
zh/docs/v3.0/references/spis/threadpool/index.html | 1017 ++
zh/docs/v3.0/references/spis/validation/index.html | 1029 ++
zh/docs/v3.0/references/telnet/index.html | 1068 ++
zh/docs/v3.0/references/tri/index.html | 391 +
.../references/xml/dubbo-application/index.html | 1052 ++
.../v3.0/references/xml/dubbo-argument/index.html | 1005 ++
.../references/xml/dubbo-config-center/index.html | 1088 ++
.../v3.0/references/xml/dubbo-consumer/index.html | 1152 ++
.../v3.0/references/xml/dubbo-method/index.html | 1137 ++
.../v3.0/references/xml/dubbo-module/index.html | 1012 ++
.../v3.0/references/xml/dubbo-monitor/index.html | 992 ++
.../v3.0/references/xml/dubbo-parameter/index.html | 999 ++
.../v3.0/references/xml/dubbo-protocol/index.html | 1212 ++
.../v3.0/references/xml/dubbo-provider/index.html | 1412 ++
.../v3.0/references/xml/dubbo-reference/index.html | 1242 ++
.../v3.0/references/xml/dubbo-registry/index.html | 1152 ++
.../v3.0/references/xml/dubbo-service/index.html | 1282 ++
zh/docs/v3.0/references/xml/index.html | 1052 ++
zh/docs/v3.0/references/xml/index.xml | 2323 +++
zh/docs3-building/docs/contact-/index.html | 11 +
zh/docs3-building/docs/contact-/index.xml | 1 +
.../committer/apache-dubbo-page_dev/index.html | 46 +
.../docs/contact/committer/index.html | 11 +
zh/docs3-building/docs/contact/committer/index.xml | 131 +
.../committer/label-an-issue-guide_dev/index.html | 20 +
.../committer/new-committer-guide_dev/index.html | 31 +
.../committer/release-guide/common/index.html | 92 +
.../contact/committer/release-guide/index.html | 11 +
.../docs/contact/committer/release-guide/index.xml | 454 +
.../committer/release-guide/java-sdk/index.html | 211 +
.../contact/committer/release-guide_dev/index.html | 215 +
.../contact/committer/website-guide_dev/index.html | 11 +
.../contributor/become-a-committer_dev/index.html | 26 +
.../contributor/cla-signing-guide_dev/index.html | 14 +
.../dubbo-extension-guide_dev/index.html | 28 +
.../docs/contact/contributor/index.html | 11 +
.../docs/contact/contributor/index.xml | 374 +
.../mailing-list-subscription-guide_dev/index.html | 75 +
.../new-contributor-guide_dev/index.html | 50 +
.../reporting-security-issues_dev/index.html | 23 +
.../software-donation-guide_dev/index.html | 105 +
.../contributor/test-coverage-guide_dev/index.html | 11 +
zh/docs3-building/docs/contact/index.html | 18 +
zh/docs3-building/docs/contact/index.xml | 1 +
zh/docs3-building/docs/index.html | 11 +
zh/docs3-building/docs/index.xml | 174 +
zh/docs3-building/docs/mannual/index.html | 11 +
zh/docs3-building/docs/mannual/index.xml | 1 +
zh/docs3-building/docs/notices/index.html | 11 +
zh/docs3-building/docs/notices/index.xml | 52 +
zh/docs3-building/docs/notices/security/index.html | 29 +
zh/docs3-building/docs/quickstart/index.html | 11 +
zh/docs3-building/docs/quickstart/index.xml | 1 +
.../docs/references/metadata/nacos/index.html | 307 +
.../docs/references/registry/nacos/index.html | 85 +
.../docs/release/dubbo-admin/index.html | 19 +
.../docs/release/dubbo-go-pixiu/index.html | 14 +
.../docs/release/dubbo-spi-extensions/index.html | 24 +
zh/docs3-building/docs/release/go/index.html | 14 +
zh/docs3-building/docs/release/index.html | 11 +
zh/docs3-building/docs/release/index.xml | 312 +
zh/docs3-building/docs/release/java/index.html | 34 +
.../release/past-releases/dubbo-admin/index.html | 19 +
.../past-releases/dubbo-go-pixiu/index.html | 14 +
.../past-releases/dubbo-spi-extensions/index.html | 14 +
.../docs/release/past-releases/go/index.html | 14 +
.../docs/release/past-releases/index.html | 11 +
.../docs/release/past-releases/index.xml | 324 +
.../docs/release/past-releases/java/index.html | 124 +
.../docs/tasks/config-rule/index.html | 121 +
.../docs/tasks/deploy-on-k8s/index.html | 11 +
.../docs/tasks/dubbo-mesh-proxyless/index.html | 11 +
.../docs/tasks/dubbo-mesh-sidecar/index.html | 11 +
zh/docs3-building/docs/tasks/dubbo-mesh/index.html | 11 +
zh/docs3-building/docs/tasks/idl/index.html | 148 +
zh/docs3-building/docs/tasks/index.html | 11 +
zh/docs3-building/docs/tasks/index.xml | 413 +
.../docs/tasks/traffic-management/index.html | 11 +
.../docs/what/architecture/index.html | 43 +
zh/docs3-building/docs/what/ecosystem/index.html | 17 +
.../docs/what/extensibility/index.html | 33 +
zh/docs3-building/docs/what/index.html | 11 +
zh/docs3-building/docs/what/index.xml | 345 +
zh/docs3-building/docs/what/overview/index.html | 23 +
.../docs/whatsnew/background/index.html | 23 +
zh/docs3-building/docs/whatsnew/index.html | 11 +
zh/docs3-building/docs/whatsnew/index.xml | 157 +
zh/docs3-building/docs/whatsnew/mesh/index.html | 25 +
.../docs/whatsnew/service-discovery/index.html | 41 +
.../docs/whatsnew/servicediscovery3/index.html | 11 +
zh/docs3-building/docs/whatsnew/triple/index.html | 22 +
.../concept/config/basic_concept/index.html | 38 +
.../golang-sdk/concept/config/index.html | 11 +
.../golang-sdk/concept/config/index.xml | 17 +
zh/docs3-building/golang-sdk/concept/index.html | 11 +
zh/docs3-building/golang-sdk/concept/index.xml | 6 +
.../golang-sdk/concept/mesh/index.html | 11 +
.../golang-sdk/concept/mesh/index.xml | 80 +
.../concept/mesh/proxyless_service_mesh/index.html | 38 +
.../golang-sdk/concept/more/3.0_feature/index.html | 62 +
.../concept/more/app_and_interface/index.html | 11 +
.../concept/more/architecture/index.html | 14 +
.../golang-sdk/concept/more/index.html | 11 +
.../golang-sdk/concept/more/index.xml | 118 +
.../golang-sdk/concept/rpc/generic/index.html | 82 +
.../golang-sdk/concept/rpc/index.html | 11 +
zh/docs3-building/golang-sdk/concept/rpc/index.xml | 212 +
.../concept/rpc/multi_language/index.html | 20 +
.../golang-sdk/concept/rpc/protocol/index.html | 73 +
.../service_management/adaptive_lb/index.html | 11 +
.../aop_and_extension/index.html | 52 +
.../graceful_shutdown/index.html | 11 +
.../concept/service_management/index.html | 11 +
.../concept/service_management/index.xml | 191 +
.../concept/service_management/registry/index.html | 11 +
.../service_management/visualization/index.html | 11 +
zh/docs3-building/golang-sdk/index.html | 11 +
zh/docs3-building/golang-sdk/index.xml | 6 +
zh/docs3-building/golang-sdk/quickstart/index.html | 11 +
zh/docs3-building/golang-sdk/quickstart/index.xml | 103 +
.../golang-sdk/quickstart/install/index.html | 46 +
.../quickstart/quickstart_triple/index.html | 79 +
.../golang-sdk/refer/compatible_version/index.html | 14 +
.../golang-sdk/refer/config/index.html | 85 +
.../golang-sdk/refer/ecology/index.html | 44 +
zh/docs3-building/golang-sdk/refer/index.html | 11 +
zh/docs3-building/golang-sdk/refer/index.xml | 512 +
.../golang-sdk/refer/use_dubbogo_cli/index.html | 240 +
.../golang-sdk/samples/adaptive-service/index.html | 9 +
.../samples/config-center-dynamic/index.html | 132 +
.../golang-sdk/samples/custom-filter/index.html | 49 +
.../golang-sdk/samples/custom-logger/index.html | 74 +
.../samples/exception_response/index.html | 102 +
.../golang-sdk/samples/generic/index.html | 78 +
.../samples/go_java_interactive/index.html | 553 +
.../golang-sdk/samples/grpc_cli/index.html | 20 +
zh/docs3-building/golang-sdk/samples/index.html | 11 +
zh/docs3-building/golang-sdk/samples/index.xml | 1760 +++
.../golang-sdk/samples/mesh_router/index.html | 112 +
.../golang-sdk/samples/metrics/index.html | 180 +
.../samples/pixiu-nacos-triple/index.html | 57 +
.../golang-sdk/samples/registry/index.html | 88 +
.../golang-sdk/samples/samples_repo/index.html | 49 +
.../samples/service-discovery/index.html | 48 +
.../golang-sdk/samples/start-check/index.html | 16 +
zh/docs3-building/golang-sdk/sourcecode/index.html | 11 +
zh/docs3-building/golang-sdk/sourcecode/index.xml | 54 +
.../golang-sdk/sourcecode/protocol/index.html | 28 +
.../golang-sdk/sourcecode/registry/index.html | 52 +
.../golang-sdk/tasks/cli/app_template/index.html | 50 +
zh/docs3-building/golang-sdk/tasks/cli/index.html | 11 +
zh/docs3-building/golang-sdk/tasks/cli/index.xml | 100 +
.../golang-sdk/tasks/config/config_api/index.html | 69 +
.../golang-sdk/tasks/config/index.html | 11 +
.../golang-sdk/tasks/config/index.xml | 106 +
.../tasks/config/remote_config/index.html | 40 +
.../golang-sdk/tasks/debug/dubbogo_cli/index.html | 101 +
.../golang-sdk/tasks/debug/grpc_cli/index.html | 44 +
.../golang-sdk/tasks/debug/index.html | 11 +
zh/docs3-building/golang-sdk/tasks/debug/index.xml | 166 +
zh/docs3-building/golang-sdk/tasks/index.html | 11 +
zh/docs3-building/golang-sdk/tasks/index.xml | 1 +
.../golang-sdk/tasks/mesh/app/index.html | 193 +
.../golang-sdk/tasks/mesh/build/index.html | 22 +
zh/docs3-building/golang-sdk/tasks/mesh/index.html | 11 +
zh/docs3-building/golang-sdk/tasks/mesh/index.xml | 665 +
.../golang-sdk/tasks/mesh/ingress/index.html | 11 +
.../tasks/mesh/traffic_management/index.html | 213 +
.../golang-sdk/tasks/pixiu/http_triple/index.html | 48 +
.../golang-sdk/tasks/pixiu/index.html | 11 +
zh/docs3-building/golang-sdk/tasks/pixiu/index.xml | 45 +
.../golang-sdk/tasks/registry/index.html | 11 +
.../golang-sdk/tasks/registry/index.xml | 135 +
.../tasks/registry/multi_registry/index.html | 90 +
.../golang-sdk/tasks/registry/nacos/index.html | 43 +
.../golang-sdk/tasks/rpc/call_grpc/index.html | 11 +
.../golang-sdk/tasks/rpc/call_java/index.html | 548 +
.../tasks/rpc/choose_protocol/index.html | 157 +
.../golang-sdk/tasks/rpc/context/index.html | 11 +
.../golang-sdk/tasks/rpc/error/index.html | 102 +
.../golang-sdk/tasks/rpc/generic/index.html | 78 +
zh/docs3-building/golang-sdk/tasks/rpc/index.html | 11 +
zh/docs3-building/golang-sdk/tasks/rpc/index.xml | 1218 ++
.../golang-sdk/tasks/rpc/rpc_metrics/index.html | 40 +
.../golang-sdk/tasks/rpc/timeout/index.html | 35 +
.../golang-sdk/tasks/rpc/tps_limiter/index.html | 82 +
.../tasks/service_management/aop/index.html | 53 +
.../graceful_shutdown/index.html | 11 +
.../golang-sdk/tasks/service_management/index.html | 11 +
.../golang-sdk/tasks/service_management/index.xml | 49 +
.../golang-sdk/tasks/visualization/index.html | 11 +
.../golang-sdk/tasks/visualization/index.xml | 2 +
.../tasks/visualization/logger/index.html | 11 +
.../tasks/visualization/metrics/index.html | 11 +
.../tasks/visualization/opentelementry/index.html | 11 +
.../tasks/visualization/tracing/index.html | 11 +
zh/docs3-building/index.html | 9 +
zh/docs3-building/index.xml | 372 +
.../advanced-features-and-usage/index.html | 11 +
.../java-sdk/advanced-features-and-usage/index.xml | 1 +
.../observability/index.html | 11 +
.../observability/index.xml | 197 +
.../observability/profiler/index.html | 140 +
.../observability/router-snapshot/index.html | 41 +
.../others/dubbo-kubernetes-probe/index.html | 30 +
.../others/graceful-shutdown/index.html | 19 +
.../advanced-features-and-usage/others/index.html | 11 +
.../advanced-features-and-usage/others/index.xml | 278 +
.../others/lifecycle/index.html | 11 +
.../others/logger-management/index.html | 55 +
.../others/logger-strategy/index.html | 14 +
.../others/service-container/index.html | 16 +
.../others/set-host/index.html | 20 +
.../performance/index.html | 11 +
.../performance/index.xml | 318 +
.../performance/reference-config-cache/index.html | 25 +
.../performance/simplify-registry-data/index.html | 102 +
.../threading-model/consumer/index.html | 11 +
.../performance/threading-model/index.html | 11 +
.../performance/threading-model/index.xml | 29 +
.../threading-model/provider/index.html | 11 +
.../rpc/accesslog/index.html | 13 +
.../rpc/async-call/index.html | 87 +
.../rpc/attachment/index.html | 48 +
.../rpc/callback-parameter/index.html | 86 +
.../rpc/context/index.html | 36 +
.../rpc/echo-service/index.html | 21 +
.../rpc/events-notify/index.html | 58 +
.../rpc/generic-service/index.html | 240 +
.../rpc/group-merger/index.html | 25 +
.../advanced-features-and-usage/rpc/index.html | 11 +
.../advanced-features-and-usage/rpc/index.xml | 1125 ++
.../rpc/local-mock/index.html | 56 +
.../rpc/local-stub/index.html | 32 +
.../rpc/parameter-validation/index.html | 144 +
.../rpc/result-cache/index.html | 15 +
.../security/index.html | 11 +
.../advanced-features-and-usage/security/index.xml | 63 +
.../security/tls/index.html | 28 +
.../security/token-authorization/index.html | 21 +
.../service/consistent-hash/index.html | 19 +
.../advanced-features-and-usage/service/index.html | 11 +
.../advanced-features-and-usage/service/index.xml | 315 +
.../service/multi-versions/index.html | 16 +
.../service/service-downgrade/index.html | 21 +
.../service/service-group/index.html | 90 +
.../service/specify-ip/index.html | 62 +
.../service/streaming/index.html | 11 +
.../code-architecture/index.html | 14 +
.../java-sdk/concepts-and-architecture/index.html | 11 +
.../java-sdk/concepts-and-architecture/index.xml | 329 +
.../overall-architecture/index.html | 20 +
.../service-discovery/index.html | 52 +
.../service-invocation/index.html | 79 +
.../java-sdk/contributing/guide/index.html | 11 +
zh/docs3-building/java-sdk/contributing/index.html | 11 +
zh/docs3-building/java-sdk/contributing/index.xml | 1 +
.../java-sdk/contributing/overview/index.html | 11 +
.../java-sdk/dobbo3-container/index.html | 32 +
.../java-sdk/dubbo-kubernetes-probe/index.html | 45 +
.../java-sdk/dubbo3-container/index.html | 32 +
zh/docs3-building/java-sdk/faq/1/1/index.html | 11 +
zh/docs3-building/java-sdk/faq/1/index.html | 11 +
zh/docs3-building/java-sdk/faq/1/index.xml | 2 +
zh/docs3-building/java-sdk/faq/index.html | 11 +
zh/docs3-building/java-sdk/faq/index.xml | 1 +
zh/docs3-building/java-sdk/index.html | 11 +
zh/docs3-building/java-sdk/index.xml | 1 +
.../java-sdk/quick-start/idl/index.html | 187 +
zh/docs3-building/java-sdk/quick-start/index.html | 11 +
zh/docs3-building/java-sdk/quick-start/index.xml | 343 +
.../java-sdk/quick-start/spring-boot/index.html | 90 +
.../config-center/apollo/guide/index.html | 11 +
.../config-center/apollo/index.html | 11 +
.../config-center/apollo/index.xml | 1 +
.../config-center/apollo/overview/index.html | 11 +
.../reference-manual/config-center/index.html | 11 +
.../reference-manual/config-center/index.xml | 58 +
.../config-center/nacos/guide/index.html | 11 +
.../config-center/nacos/index.html | 11 +
.../reference-manual/config-center/nacos/index.xml | 1 +
.../config-center/nacos/overview/index.html | 11 +
.../config-center/overview/index.html | 15 +
.../config-center/overview/index.xml | 1 +
.../config-center/zookeeper/guide/index.html | 11 +
.../config-center/zookeeper/index.html | 11 +
.../config-center/zookeeper/index.xml | 1 +
.../config-center/zookeeper/overview/index.html | 11 +
.../config/annotation/description/index.html | 11 +
.../config/annotation/guide/index.html | 56 +
.../reference-manual/config/annotation/index.html | 126 +
.../reference-manual/config/annotation/index.xml | 1 +
.../config/api/description/index.html | 11 +
.../reference-manual/config/api/guide/index.html | 257 +
.../reference-manual/config/api/index.html | 256 +
.../java-sdk/reference-manual/config/api/index.xml | 1 +
.../config/env/description/index.html | 11 +
.../reference-manual/config/env/guide/index.html | 19 +
.../reference-manual/config/env/index.html | 11 +
.../java-sdk/reference-manual/config/env/index.xml | 22 +
.../java-sdk/reference-manual/config/index.html | 11 +
.../java-sdk/reference-manual/config/index.xml | 3582 +++++
.../reference-manual/config/overview/index.html | 71 +
.../reference-manual/config/overview/index.xml | 1 +
.../reference-manual/config/principle/index.html | 158 +
.../reference-manual/config/principle/index.xml | 1 +
.../config/properties/description/index.html | 11 +
.../config/properties/guide/index.html | 125 +
.../reference-manual/config/properties/index.html | 29 +
.../reference-manual/config/properties/index.xml | 1 +
.../config/xml/description/index.html | 24 +
.../reference-manual/config/xml/guide/index.html | 41 +
.../reference-manual/config/xml/index.html | 75 +
.../java-sdk/reference-manual/config/xml/index.xml | 1 +
.../config/yaml/description/index.html | 11 +
.../reference-manual/config/yaml/guide/index.html | 11 +
.../reference-manual/config/yaml/index.html | 11 +
.../reference-manual/config/yaml/index.xml | 1 +
.../java-sdk/reference-manual/graalvm/index.html | 133 +
.../java-sdk/reference-manual/graalvm/index.xml | 1 +
.../java-sdk/reference-manual/index.html | 11 +
.../java-sdk/reference-manual/index.xml | 174 +
.../reference-manual/metadata-center/index.html | 11 +
.../reference-manual/metadata-center/index.xml | 412 +
.../metadata-center/nacos/guide/index.html | 225 +
.../metadata-center/nacos/index.html | 11 +
.../metadata-center/nacos/index.xml | 360 +
.../metadata-center/nacos/overview/index.html | 11 +
.../metadata-center/overview/index.html | 307 +
.../metadata-center/overview/index.xml | 1 +
.../metadata-center/redis/guide/index.html | 11 +
.../metadata-center/redis/index.html | 11 +
.../metadata-center/redis/index.xml | 1 +
.../metadata-center/redis/overview/index.html | 11 +
.../metadata-center/zookeeper/guide/index.html | 11 +
.../metadata-center/zookeeper/index.html | 11 +
.../metadata-center/zookeeper/index.xml | 1 +
.../metadata-center/zookeeper/overview/index.html | 11 +
.../performance/benchmarking/index.html | 20 +
.../reference-manual/performance/index.html | 11 +
.../reference-manual/performance/index.xml | 138 +
.../protocol/dubbo/guide/index.html | 11 +
.../reference-manual/protocol/dubbo/index.html | 11 +
.../reference-manual/protocol/dubbo/index.xml | 110 +
.../protocol/dubbo/overview/index.html | 29 +
.../protocol/grpc/guide/index.html | 11 +
.../reference-manual/protocol/grpc/index.html | 11 +
.../reference-manual/protocol/grpc/index.xml | 17 +
.../protocol/grpc/overview/index.html | 21 +
.../protocol/hessian/guide/index.html | 34 +
.../reference-manual/protocol/hessian/index.html | 11 +
.../reference-manual/protocol/hessian/index.xml | 44 +
.../protocol/hessian/overview/index.html | 11 +
.../protocol/http/guide/index.html | 44 +
.../reference-manual/protocol/http/index.html | 11 +
.../reference-manual/protocol/http/index.xml | 41 +
.../protocol/http/overview/index.html | 11 +
.../java-sdk/reference-manual/protocol/index.html | 11 +
.../java-sdk/reference-manual/protocol/index.xml | 174 +
.../protocol/memcached/guide/index.html | 45 +
.../reference-manual/protocol/memcached/index.html | 11 +
.../reference-manual/protocol/memcached/index.xml | 23 +
.../protocol/memcached/overview/index.html | 11 +
.../reference-manual/protocol/overview/index.html | 17 +
.../reference-manual/protocol/overview/index.xml | 1 +
.../protocol/redis/guide/index.html | 42 +
.../reference-manual/protocol/redis/index.html | 11 +
.../reference-manual/protocol/redis/index.xml | 23 +
.../protocol/redis/overview/index.html | 11 +
.../protocol/rest/guide/index.html | 11 +
.../reference-manual/protocol/rest/index.html | 11 +
.../reference-manual/protocol/rest/index.xml | 856 ++
.../protocol/rest/overview/index.html | 372 +
.../reference-manual/protocol/rmi/guide/index.html | 35 +
.../reference-manual/protocol/rmi/index.html | 11 +
.../reference-manual/protocol/rmi/index.xml | 60 +
.../protocol/rmi/overview/index.html | 11 +
.../protocol/thrift/guide/index.html | 35 +
.../reference-manual/protocol/thrift/index.html | 11 +
.../reference-manual/protocol/thrift/index.xml | 21 +
.../protocol/thrift/overview/index.html | 11 +
.../protocol/triple/guide/index.html | 221 +
.../protocol/triple/idl/index.html | 198 +
.../reference-manual/protocol/triple/index.html | 11 +
.../reference-manual/protocol/triple/index.xml | 634 +
.../protocol/triple/overview/index.html | 11 +
.../protocol/triple/pojo/index.html | 133 +
.../protocol/webservice/guide/index.html | 54 +
.../protocol/webservice/index.html | 11 +
.../reference-manual/protocol/webservice/index.xml | 68 +
.../protocol/webservice/overview/index.html | 11 +
.../reference-manual/qos/command/index.html | 31 +
.../java-sdk/reference-manual/qos/index.html | 11 +
.../java-sdk/reference-manual/qos/index.xml | 396 +
.../qos/logger-management/index.html | 52 +
.../reference-manual/qos/overview/index.html | 119 +
.../java-sdk/reference-manual/qos/probe/index.html | 23 +
.../reference-manual/qos/profiler/index.html | 33 +
.../qos/router-snapshot/index.html | 63 +
.../qos/service-management/index.html | 40 +
.../java-sdk/reference-manual/registry/index.html | 11 +
.../java-sdk/reference-manual/registry/index.xml | 605 +
.../registry/multicast/guide/index.html | 35 +
.../reference-manual/registry/multicast/index.html | 20 +
.../reference-manual/registry/multicast/index.xml | 1 +
.../registry/multicast/overview/index.html | 11 +
.../registry/multiple-registry/guide/index.html | 11 +
.../registry/multiple-registry/index.html | 72 +
.../registry/multiple-registry/index.xml | 1 +
.../registry/multiple-registry/overview/index.html | 11 +
.../registry/nacos/guide/index.html | 85 +
.../reference-manual/registry/nacos/index.html | 69 +
.../reference-manual/registry/nacos/index.xml | 1 +
.../registry/nacos/overview/index.html | 11 +
.../reference-manual/registry/overview/index.html | 29 +
.../reference-manual/registry/overview/index.xml | 1 +
.../registry/redis/guide/index.html | 33 +
.../reference-manual/registry/redis/index.html | 15 +
.../reference-manual/registry/redis/index.xml | 1 +
.../registry/redis/overview/index.html | 11 +
.../registry/zookeeper/guide/index.html | 65 +
.../reference-manual/registry/zookeeper/index.html | 53 +
.../reference-manual/registry/zookeeper/index.xml | 1 +
.../registry/zookeeper/overview/index.html | 11 +
.../spi/description/cache/index.html | 66 +
.../spi/description/cluster/index.html | 57 +
.../spi/description/compiler/index.html | 49 +
.../spi/description/config-center/index.html | 36 +
.../spi/description/container/index.html | 51 +
.../spi/description/dispatcher/index.html | 49 +
.../spi/description/dubbo-spi/index.html | 509 +
.../spi/description/exchanger/index.html | 67 +
.../spi/description/exporter-listener/index.html | 56 +
.../spi/description/extension-factory/index.html | 47 +
.../spi/description/filter/index.html | 55 +
.../reference-manual/spi/description/index.html | 11 +
.../reference-manual/spi/description/index.xml | 2222 +++
.../spi/description/invoker-listener/index.html | 55 +
.../spi/description/liveness/index.html | 51 +
.../spi/description/load-balance/index.html | 52 +
.../spi/description/logger-adapter/index.html | 64 +
.../spi/description/merger/index.html | 47 +
.../spi/description/monitor/index.html | 60 +
.../spi/description/networker/index.html | 49 +
.../spi/description/page/index.html | 47 +
.../spi/description/protocol/index.html | 108 +
.../spi/description/proxy-factory/index.html | 52 +
.../spi/description/readiness/index.html | 48 +
.../spi/description/registry/index.html | 167 +
.../spi/description/remoting/index.html | 93 +
.../spi/description/router/index.html | 46 +
.../spi/description/serialize/index.html | 52 +
.../spi/description/startup/index.html | 48 +
.../spi/description/status-checker/index.html | 49 +
.../spi/description/telnet-handler/index.html | 50 +
.../spi/description/threadpool/index.html | 50 +
.../spi/description/validation/index.html | 64 +
.../java-sdk/reference-manual/spi/index.html | 11 +
.../java-sdk/reference-manual/spi/index.xml | 65 +
.../reference-manual/spi/overview/index.html | 18 +
.../reference-manual/spi/overview/index.xml | 1 +
.../2.x-to-3.x-compatibility-guide/index.html | 16 +
.../3.0-to-3.1-compatibility-guide/index.html | 11 +
.../java-sdk/upgrades-and-compatibility/index.html | 11 +
.../java-sdk/upgrades-and-compatibility/index.xml | 335 +
.../migration-service-discovery/index.html | 28 +
.../migration-triple/index.html | 163 +
.../service-discovery-rule/index.html | 77 +
.../service-discovery/index.html | 11 +
.../service-discovery/index.xml | 278 +
.../migration-service-discovery/index.html | 28 +
.../service-discovery-rule/index.html | 77 +
.../service-discovery-samples/index.html | 26 +
.../dubbo-go-pixiu/dev/dubbo-pilot/index.html | 82 +
.../dubbo-go-pixiu/dev/filter-extension/index.html | 111 +
zh/docs3-v2/dubbo-go-pixiu/dev/index.html | 11 +
zh/docs3-v2/dubbo-go-pixiu/dev/index.xml | 379 +
zh/docs3-v2/dubbo-go-pixiu/dev/trie/index.html | 60 +
zh/docs3-v2/dubbo-go-pixiu/index.html | 11 +
zh/docs3-v2/dubbo-go-pixiu/index.xml | 1 +
zh/docs3-v2/dubbo-go-pixiu/overview/faq/index.html | 22 +
zh/docs3-v2/dubbo-go-pixiu/overview/index.html | 11 +
zh/docs3-v2/dubbo-go-pixiu/overview/index.xml | 39 +
.../dubbo-go-pixiu/overview/terminology/index.html | 26 +
.../overview/what-is-pixiu/index.html | 13 +
.../dubbo-go-pixiu/user/adapter/dubbo/index.html | 11 +
zh/docs3-v2/dubbo-go-pixiu/user/adapter/index.html | 11 +
zh/docs3-v2/dubbo-go-pixiu/user/adapter/index.xml | 1 +
.../user/adapter/springcloud/index.html | 11 +
.../http-to-dubbo-default-stragety/index.html | 38 +
.../dubbo-go-pixiu/user/appendix/index.html | 11 +
zh/docs3-v2/dubbo-go-pixiu/user/appendix/index.xml | 394 +
.../dubbo-go-pixiu/user/configurations/index.html | 90 +
.../dubbo-go-pixiu/user/deployment/index.html | 50 +
.../user/httpfilter/dubbo/index.html | 11 +
.../user/httpfilter/hystrix/index.html | 11 +
.../dubbo-go-pixiu/user/httpfilter/index.html | 11 +
.../dubbo-go-pixiu/user/httpfilter/index.xml | 4 +
.../user/httpfilter/ratelimit/index.html | 11 +
zh/docs3-v2/dubbo-go-pixiu/user/index.html | 11 +
zh/docs3-v2/dubbo-go-pixiu/user/index.xml | 265 +
.../dubbo-go-pixiu/user/listener/http/index.html | 41 +
.../dubbo-go-pixiu/user/listener/http2/index.html | 11 +
.../dubbo-go-pixiu/user/listener/index.html | 11 +
zh/docs3-v2/dubbo-go-pixiu/user/listener/index.xml | 31 +
.../dubbo-go-pixiu/user/listener/tcp/index.html | 11 +
.../dubbo-go-pixiu/user/listener/triple/index.html | 11 +
.../user/networkfilter/dubbo/index.html | 11 +
.../user/networkfilter/grpc/index.html | 11 +
.../user/networkfilter/http/index.html | 11 +
.../dubbo-go-pixiu/user/networkfilter/index.html | 11 +
.../dubbo-go-pixiu/user/networkfilter/index.xml | 4 +
zh/docs3-v2/dubbo-go-pixiu/user/quality/index.html | 11 +
zh/docs3-v2/dubbo-go-pixiu/user/quality/index.xml | 3 +
.../user/quality/performance/index.html | 11 +
.../user/quality/stability/index.html | 11 +
.../dubbo-go-pixiu/user/quickstart/index.html | 129 +
.../user/samples/http_proxy/index.html | 55 +
.../user/samples/http_to_dubbo/index.html | 11 +
.../dubbo-go-pixiu/user/samples/https/index.html | 11 +
zh/docs3-v2/dubbo-go-pixiu/user/samples/index.html | 11 +
zh/docs3-v2/dubbo-go-pixiu/user/samples/index.xml | 45 +
zh/docs3-v2/erlang-sdk/index.html | 11 +
zh/docs3-v2/erlang-sdk/index.xml | 118 +
zh/docs3-v2/erlang-sdk/quick-start/index.html | 27 +
zh/docs3-v2/erlang-sdk/reference/index.html | 19 +
zh/docs3-v2/erlang-sdk/serialization/index.html | 15 +
zh/docs3-v2/erlang-sdk/service/index.html | 19 +
.../concept/config/basic_concept/index.html | 38 +
zh/docs3-v2/golang-sdk/concept/config/index.html | 11 +
zh/docs3-v2/golang-sdk/concept/config/index.xml | 17 +
zh/docs3-v2/golang-sdk/concept/index.html | 11 +
zh/docs3-v2/golang-sdk/concept/index.xml | 1 +
zh/docs3-v2/golang-sdk/concept/mesh/index.html | 11 +
zh/docs3-v2/golang-sdk/concept/mesh/index.xml | 80 +
.../concept/mesh/proxyless_service_mesh/index.html | 38 +
.../golang-sdk/concept/more/3.0_feature/index.html | 62 +
.../concept/more/app_and_interface/index.html | 11 +
.../concept/more/architecture/index.html | 14 +
zh/docs3-v2/golang-sdk/concept/more/index.html | 11 +
zh/docs3-v2/golang-sdk/concept/more/index.xml | 118 +
.../golang-sdk/concept/rpc/generic/index.html | 82 +
zh/docs3-v2/golang-sdk/concept/rpc/index.html | 11 +
zh/docs3-v2/golang-sdk/concept/rpc/index.xml | 212 +
.../concept/rpc/multi_language/index.html | 20 +
.../golang-sdk/concept/rpc/protocol/index.html | 73 +
.../service_management/adaptive_lb/index.html | 11 +
.../aop_and_extension/index.html | 52 +
.../graceful_shutdown/index.html | 11 +
.../concept/service_management/index.html | 11 +
.../concept/service_management/index.xml | 194 +
.../concept/service_management/registry/index.html | 11 +
.../service_management/visualization/index.html | 11 +
zh/docs3-v2/golang-sdk/index.html | 11 +
zh/docs3-v2/golang-sdk/index.xml | 5 +
.../golang-sdk/preface/3.0_feature/index.html | 62 +
.../golang-sdk/preface/concept/generic/index.html | 82 +
zh/docs3-v2/golang-sdk/preface/concept/index.html | 11 +
zh/docs3-v2/golang-sdk/preface/concept/index.xml | 302 +
.../preface/concept/multi_language/index.html | 20 +
.../golang-sdk/preface/concept/protocol/index.html | 73 +
.../golang-sdk/preface/concept/registry/index.html | 11 +
.../preface/design/aop_and_extension/index.html | 52 +
.../preface/design/app_and_interface/index.html | 11 +
.../preface/design/architecture/index.html | 14 +
zh/docs3-v2/golang-sdk/preface/design/index.html | 11 +
zh/docs3-v2/golang-sdk/preface/design/index.xml | 150 +
zh/docs3-v2/golang-sdk/preface/index.html | 11 +
zh/docs3-v2/golang-sdk/preface/index.xml | 174 +
zh/docs3-v2/golang-sdk/preface/samples/index.html | 51 +
zh/docs3-v2/golang-sdk/preface/what/index.html | 11 +
zh/docs3-v2/golang-sdk/quickstart/index.html | 11 +
zh/docs3-v2/golang-sdk/quickstart/index.xml | 262 +
.../golang-sdk/quickstart/install/index.html | 46 +
.../quickstart/quickstart_triple/index.html | 79 +
.../quickstart_triple_with_customize/index.html | 159 +
.../golang-sdk/refer/basic_concept/index.html | 32 +
.../golang-sdk/refer/compatible_version/index.html | 14 +
zh/docs3-v2/golang-sdk/refer/config/index.html | 85 +
zh/docs3-v2/golang-sdk/refer/ecology/index.html | 44 +
zh/docs3-v2/golang-sdk/refer/index.html | 11 +
zh/docs3-v2/golang-sdk/refer/index.xml | 526 +
.../golang-sdk/refer/use_dubbogo_cli/index.html | 240 +
.../golang-sdk/samples/adaptive-service/index.html | 7 +
.../samples/config-center-dynamic/index.html | 132 +
.../golang-sdk/samples/custom-filter/index.html | 49 +
.../golang-sdk/samples/custom-logger/index.html | 74 +
.../samples/exception_response/index.html | 102 +
zh/docs3-v2/golang-sdk/samples/generic/index.html | 78 +
.../samples/go_java_interactive/index.html | 553 +
zh/docs3-v2/golang-sdk/samples/grpc_cli/index.html | 20 +
zh/docs3-v2/golang-sdk/samples/index.html | 11 +
zh/docs3-v2/golang-sdk/samples/index.xml | 1760 +++
.../golang-sdk/samples/mesh_router/index.html | 112 +
zh/docs3-v2/golang-sdk/samples/metrics/index.html | 180 +
.../samples/pixiu-nacos-triple/index.html | 57 +
zh/docs3-v2/golang-sdk/samples/registry/index.html | 88 +
.../golang-sdk/samples/samples_repo/index.html | 51 +
.../samples/service-discovery/index.html | 48 +
.../golang-sdk/samples/start-check/index.html | 18 +
zh/docs3-v2/golang-sdk/sourcecode/index.html | 11 +
zh/docs3-v2/golang-sdk/sourcecode/index.xml | 54 +
.../golang-sdk/sourcecode/protocol/index.html | 28 +
.../golang-sdk/sourcecode/registry/index.html | 52 +
.../golang-sdk/tasks/cli/app_template/index.html | 50 +
zh/docs3-v2/golang-sdk/tasks/cli/index.html | 11 +
zh/docs3-v2/golang-sdk/tasks/cli/index.xml | 100 +
.../golang-sdk/tasks/config/config_api/index.html | 69 +
zh/docs3-v2/golang-sdk/tasks/config/index.html | 11 +
zh/docs3-v2/golang-sdk/tasks/config/index.xml | 106 +
.../tasks/config/remote_config/index.html | 40 +
.../golang-sdk/tasks/debug/dubbogo_cli/index.html | 101 +
.../golang-sdk/tasks/debug/grpc_cli/index.html | 44 +
zh/docs3-v2/golang-sdk/tasks/debug/index.html | 11 +
zh/docs3-v2/golang-sdk/tasks/debug/index.xml | 166 +
zh/docs3-v2/golang-sdk/tasks/index.html | 11 +
zh/docs3-v2/golang-sdk/tasks/index.xml | 1 +
zh/docs3-v2/golang-sdk/tasks/mesh/app/index.html | 193 +
zh/docs3-v2/golang-sdk/tasks/mesh/build/index.html | 22 +
zh/docs3-v2/golang-sdk/tasks/mesh/index.html | 11 +
zh/docs3-v2/golang-sdk/tasks/mesh/index.xml | 665 +
.../golang-sdk/tasks/mesh/ingress/index.html | 11 +
.../tasks/mesh/traffic_management/index.html | 213 +
.../golang-sdk/tasks/pixiu/http_triple/index.html | 48 +
zh/docs3-v2/golang-sdk/tasks/pixiu/index.html | 11 +
zh/docs3-v2/golang-sdk/tasks/pixiu/index.xml | 45 +
zh/docs3-v2/golang-sdk/tasks/registry/index.html | 11 +
zh/docs3-v2/golang-sdk/tasks/registry/index.xml | 135 +
.../tasks/registry/multi_registry/index.html | 90 +
.../golang-sdk/tasks/registry/nacos/index.html | 43 +
.../golang-sdk/tasks/rpc/call_grpc/index.html | 11 +
.../golang-sdk/tasks/rpc/call_java/index.html | 548 +
.../tasks/rpc/choose_protocol/index.html | 155 +
.../golang-sdk/tasks/rpc/context/index.html | 11 +
zh/docs3-v2/golang-sdk/tasks/rpc/error/index.html | 102 +
.../golang-sdk/tasks/rpc/generic/index.html | 78 +
zh/docs3-v2/golang-sdk/tasks/rpc/index.html | 11 +
zh/docs3-v2/golang-sdk/tasks/rpc/index.xml | 1218 ++
.../golang-sdk/tasks/rpc/rpc_metrics/index.html | 40 +
.../golang-sdk/tasks/rpc/timeout/index.html | 35 +
.../golang-sdk/tasks/rpc/tps_limiter/index.html | 82 +
.../tasks/service_management/aop/index.html | 53 +
.../graceful_shutdown/index.html | 11 +
.../golang-sdk/tasks/service_management/index.html | 11 +
.../golang-sdk/tasks/service_management/index.xml | 141 +
.../triple-health-check/index.html | 85 +
.../golang-sdk/tasks/visualization/index.html | 11 +
.../golang-sdk/tasks/visualization/index.xml | 2 +
.../tasks/visualization/logger/index.html | 11 +
.../tasks/visualization/metrics/index.html | 11 +
.../tasks/visualization/opentelementry/index.html | 11 +
.../tasks/visualization/tracing/index.html | 11 +
.../tutorial/debugging/grpc_cli/index.html | 44 +
.../golang-sdk/tutorial/debugging/index.html | 11 +
.../golang-sdk/tutorial/debugging/index.xml | 56 +
.../tutorial/deployment/docker/index.html | 11 +
.../tutorial/deployment/docker/index.xml | 1 +
.../golang-sdk/tutorial/deployment/index.html | 11 +
.../golang-sdk/tutorial/deployment/index.xml | 1 +
.../tutorial/deployment/kubernetes/index.html | 11 +
.../tutorial/deployment/kubernetes/index.xml | 1 +
.../tutorial/deployment/practice/index.html | 11 +
.../tutorial/deployment/practice/index.xml | 1 +
.../tutorial/develop/config-center/api/index.html | 11 +
.../tutorial/develop/config-center/api/index.xml | 1 +
.../config-center/config-center-dynamic/index.html | 132 +
.../tutorial/develop/config-center/desc/index.html | 11 +
.../tutorial/develop/config-center/desc/index.xml | 1 +
.../tutorial/develop/config-center/index.html | 11 +
.../tutorial/develop/config-center/index.xml | 150 +
.../develop/config-center/remote/index.html | 11 +
.../develop/config-center/remote/index.xml | 1 +
.../develop/config-center/remote_config/index.html | 40 +
.../develop/features/config_api/index.html | 69 +
.../tutorial/develop/features/context/index.html | 11 +
.../develop/features/custom-logger/index.html | 74 +
.../tutorial/develop/features/fault/index.html | 11 +
.../tutorial/develop/features/fault/index.xml | 1 +
.../tutorial/develop/features/generic-2/index.html | 78 +
.../tutorial/develop/features/generic/index.html | 78 +
.../tutorial/develop/features/generic/index.xml | 1 +
.../tutorial/develop/features/index.html | 11 +
.../golang-sdk/tutorial/develop/features/index.xml | 298 +
.../develop/features/transaction/index.html | 11 +
.../develop/features/transaction/index.xml | 1 +
.../tutorial/develop/features/transfer/index.html | 11 +
.../tutorial/develop/features/transfer/index.xml | 1 +
zh/docs3-v2/golang-sdk/tutorial/develop/index.html | 11 +
zh/docs3-v2/golang-sdk/tutorial/develop/index.xml | 100 +
.../develop/interflow/call_grpc/index.html | 11 +
.../develop/interflow/call_java/index.html | 548 +
.../tutorial/develop/interflow/grpc/index.html | 11 +
.../tutorial/develop/interflow/grpc/index.xml | 1 +
.../tutorial/develop/interflow/index.html | 11 +
.../tutorial/develop/interflow/index.xml | 710 +
.../tutorial/develop/interflow/java/index.html | 11 +
.../tutorial/develop/interflow/java/index.xml | 1 +
.../develop/protocol/choose_protocol/index.html | 155 +
.../develop/protocol/comes-back/index.html | 11 +
.../tutorial/develop/protocol/comes-back/index.xml | 1 +
.../tutorial/develop/protocol/config/index.html | 11 +
.../tutorial/develop/protocol/config/index.xml | 1 +
.../tutorial/develop/protocol/error/index.html | 102 +
.../develop/protocol/exception_response/index.html | 102 +
.../tutorial/develop/protocol/index.html | 11 +
.../golang-sdk/tutorial/develop/protocol/index.xml | 370 +
.../develop/protocol/multi-protocol/index.html | 11 +
.../develop/protocol/multi-protocol/index.xml | 1 +
.../tutorial/develop/registry/desc/index.html | 11 +
.../tutorial/develop/registry/desc/index.xml | 1 +
.../tutorial/develop/registry/index.html | 11 +
.../golang-sdk/tutorial/develop/registry/index.xml | 379 +
.../develop/registry/multi_registry/index.html | 90 +
.../tutorial/develop/registry/nacos-2/index.html | 43 +
.../tutorial/develop/registry/nacos/index.html | 101 +
.../tutorial/develop/registry/nacos/index.xml | 1 +
.../tutorial/develop/registry/polaris/index.html | 11 +
.../tutorial/develop/registry/polaris/index.xml | 1 +
.../tutorial/develop/registry/registry/index.html | 88 +
.../develop/registry/service-discovery/index.html | 48 +
.../tutorial/develop/registry/zookeeper/index.html | 11 +
.../tutorial/develop/registry/zookeeper/index.xml | 1 +
.../tutorial/develop/template/index.html | 50 +
.../tutorial/governance/features/aop/index.html | 53 +
.../governance/features/custom-filter/index.html | 49 +
.../tutorial/governance/features/filter/index.html | 11 +
.../tutorial/governance/features/filter/index.xml | 1 +
.../tutorial/governance/features/index.html | 11 +
.../tutorial/governance/features/index.xml | 175 +
.../features/service-discovery/index.html | 11 +
.../features/service-discovery/index.xml | 1 +
.../governance/features/timeout/index.html | 35 +
.../tutorial/governance/features/timeout/index.xml | 1 +
.../tutorial/governance/health/grpc/index.html | 11 +
.../tutorial/governance/health/grpc/index.xml | 1 +
.../tutorial/governance/health/index.html | 11 +
.../tutorial/governance/health/index.xml | 107 +
.../governance/health/kubernetes/index.html | 11 +
.../governance/health/kubernetes/index.xml | 1 +
.../governance/health/start-check/index.html | 18 +
.../tutorial/governance/health/startup/index.html | 11 +
.../tutorial/governance/health/startup/index.xml | 1 +
.../health/triple-health-check/index.html | 85 +
.../golang-sdk/tutorial/governance/index.html | 11 +
.../golang-sdk/tutorial/governance/index.xml | 1 +
.../governance/limit/adaptive-service/index.html | 7 +
.../tutorial/governance/limit/index.html | 11 +
.../golang-sdk/tutorial/governance/limit/index.xml | 88 +
.../governance/limit/internally/index.html | 11 +
.../tutorial/governance/limit/internally/index.xml | 1 +
.../tutorial/governance/limit/polaris/index.html | 11 +
.../tutorial/governance/limit/polaris/index.xml | 1 +
.../tutorial/governance/limit/sentinel/index.html | 11 +
.../tutorial/governance/limit/sentinel/index.xml | 1 +
.../governance/limit/tps_limiter/index.html | 82 +
.../tutorial/governance/monitor/grafana/index.html | 11 +
.../tutorial/governance/monitor/grafana/index.xml | 1 +
.../tutorial/governance/monitor/http/index.html | 11 +
.../tutorial/governance/monitor/http/index.xml | 1 +
.../tutorial/governance/monitor/index.html | 11 +
.../tutorial/governance/monitor/index.xml | 209 +
.../tutorial/governance/monitor/logger/index.html | 11 +
.../tutorial/governance/monitor/logger/index.xml | 1 +
.../tutorial/governance/monitor/metrics/index.html | 180 +
.../governance/monitor/promethus/index.html | 11 +
.../governance/monitor/promethus/index.xml | 1 +
.../governance/monitor/rpc_metrics/index.html | 40 +
.../governance/service-mesh/deploy/index.html | 193 +
.../governance/service-mesh/deploy/index.xml | 1 +
.../tutorial/governance/service-mesh/index.html | 11 +
.../tutorial/governance/service-mesh/index.xml | 742 +
.../governance/service-mesh/istio/index.html | 22 +
.../governance/service-mesh/istio/index.xml | 1 +
.../service-mesh/pixiu/http_triple/index.html | 48 +
.../governance/service-mesh/pixiu/index.html | 11 +
.../governance/service-mesh/pixiu/index.xml | 82 +
.../pixiu/pixiu-nacos-triple/index.html | 57 +
.../service-mesh/proxyless_service_mesh/index.html | 38 +
.../governance/service-mesh/traffic/index.html | 11 +
.../governance/service-mesh/traffic/index.xml | 1 +
.../service-mesh/traffic_management/index.html | 213 +
.../tutorial/governance/tracing/index.html | 11 +
.../tutorial/governance/tracing/index.xml | 1 +
.../tutorial/governance/tracing/jaeger/index.html | 11 +
.../tutorial/governance/tracing/jaeger/index.xml | 1 +
.../governance/tracing/opentelmentry/index.html | 11 +
.../governance/tracing/opentelmentry/index.xml | 1 +
.../governance/tracing/skywalking/index.html | 11 +
.../governance/tracing/skywalking/index.xml | 1 +
.../governance/traffic/adaptive-service/index.html | 11 +
.../governance/traffic/adaptive-service/index.xml | 1 +
.../governance/traffic/graceful/index.html | 11 +
.../tutorial/governance/traffic/graceful/index.xml | 1 +
.../traffic/graceful_shutdown/index.html | 11 +
.../tutorial/governance/traffic/index.html | 11 +
.../tutorial/governance/traffic/index.xml | 117 +
.../governance/traffic/mesh_router/index.html | 112 +
.../tutorial/governance/traffic/router/index.html | 11 +
.../tutorial/governance/traffic/router/index.xml | 1 +
zh/docs3-v2/golang-sdk/tutorial/index.html | 11 +
zh/docs3-v2/golang-sdk/tutorial/index.xml | 1 +
zh/docs3-v2/index.html | 11 +
zh/docs3-v2/index.xml | 190 +
.../advanced-features-and-usage/index.html | 11 +
.../java-sdk/advanced-features-and-usage/index.xml | 35 +
.../observability/doc/index.html | 11 +
.../observability/dump/index.html | 16 +
.../observability/health-information/index.html | 11 +
.../observability/index.html | 11 +
.../observability/index.xml | 479 +
.../observability/kubernetes-probes/index.html | 11 +
.../observability/logging/index.html | 11 +
.../observability/meter/index.html | 402 +
.../observability/profiler/index.html | 140 +
.../observability/router-snapshot/index.html | 41 +
.../observability/tracing/index.html | 11 +
.../others/docker/index.html | 32 +
.../others/dubbo-kubernetes-probe/index.html | 29 +
.../others/graceful-shutdown/index.html | 19 +
.../advanced-features-and-usage/others/index.html | 11 +
.../advanced-features-and-usage/others/index.xml | 341 +
.../others/logger-management/index.html | 55 +
.../others/service-container/index.html | 16 +
.../others/set-host/index.html | 18 +
.../performance/concurrency-control/index.html | 25 +
.../performance/config-connections/index.html | 15 +
.../performance/dump/index.html | 25 +
.../performance/index.html | 11 +
.../performance/index.xml | 1252 ++
.../performance/lazy-connect/index.html | 12 +
.../performance/loadbalance/index.html | 19 +
.../performance/profiler/index.html | 140 +
.../performance/reference-config-cache/index.html | 25 +
.../performance/result-cache/index.html | 15 +
.../performance/router-snapshot/index.html | 41 +
.../performance/serialization/index.html | 68 +
.../performance/simplify-registry-data/index.html | 127 +
.../performance/stickiness/index.html | 15 +
.../performance/support-graalvm/index.html | 160 +
.../threading-model/consumer/index.html | 11 +
.../performance/threading-model/index.html | 11 +
.../performance/threading-model/index.xml | 153 +
.../threading-model/provider/index.html | 25 +
.../rpc/accesslog/index.html | 13 +
.../rpc/async-call/index.html | 87 +
.../rpc/async-execute-on-provider/index.html | 52 +
.../rpc/attachment/index.html | 48 +
.../rpc/callback-parameter/index.html | 86 +
.../rpc/config-rule/index.html | 101 +
.../rpc/context/index.html | 36 +
.../rpc/delay-publish/index.html | 14 +
.../rpc/echo-service/index.html | 22 +
.../rpc/events-notify/index.html | 58 +
.../rpc/fault-tolerent-strategy/index.html | 27 +
.../rpc/generic-reference/index.html | 240 +
.../rpc/generic-service/index.html | 36 +
.../rpc/group-merger/index.html | 25 +
.../advanced-features-and-usage/rpc/index.html | 11 +
.../advanced-features-and-usage/rpc/index.xml | 1463 ++
.../rpc/local-mock/index.html | 56 +
.../rpc/local-stub/index.html | 32 +
.../rpc/parameter-validation/index.html | 144 +
.../rpc/result-cache/index.html | 16 +
.../security/auth/index.html | 14 +
.../security/index.html | 11 +
.../advanced-features-and-usage/security/index.xml | 83 +
.../security/tls/index.html | 28 +
.../security/token-authorization/index.html | 21 +
.../service/accesslog/index.html | 13 +
.../service/async-call/index.html | 87 +
.../service/async-execute-on-provider/index.html | 52 +
.../service/attachment/index.html | 48 +
.../service/callback-parameter/index.html | 86 +
.../service/consistent-hash/index.html | 19 +
.../service/context/index.html | 36 +
.../service/delay-publish/index.html | 14 +
.../service/distributed-transaction/index.html | 11 +
.../service/echo-service/index.html | 22 +
.../service/events-notify/index.html | 58 +
.../service/explicit-target/index.html | 15 +
.../service/fault-tolerent-strategy/index.html | 27 +
.../service/generic-reference/index.html | 240 +
.../service/generic-service/index.html | 36 +
.../service/group-merger/index.html | 25 +
.../advanced-features-and-usage/service/index.html | 11 +
.../advanced-features-and-usage/service/index.xml | 2649 ++++
.../service/isolation-executor/index.html | 192 +
.../service/local-call/index.html | 19 +
.../service/local-mock/index.html | 56 +
.../service/local-stub/index.html | 32 +
.../service/multi-protocols/index.html | 39 +
.../service/multi-registry/index.html | 62 +
.../service/multi-versions/index.html | 16 +
.../service/parameter-validation/index.html | 144 +
.../service/port-unification/index.html | 43 +
.../service/preflight-check/index.html | 20 +
.../service/reactive/index.html | 173 +
.../service/registry-only/index.html | 15 +
.../service/routing/index.html | 11 +
.../service/routing/index.xml | 432 +
.../mesh-style/ab-testing-deployment/index.html | 11 +
.../mesh-style/blue-green-deployment/index.html | 11 +
.../mesh-style/canary-deployment/index.html | 11 +
.../mesh-style/demo-rule-deployment/index.html | 224 +
.../routing/mesh-style/destination-rule/index.html | 43 +
.../mesh-style/dynamic-rule-deployment/index.html | 79 +
.../service/routing/mesh-style/index.html | 210 +
.../service/routing/mesh-style/index.xml | 1516 ++
.../routing/mesh-style/virtualservice/index.html | 251 +
.../mesh-style/weight-rule-deployment/index.html | 48 +
.../service/routing/routing-rule/index.html | 65 +
.../service/service-downgrade/index.html | 19 +
.../service/service-group/index.html | 90 +
.../service/specify-ip/index.html | 62 +
.../service/streaming/index.html | 11 +
.../service/subscribe-only/index.html | 13 +
.../service/transaction/index.html | 288 +
.../traffic/config-rule/index.html | 99 +
.../advanced-features-and-usage/traffic/index.html | 11 +
.../advanced-features-and-usage/traffic/index.xml | 589 +
.../mesh-style/ab-testing-deployment/index.html | 11 +
.../mesh-style/blue-green-deployment/index.html | 11 +
.../mesh-style/canary-deployment/index.html | 11 +
.../mesh-style/demo-rule-deployment/index.html | 224 +
.../traffic/mesh-style/destination-rule/index.html | 43 +
.../mesh-style/dynamic-rule-deployment/index.html | 79 +
.../traffic/mesh-style/index.html | 210 +
.../traffic/mesh-style/index.xml | 1516 ++
.../traffic/mesh-style/virtualservice/index.html | 251 +
.../mesh-style/weight-rule-deployment/index.html | 48 +
.../traffic/routing-rule/index.html | 65 +
.../code-architecture/index.html | 14 +
.../java-sdk/concepts-and-architecture/index.html | 11 +
.../java-sdk/concepts-and-architecture/index.xml | 407 +
.../concepts-and-architecture/mesh/index.html | 25 +
.../overall-architecture/index.html | 20 +
.../service-discovery/index.html | 49 +
.../service-invocation/index.html | 79 +
.../concepts-and-architecture/triple/index.html | 22 +
zh/docs3-v2/java-sdk/faq/0/1/index.html | 16 +
zh/docs3-v2/java-sdk/faq/0/10/index.html | 14 +
zh/docs3-v2/java-sdk/faq/0/11/index.html | 14 +
zh/docs3-v2/java-sdk/faq/0/12/index.html | 17 +
zh/docs3-v2/java-sdk/faq/0/13/index.html | 14 +
zh/docs3-v2/java-sdk/faq/0/14/index.html | 18 +
zh/docs3-v2/java-sdk/faq/0/15/index.html | 11 +
zh/docs3-v2/java-sdk/faq/0/16/index.html | 14 +
zh/docs3-v2/java-sdk/faq/0/17/index.html | 14 +
zh/docs3-v2/java-sdk/faq/0/18/index.html | 14 +
zh/docs3-v2/java-sdk/faq/0/19/index.html | 14 +
zh/docs3-v2/java-sdk/faq/0/2/index.html | 14 +
zh/docs3-v2/java-sdk/faq/0/20/index.html | 12 +
zh/docs3-v2/java-sdk/faq/0/21/index.html | 14 +
zh/docs3-v2/java-sdk/faq/0/22/index.html | 11 +
zh/docs3-v2/java-sdk/faq/0/23/index.html | 11 +
zh/docs3-v2/java-sdk/faq/0/24/index.html | 11 +
zh/docs3-v2/java-sdk/faq/0/25/index.html | 15 +
zh/docs3-v2/java-sdk/faq/0/26/index.html | 14 +
zh/docs3-v2/java-sdk/faq/0/27/index.html | 14 +
zh/docs3-v2/java-sdk/faq/0/3/index.html | 25 +
zh/docs3-v2/java-sdk/faq/0/4/index.html | 20 +
zh/docs3-v2/java-sdk/faq/0/5/index.html | 18 +
zh/docs3-v2/java-sdk/faq/0/6/index.html | 15 +
zh/docs3-v2/java-sdk/faq/0/7/index.html | 11 +
zh/docs3-v2/java-sdk/faq/0/8/index.html | 14 +
zh/docs3-v2/java-sdk/faq/0/9/index.html | 14 +
zh/docs3-v2/java-sdk/faq/0/index.html | 11 +
zh/docs3-v2/java-sdk/faq/0/index.xml | 255 +
zh/docs3-v2/java-sdk/faq/1/1/index.html | 14 +
zh/docs3-v2/java-sdk/faq/1/10/index.html | 15 +
zh/docs3-v2/java-sdk/faq/1/11/index.html | 18 +
zh/docs3-v2/java-sdk/faq/1/12/index.html | 18 +
zh/docs3-v2/java-sdk/faq/1/13/index.html | 11 +
zh/docs3-v2/java-sdk/faq/1/14/index.html | 17 +
zh/docs3-v2/java-sdk/faq/1/15/index.html | 17 +
zh/docs3-v2/java-sdk/faq/1/16/index.html | 18 +
zh/docs3-v2/java-sdk/faq/1/17/index.html | 15 +
zh/docs3-v2/java-sdk/faq/1/18/index.html | 19 +
zh/docs3-v2/java-sdk/faq/1/19/index.html | 11 +
zh/docs3-v2/java-sdk/faq/1/20/index.html | 11 +
zh/docs3-v2/java-sdk/faq/1/21/index.html | 11 +
zh/docs3-v2/java-sdk/faq/1/22/index.html | 14 +
zh/docs3-v2/java-sdk/faq/1/23/index.html | 11 +
zh/docs3-v2/java-sdk/faq/1/24/index.html | 11 +
zh/docs3-v2/java-sdk/faq/1/25/index.html | 15 +
zh/docs3-v2/java-sdk/faq/1/26/index.html | 14 +
zh/docs3-v2/java-sdk/faq/1/27/index.html | 14 +
zh/docs3-v2/java-sdk/faq/1/28/index.html | 14 +
zh/docs3-v2/java-sdk/faq/1/29/index.html | 14 +
zh/docs3-v2/java-sdk/faq/1/3/index.html | 14 +
zh/docs3-v2/java-sdk/faq/1/30/index.html | 11 +
zh/docs3-v2/java-sdk/faq/1/31/index.html | 11 +
zh/docs3-v2/java-sdk/faq/1/32/index.html | 11 +
zh/docs3-v2/java-sdk/faq/1/33/index.html | 11 +
zh/docs3-v2/java-sdk/faq/1/34/index.html | 14 +
zh/docs3-v2/java-sdk/faq/1/35/index.html | 11 +
zh/docs3-v2/java-sdk/faq/1/36/index.html | 14 +
zh/docs3-v2/java-sdk/faq/1/37/index.html | 14 +
zh/docs3-v2/java-sdk/faq/1/38/index.html | 11 +
zh/docs3-v2/java-sdk/faq/1/39/index.html | 11 +
zh/docs3-v2/java-sdk/faq/1/4/index.html | 12 +
zh/docs3-v2/java-sdk/faq/1/40/index.html | 14 +
zh/docs3-v2/java-sdk/faq/1/41/index.html | 14 +
zh/docs3-v2/java-sdk/faq/1/5/index.html | 18 +
zh/docs3-v2/java-sdk/faq/1/6/index.html | 18 +
zh/docs3-v2/java-sdk/faq/1/7/index.html | 12 +
zh/docs3-v2/java-sdk/faq/1/8/index.html | 12 +
zh/docs3-v2/java-sdk/faq/1/9/index.html | 17 +
zh/docs3-v2/java-sdk/faq/1/index.html | 11 +
zh/docs3-v2/java-sdk/faq/1/index.xml | 320 +
zh/docs3-v2/java-sdk/faq/2/1/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/10/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/11/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/12/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/13/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/14/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/15/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/16/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/17/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/18/index.html | 14 +
zh/docs3-v2/java-sdk/faq/2/19/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/2/index.html | 17 +
zh/docs3-v2/java-sdk/faq/2/20/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/3/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/4/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/5/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/6/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/7/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/8/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/9/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/index.html | 11 +
zh/docs3-v2/java-sdk/faq/2/index.xml | 176 +
zh/docs3-v2/java-sdk/faq/3/1/index.html | 17 +
zh/docs3-v2/java-sdk/faq/3/2/index.html | 11 +
zh/docs3-v2/java-sdk/faq/3/3/index.html | 14 +
zh/docs3-v2/java-sdk/faq/3/4/index.html | 11 +
zh/docs3-v2/java-sdk/faq/3/5/index.html | 11 +
zh/docs3-v2/java-sdk/faq/3/6/index.html | 11 +
zh/docs3-v2/java-sdk/faq/3/7/index.html | 14 +
zh/docs3-v2/java-sdk/faq/3/8/index.html | 16 +
zh/docs3-v2/java-sdk/faq/3/index.html | 11 +
zh/docs3-v2/java-sdk/faq/3/index.xml | 93 +
zh/docs3-v2/java-sdk/faq/4/1/index.html | 17 +
zh/docs3-v2/java-sdk/faq/4/10/index.html | 15 +
zh/docs3-v2/java-sdk/faq/4/11/index.html | 11 +
zh/docs3-v2/java-sdk/faq/4/12/index.html | 15 +
zh/docs3-v2/java-sdk/faq/4/13/index.html | 11 +
zh/docs3-v2/java-sdk/faq/4/14/index.html | 11 +
zh/docs3-v2/java-sdk/faq/4/15/index.html | 14 +
zh/docs3-v2/java-sdk/faq/4/16/index.html | 14 +
zh/docs3-v2/java-sdk/faq/4/17/index.html | 15 +
zh/docs3-v2/java-sdk/faq/4/18/index.html | 14 +
zh/docs3-v2/java-sdk/faq/4/19/index.html | 20 +
zh/docs3-v2/java-sdk/faq/4/2/index.html | 14 +
zh/docs3-v2/java-sdk/faq/4/20/index.html | 14 +
zh/docs3-v2/java-sdk/faq/4/21/index.html | 14 +
zh/docs3-v2/java-sdk/faq/4/3/index.html | 14 +
zh/docs3-v2/java-sdk/faq/4/4/index.html | 14 +
zh/docs3-v2/java-sdk/faq/4/5/index.html | 14 +
zh/docs3-v2/java-sdk/faq/4/6/index.html | 14 +
zh/docs3-v2/java-sdk/faq/4/7/index.html | 11 +
zh/docs3-v2/java-sdk/faq/4/8/index.html | 11 +
zh/docs3-v2/java-sdk/faq/4/9/index.html | 14 +
zh/docs3-v2/java-sdk/faq/4/index.html | 11 +
zh/docs3-v2/java-sdk/faq/4/index.xml | 141 +
zh/docs3-v2/java-sdk/faq/5/1/index.html | 11 +
zh/docs3-v2/java-sdk/faq/5/10/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/11/index.html | 11 +
zh/docs3-v2/java-sdk/faq/5/12/index.html | 11 +
zh/docs3-v2/java-sdk/faq/5/13/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/14/index.html | 11 +
zh/docs3-v2/java-sdk/faq/5/15/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/16/index.html | 17 +
zh/docs3-v2/java-sdk/faq/5/17/index.html | 11 +
zh/docs3-v2/java-sdk/faq/5/18/index.html | 11 +
zh/docs3-v2/java-sdk/faq/5/19/index.html | 11 +
zh/docs3-v2/java-sdk/faq/5/2/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/20/index.html | 11 +
zh/docs3-v2/java-sdk/faq/5/21/index.html | 17 +
zh/docs3-v2/java-sdk/faq/5/22/index.html | 11 +
zh/docs3-v2/java-sdk/faq/5/23/index.html | 17 +
zh/docs3-v2/java-sdk/faq/5/24/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/25/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/26/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/27/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/28/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/29/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/3/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/30/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/31/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/32/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/33/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/34/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/35/index.html | 17 +
zh/docs3-v2/java-sdk/faq/5/36/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/37/index.html | 17 +
zh/docs3-v2/java-sdk/faq/5/38/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/39/index.html | 15 +
zh/docs3-v2/java-sdk/faq/5/4/index.html | 11 +
zh/docs3-v2/java-sdk/faq/5/40/index.html | 15 +
zh/docs3-v2/java-sdk/faq/5/5/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/6/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/7/index.html | 11 +
zh/docs3-v2/java-sdk/faq/5/8/index.html | 14 +
zh/docs3-v2/java-sdk/faq/5/9/index.html | 11 +
zh/docs3-v2/java-sdk/faq/5/index.html | 11 +
zh/docs3-v2/java-sdk/faq/5/index.xml | 279 +
zh/docs3-v2/java-sdk/faq/6/1/index.html | 17 +
zh/docs3-v2/java-sdk/faq/6/10/index.html | 14 +
zh/docs3-v2/java-sdk/faq/6/11/index.html | 14 +
zh/docs3-v2/java-sdk/faq/6/12/index.html | 15 +
zh/docs3-v2/java-sdk/faq/6/13/index.html | 14 +
zh/docs3-v2/java-sdk/faq/6/14/index.html | 14 +
zh/docs3-v2/java-sdk/faq/6/15/index.html | 14 +
zh/docs3-v2/java-sdk/faq/6/16/index.html | 17 +
zh/docs3-v2/java-sdk/faq/6/2/index.html | 18 +
zh/docs3-v2/java-sdk/faq/6/3/index.html | 17 +
zh/docs3-v2/java-sdk/faq/6/4/index.html | 14 +
zh/docs3-v2/java-sdk/faq/6/5/index.html | 17 +
zh/docs3-v2/java-sdk/faq/6/6/index.html | 17 +
zh/docs3-v2/java-sdk/faq/6/7/index.html | 17 +
zh/docs3-v2/java-sdk/faq/6/8/index.html | 14 +
zh/docs3-v2/java-sdk/faq/6/9/index.html | 12 +
zh/docs3-v2/java-sdk/faq/6/index.html | 11 +
zh/docs3-v2/java-sdk/faq/6/index.xml | 110 +
zh/docs3-v2/java-sdk/faq/7/1/index.html | 14 +
zh/docs3-v2/java-sdk/faq/7/2/index.html | 14 +
zh/docs3-v2/java-sdk/faq/7/3/index.html | 14 +
zh/docs3-v2/java-sdk/faq/7/4/index.html | 14 +
zh/docs3-v2/java-sdk/faq/7/5/index.html | 11 +
zh/docs3-v2/java-sdk/faq/7/6/index.html | 11 +
zh/docs3-v2/java-sdk/faq/7/7/index.html | 15 +
zh/docs3-v2/java-sdk/faq/7/index.html | 11 +
zh/docs3-v2/java-sdk/faq/7/index.xml | 47 +
zh/docs3-v2/java-sdk/faq/81/1/index.html | 11 +
zh/docs3-v2/java-sdk/faq/81/2/index.html | 15 +
zh/docs3-v2/java-sdk/faq/81/3/index.html | 11 +
zh/docs3-v2/java-sdk/faq/81/4/index.html | 11 +
zh/docs3-v2/java-sdk/faq/81/index.html | 11 +
zh/docs3-v2/java-sdk/faq/81/index.xml | 45 +
zh/docs3-v2/java-sdk/faq/99/0/index.html | 17 +
zh/docs3-v2/java-sdk/faq/99/1/index.html | 19 +
zh/docs3-v2/java-sdk/faq/99/index.html | 11 +
zh/docs3-v2/java-sdk/faq/99/index.xml | 21 +
zh/docs3-v2/java-sdk/faq/index.html | 11 +
zh/docs3-v2/java-sdk/faq/index.xml | 23 +
zh/docs3-v2/java-sdk/faq/intro/index.html | 29 +
zh/docs3-v2/java-sdk/index.html | 11 +
zh/docs3-v2/java-sdk/index.xml | 224 +
.../java-sdk/quick-start/eco-system/index.html | 11 +
.../java-sdk/quick-start/eco-system/index.xml | 269 +
.../quick-start/eco-system/rate-limit/index.html | 47 +
.../quick-start/eco-system/transaction/index.html | 180 +
zh/docs3-v2/java-sdk/quick-start/idl/index.html | 187 +
zh/docs3-v2/java-sdk/quick-start/index.html | 11 +
zh/docs3-v2/java-sdk/quick-start/index.xml | 351 +
.../java-sdk/quick-start/spring-boot/index.html | 96 +
.../config-center/apollo/index.html | 42 +
.../config-center/apollo/index.xml | 1 +
.../reference-manual/config-center/index.html | 11 +
.../reference-manual/config-center/index.xml | 200 +
.../config-center/nacos/index.html | 31 +
.../reference-manual/config-center/nacos/index.xml | 1 +
.../config-center/overview/index.html | 16 +
.../config-center/overview/index.xml | 1 +
.../config-center/zookeeper/index.html | 28 +
.../config-center/zookeeper/index.xml | 1 +
.../reference-manual/config/annotation/index.html | 126 +
.../reference-manual/config/annotation/index.xml | 1 +
.../reference-manual/config/api/index.html | 256 +
.../java-sdk/reference-manual/config/api/index.xml | 1 +
.../config/environment-variables/index.html | 20 +
.../config/external-config/index.html | 43 +
.../java-sdk/reference-manual/config/index.html | 11 +
.../java-sdk/reference-manual/config/index.xml | 4657 ++++++
.../reference-manual/config/overview/index.html | 69 +
.../reference-manual/config/overview/index.xml | 1 +
.../reference-manual/config/principle/index.html | 152 +
.../reference-manual/config/principle/index.xml | 1 +
.../reference-manual/config/properties/index.html | 37 +
.../reference-manual/config/properties/index.xml | 1 +
.../reference-manual/config/xml/index.html | 75 +
.../java-sdk/reference-manual/config/xml/index.xml | 1 +
.../java-sdk/reference-manual/graalvm/index.html | 133 +
.../java-sdk/reference-manual/graalvm/index.xml | 1 +
zh/docs3-v2/java-sdk/reference-manual/index.html | 11 +
zh/docs3-v2/java-sdk/reference-manual/index.xml | 189 +
.../reference-manual/metadata-center/index.html | 11 +
.../reference-manual/metadata-center/index.xml | 347 +
.../metadata-center/nacos/guide/index.html | 223 +
.../metadata-center/nacos/index.html | 27 +
.../metadata-center/nacos/index.xml | 1 +
.../metadata-center/nacos/overview/index.html | 12 +
.../metadata-center/overview/index.html | 147 +
.../metadata-center/overview/index.xml | 1 +
.../metadata-center/redis/guide/index.html | 12 +
.../metadata-center/redis/index.html | 11 +
.../metadata-center/redis/index.xml | 1 +
.../metadata-center/redis/overview/index.html | 12 +
.../metadata-center/zookeeper/guide/index.html | 12 +
.../metadata-center/zookeeper/index.html | 80 +
.../metadata-center/zookeeper/index.xml | 1 +
.../metadata-center/zookeeper/overview/index.html | 12 +
.../performance/benchmarking/index.html | 23 +
.../reference-manual/performance/index.html | 11 +
.../reference-manual/performance/index.xml | 131 +
.../performance/rpc-benchmarking/index.html | 26 +
.../protocol/dubbo/guide/index.html | 29 +
.../reference-manual/protocol/dubbo/index.html | 32 +
.../reference-manual/protocol/dubbo/index.xml | 211 +
.../protocol/dubbo/overview/index.html | 29 +
.../protocol/grpc/guide/index.html | 21 +
.../reference-manual/protocol/grpc/index.html | 18 +
.../reference-manual/protocol/grpc/index.xml | 43 +
.../protocol/grpc/overview/index.html | 21 +
.../protocol/hessian/guide/index.html | 34 +
.../reference-manual/protocol/hessian/index.html | 39 +
.../reference-manual/protocol/hessian/index.xml | 44 +
.../protocol/hessian/overview/index.html | 11 +
.../protocol/http/guide/index.html | 44 +
.../reference-manual/protocol/http/index.html | 37 +
.../reference-manual/protocol/http/index.xml | 41 +
.../protocol/http/overview/index.html | 11 +
.../java-sdk/reference-manual/protocol/index.html | 11 +
.../java-sdk/reference-manual/protocol/index.xml | 1081 ++
.../protocol/memcached/guide/index.html | 45 +
.../reference-manual/protocol/memcached/index.html | 50 +
.../reference-manual/protocol/memcached/index.xml | 23 +
.../protocol/memcached/overview/index.html | 11 +
.../reference-manual/protocol/overview/index.html | 31 +
.../reference-manual/protocol/overview/index.xml | 1 +
.../protocol/redis/guide/index.html | 42 +
.../reference-manual/protocol/redis/index.html | 50 +
.../reference-manual/protocol/redis/index.xml | 23 +
.../protocol/redis/overview/index.html | 11 +
.../protocol/rest/guide/index.html | 307 +
.../reference-manual/protocol/rest/index.html | 307 +
.../reference-manual/protocol/rest/index.xml | 1294 ++
.../protocol/rest/overview/index.html | 372 +
.../reference-manual/protocol/rmi/guide/index.html | 35 +
.../reference-manual/protocol/rmi/index.html | 40 +
.../reference-manual/protocol/rmi/index.xml | 52 +
.../protocol/rmi/overview/index.html | 11 +
.../protocol/thrift/guide/index.html | 38 +
.../reference-manual/protocol/thrift/index.html | 43 +
.../reference-manual/protocol/thrift/index.xml | 22 +
.../protocol/thrift/overview/index.html | 11 +
.../protocol/triple/guide/index.html | 219 +
.../protocol/triple/idl/index.html | 192 +
.../reference-manual/protocol/triple/index.html | 11 +
.../reference-manual/protocol/triple/index.xml | 861 ++
.../protocol/triple/migration/index.html | 48 +
.../protocol/triple/overview/index.html | 28 +
.../protocol/triple/pojo/index.html | 152 +
.../protocol/triple/streaming/index.html | 133 +
.../protocol/webservice/guide/index.html | 54 +
.../protocol/webservice/index.html | 59 +
.../reference-manual/protocol/webservice/index.xml | 68 +
.../protocol/webservice/overview/index.html | 11 +
.../reference-manual/qos/command/index.html | 31 +
.../java-sdk/reference-manual/qos/index.html | 11 +
.../java-sdk/reference-manual/qos/index.xml | 474 +
.../qos/logger-management/index.html | 52 +
.../reference-manual/qos/overview/index.html | 96 +
.../java-sdk/reference-manual/qos/probe/index.html | 23 +
.../reference-manual/qos/profiler/index.html | 33 +
.../qos/router-snapshot/index.html | 63 +
.../qos/service-management/index.html | 40 +
.../java-sdk/reference-manual/registry/index.html | 11 +
.../java-sdk/reference-manual/registry/index.xml | 636 +
.../reference-manual/registry/multicast/index.html | 20 +
.../reference-manual/registry/multicast/index.xml | 1 +
.../registry/multiple-registry/index.html | 72 +
.../registry/multiple-registry/index.xml | 1 +
.../reference-manual/registry/nacos/index.html | 69 +
.../reference-manual/registry/nacos/index.xml | 1 +
.../reference-manual/registry/overview/index.html | 29 +
.../reference-manual/registry/overview/index.xml | 1 +
.../reference-manual/registry/redis/index.html | 15 +
.../reference-manual/registry/redis/index.xml | 1 +
.../reference-manual/registry/simple/index.html | 31 +
.../reference-manual/registry/zookeeper/index.html | 53 +
.../reference-manual/registry/zookeeper/index.xml | 1 +
.../spi/description/cache/index.html | 66 +
.../spi/description/cluster/index.html | 57 +
.../spi/description/compiler/index.html | 49 +
.../spi/description/config-center/index.html | 36 +
.../spi/description/container/index.html | 51 +
.../spi/description/dispatcher/index.html | 49 +
.../spi/description/dubbo-spi/index.html | 522 +
.../spi/description/exchanger/index.html | 67 +
.../spi/description/exporter-listener/index.html | 56 +
.../spi/description/extension-factory/index.html | 47 +
.../spi/description/filter/index.html | 55 +
.../reference-manual/spi/description/index.html | 11 +
.../reference-manual/spi/description/index.xml | 2329 +++
.../spi/description/invoker-listener/index.html | 55 +
.../spi/description/liveness/index.html | 51 +
.../spi/description/load-balance/index.html | 52 +
.../spi/description/logger-adapter/index.html | 64 +
.../spi/description/merger/index.html | 47 +
.../spi/description/metadata-report/index.html | 60 +
.../spi/description/monitor/index.html | 60 +
.../spi/description/networker/index.html | 49 +
.../spi/description/page/index.html | 49 +
.../spi/description/protocol/index.html | 108 +
.../spi/description/proxy-factory/index.html | 52 +
.../spi/description/qos-permission/index.html | 54 +
.../spi/description/readiness/index.html | 48 +
.../spi/description/registry/index.html | 167 +
.../spi/description/remoting/index.html | 93 +
.../spi/description/router/index.html | 46 +
.../spi/description/serialize/index.html | 52 +
.../spi/description/startup/index.html | 48 +
.../spi/description/status-checker/index.html | 49 +
.../spi/description/telnet-handler/index.html | 50 +
.../spi/description/threadpool/index.html | 50 +
.../spi/description/validation/index.html | 64 +
.../java-sdk/reference-manual/spi/index.html | 11 +
.../java-sdk/reference-manual/spi/index.xml | 65 +
.../reference-manual/spi/overview/index.html | 18 +
.../reference-manual/spi/overview/index.xml | 1 +
.../2.x-to-3.x-compatibility-guide/index.html | 26 +
.../3.0-to-3.1-compatibility-guide/index.html | 11 +
.../3.1-to-3.2-compatibility-guide/index.html | 19 +
.../java-sdk/upgrades-and-compatibility/index.html | 11 +
.../java-sdk/upgrades-and-compatibility/index.xml | 698 +
.../migration-triple/index.html | 163 +
.../protobufinterface/index.html | 38 +
.../serialization-upgrade/index.html | 13 +
.../service-discovery/index.html | 11 +
.../service-discovery/index.xml | 279 +
.../migration-service-discovery/index.html | 29 +
.../service-discovery-rule/index.html | 77 +
.../service-discovery-samples/index.html | 26 +
zh/docs3-v2/rust-sdk/index.html | 11 +
zh/docs3-v2/rust-sdk/index.xml | 700 +
.../rust-sdk/java-interoperability/index.html | 47 +
zh/docs3-v2/rust-sdk/quick-start/index.html | 153 +
zh/docs3-v2/rust-sdk/streaming/index.html | 343 +
zh/docs3-v2/rust-sdk/unix-transport/index.html | 115 +
zh/docsv2.7/admin/index.html | 11 +
zh/docsv2.7/admin/index.xml | 15 +
zh/docsv2.7/admin/install/admin-console/index.html | 41 +
zh/docsv2.7/admin/install/consumer-demo/index.html | 24 +
zh/docsv2.7/admin/install/index.html | 11 +
zh/docsv2.7/admin/install/index.xml | 145 +
.../admin/install/monitor-center/index.html | 11 +
zh/docsv2.7/admin/install/provider-demo/index.html | 24 +
zh/docsv2.7/admin/install/redis/index.html | 52 +
zh/docsv2.7/admin/install/zookeeper/index.html | 65 +
zh/docsv2.7/admin/ops/apidocs/index.html | 45 +
zh/docsv2.7/admin/ops/functions/index.html | 14 +
zh/docsv2.7/admin/ops/governance/index.html | 59 +
zh/docsv2.7/admin/ops/index.html | 11 +
zh/docsv2.7/admin/ops/index.xml | 691 +
zh/docsv2.7/admin/ops/introduction/index.html | 49 +
zh/docsv2.7/admin/ops/pinpoint/index.html | 313 +
zh/docsv2.7/admin/ops/search/index.html | 14 +
zh/docsv2.7/admin/ops/skywalking/index.html | 67 +
zh/docsv2.7/admin/ops/test/index.html | 11 +
zh/docsv2.7/dev/build/index.html | 19 +
zh/docsv2.7/dev/checklist/index.html | 11 +
zh/docsv2.7/dev/code-smell/index.html | 58 +
zh/docsv2.7/dev/coding/index.html | 11 +
zh/docsv2.7/dev/contract/index.html | 11 +
zh/docsv2.7/dev/design/index.html | 11 +
zh/docsv2.7/dev/implementation/index.html | 36 +
zh/docsv2.7/dev/impls/cache/index.html | 66 +
zh/docsv2.7/dev/impls/cluster/index.html | 57 +
zh/docsv2.7/dev/impls/compiler/index.html | 49 +
zh/docsv2.7/dev/impls/config-center/index.html | 36 +
zh/docsv2.7/dev/impls/container/index.html | 51 +
zh/docsv2.7/dev/impls/dispatcher/index.html | 49 +
zh/docsv2.7/dev/impls/exchanger/index.html | 67 +
zh/docsv2.7/dev/impls/exporter-listener/index.html | 56 +
zh/docsv2.7/dev/impls/extension-factory/index.html | 47 +
zh/docsv2.7/dev/impls/filter/index.html | 55 +
zh/docsv2.7/dev/impls/index.html | 11 +
zh/docsv2.7/dev/impls/index.xml | 1554 ++
zh/docsv2.7/dev/impls/invoker-listener/index.html | 55 +
zh/docsv2.7/dev/impls/load-balance/index.html | 52 +
zh/docsv2.7/dev/impls/logger-adapter/index.html | 64 +
zh/docsv2.7/dev/impls/merger/index.html | 47 +
zh/docsv2.7/dev/impls/monitor/index.html | 60 +
zh/docsv2.7/dev/impls/networker/index.html | 49 +
zh/docsv2.7/dev/impls/page/index.html | 45 +
zh/docsv2.7/dev/impls/protocol/index.html | 108 +
zh/docsv2.7/dev/impls/proxy-factory/index.html | 52 +
zh/docsv2.7/dev/impls/registry/index.html | 167 +
zh/docsv2.7/dev/impls/remoting/index.html | 93 +
zh/docsv2.7/dev/impls/router/index.html | 46 +
zh/docsv2.7/dev/impls/serialize/index.html | 52 +
zh/docsv2.7/dev/impls/status-checker/index.html | 49 +
zh/docsv2.7/dev/impls/telnet-handler/index.html | 50 +
zh/docsv2.7/dev/impls/threadpool/index.html | 50 +
zh/docsv2.7/dev/impls/validation/index.html | 64 +
zh/docsv2.7/dev/index.html | 11 +
zh/docsv2.7/dev/index.xml | 722 +
zh/docsv2.7/dev/principals/code-detail/index.html | 35 +
.../dev/principals/configuration/index.html | 48 +
zh/docsv2.7/dev/principals/dummy/index.html | 173 +
.../dev/principals/expansibility/index.html | 20 +
zh/docsv2.7/dev/principals/extension/index.html | 87 +
.../dev/principals/general-knowledge/index.html | 24 +
zh/docsv2.7/dev/principals/index.html | 11 +
zh/docsv2.7/dev/principals/index.xml | 408 +
zh/docsv2.7/dev/principals/introduction/index.html | 7 +
zh/docsv2.7/dev/principals/robustness/index.html | 68 +
zh/docsv2.7/dev/release/index.html | 11 +
.../dev/source/adaptive-extension/index.html | 572 +
zh/docsv2.7/dev/source/cluster/index.html | 472 +
zh/docsv2.7/dev/source/directory/index.html | 437 +
zh/docsv2.7/dev/source/dubbo-spi/index.html | 315 +
zh/docsv2.7/dev/source/export-service/index.html | 1212 ++
zh/docsv2.7/dev/source/index.html | 11 +
zh/docsv2.7/dev/source/index.xml | 7066 +++++++++
zh/docsv2.7/dev/source/loadbalance/index.html | 583 +
zh/docsv2.7/dev/source/refer-service/index.html | 782 +
zh/docsv2.7/dev/source/router/index.html | 362 +
.../dev/source/service-invoking-process/index.html | 1701 +++
zh/docsv2.7/dev/spi/index.html | 111 +
zh/docsv2.7/dev/tck/index.html | 11 +
zh/docsv2.7/index.html | 11 +
zh/docsv2.7/index.xml | 179 +
zh/docsv2.7/user/benchmark-tool/index.html | 15 +
zh/docsv2.7/user/best-practice/index.html | 11 +
zh/docsv2.7/user/capacity-plan/index.html | 11 +
.../user/configuration/annotation/index.html | 56 +
zh/docsv2.7/user/configuration/api/index.html | 103 +
.../user/configuration/config-center/index.html | 39 +
.../configuration-load-process/index.html | 91 +
.../configuration/environment-variables/index.html | 19 +
zh/docsv2.7/user/configuration/index.html | 11 +
zh/docsv2.7/user/configuration/index.xml | 557 +
.../user/configuration/properties/index.html | 14 +
zh/docsv2.7/user/configuration/xml/index.html | 41 +
zh/docsv2.7/user/coveragence/index.html | 12 +
zh/docsv2.7/user/dependencies/index.html | 15 +
zh/docsv2.7/user/examples/accesslog/index.html | 13 +
zh/docsv2.7/user/examples/async-call/index.html | 62 +
.../examples/async-execute-on-provider/index.html | 52 +
zh/docsv2.7/user/examples/attachment/index.html | 21 +
zh/docsv2.7/user/examples/auth/index.html | 31 +
.../examples/broadcast-resp-collect/index.html | 42 +
.../user/examples/callback-parameter/index.html | 86 +
.../user/examples/concurrency-control/index.html | 25 +
.../user/examples/config-connections/index.html | 15 +
.../examples/config-rule-deprecated/index.html | 18 +
zh/docsv2.7/user/examples/config-rule/index.html | 101 +
.../user/examples/consumer-threadpool/index.html | 11 +
zh/docsv2.7/user/examples/context/index.html | 36 +
zh/docsv2.7/user/examples/delay-publish/index.html | 14 +
.../examples/distributed-transaction/index.html | 11 +
zh/docsv2.7/user/examples/dump/index.html | 16 +
zh/docsv2.7/user/examples/echo-service/index.html | 21 +
zh/docsv2.7/user/examples/events-notify/index.html | 58 +
.../user/examples/explicit-target/index.html | 15 +
.../examples/fault-tolerent-strategy/index.html | 22 +
.../examples/generic-invoke-with-json/index.html | 51 +
.../user/examples/generic-reference/index.html | 71 +
.../user/examples/generic-service/index.html | 36 +
.../user/examples/graceful-shutdown/index.html | 14 +
zh/docsv2.7/user/examples/group-merger/index.html | 25 +
.../user/examples/hostname-binding/index.html | 16 +
zh/docsv2.7/user/examples/index.html | 12 +
zh/docsv2.7/user/examples/index.xml | 2556 ++++
.../examples/invoke-with-specified-ip/index.html | 51 +
zh/docsv2.7/user/examples/lazy-connect/index.html | 12 +
zh/docsv2.7/user/examples/loadbalance/index.html | 19 +
zh/docsv2.7/user/examples/local-call/index.html | 19 +
zh/docsv2.7/user/examples/local-mock/index.html | 34 +
zh/docsv2.7/user/examples/local-stub/index.html | 32 +
.../user/examples/logger-strategy/index.html | 14 +
.../user/examples/msgpack-serialization/index.html | 85 +
.../user/examples/multi-protocols/index.html | 39 +
.../user/examples/multi-registry/index.html | 62 +
.../user/examples/multi-versions/index.html | 16 +
zh/docsv2.7/user/examples/netty4/index.html | 20 +
.../user/examples/parameter-validation/index.html | 144 +
.../user/examples/pb-generic-reference/index.html | 64 +
.../user/examples/preflight-check/index.html | 22 +
zh/docsv2.7/user/examples/protobuf-idl/index.html | 35 +
.../examples/provider-timeout-release/index.html | 112 +
.../examples/reference-config-cache/index.html | 25 +
zh/docsv2.7/user/examples/registry-only/index.html | 15 +
zh/docsv2.7/user/examples/result-cache/index.html | 15 +
.../examples/routing-rule-deprecated/index.html | 53 +
zh/docsv2.7/user/examples/routing-rule/index.html | 65 +
zh/docsv2.7/user/examples/serialization/index.html | 57 +
.../user/examples/service-container/index.html | 16 +
.../user/examples/service-downgrade/index.html | 14 +
zh/docsv2.7/user/examples/service-group/index.html | 16 +
zh/docsv2.7/user/examples/set-host/index.html | 18 +
.../examples/simplify-registry-data/index.html | 106 +
.../user/examples/static-service/index.html | 16 +
zh/docsv2.7/user/examples/stickiness/index.html | 15 +
.../user/examples/subscribe-only/index.html | 13 +
zh/docsv2.7/user/examples/thread-model/index.html | 12 +
zh/docsv2.7/user/examples/tls/index.html | 28 +
.../user/examples/token-authorization/index.html | 19 +
.../index.html" | 15 +
zh/docsv2.7/user/index.html | 11 +
zh/docsv2.7/user/index.xml | 2638 ++++
zh/docsv2.7/user/languages/erlang/index.html | 11 +
zh/docsv2.7/user/languages/erlang/index.xml | 118 +
.../user/languages/erlang/quick-start/index.html | 27 +
.../user/languages/erlang/reference/index.html | 19 +
.../user/languages/erlang/serialization/index.html | 15 +
.../user/languages/erlang/service/index.html | 19 +
zh/docsv2.7/user/languages/index.html | 11 +
zh/docsv2.7/user/languages/index.xml | 1 +
zh/docsv2.7/user/maturity/index.html | 11 +
.../user/new-features-in-a-glance/index.html | 22 +
zh/docsv2.7/user/perf-test/index.html | 14 +
zh/docsv2.7/user/preface/architecture/index.html | 11 +
zh/docsv2.7/user/preface/background/index.html | 11 +
zh/docsv2.7/user/preface/index.html | 11 +
zh/docsv2.7/user/preface/index.xml | 147 +
zh/docsv2.7/user/preface/requirements/index.html | 11 +
zh/docsv2.7/user/preface/usage/index.html | 25 +
zh/docsv2.7/user/quick-start/index.html | 83 +
zh/docsv2.7/user/recommend/index.html | 36 +
zh/docsv2.7/user/references/api/index.html | 30 +
zh/docsv2.7/user/references/index.html | 11 +
zh/docsv2.7/user/references/index.xml | 627 +
zh/docsv2.7/user/references/maven/index.html | 13 +
zh/docsv2.7/user/references/metadata/index.html | 224 +
.../user/references/protocol/dubbo/index.html | 21 +
.../user/references/protocol/grpc/index.html | 12 +
.../user/references/protocol/hessian/index.html | 22 +
.../user/references/protocol/http/index.html | 23 +
zh/docsv2.7/user/references/protocol/index.html | 11 +
zh/docsv2.7/user/references/protocol/index.xml | 889 ++
.../user/references/protocol/memcached/index.html | 18 +
.../user/references/protocol/redis/index.html | 18 +
.../user/references/protocol/rest/index.html | 288 +
.../user/references/protocol/rmi/index.html | 21 +
.../user/references/protocol/thrift/index.html | 17 +
.../user/references/protocol/webservice/index.html | 39 +
zh/docsv2.7/user/references/qos/index.html | 119 +
zh/docsv2.7/user/references/registry/index.html | 11 +
zh/docsv2.7/user/references/registry/index.xml | 284 +
.../user/references/registry/multicast/index.html | 19 +
.../user/references/registry/nacos/index.html | 69 +
.../user/references/registry/redis/index.html | 15 +
.../user/references/registry/simple/index.html | 31 +
.../user/references/registry/zookeeper/index.html | 53 +
zh/docsv2.7/user/references/telnet/index.html | 13 +
.../references/xml/dubbo-application/index.html | 11 +
.../user/references/xml/dubbo-argument/index.html | 14 +
.../references/xml/dubbo-config-center/index.html | 11 +
.../user/references/xml/dubbo-consumer/index.html | 11 +
.../user/references/xml/dubbo-method/index.html | 14 +
.../user/references/xml/dubbo-module/index.html | 11 +
.../user/references/xml/dubbo-monitor/index.html | 11 +
.../user/references/xml/dubbo-parameter/index.html | 15 +
.../user/references/xml/dubbo-protocol/index.html | 11 +
.../user/references/xml/dubbo-provider/index.html | 11 +
.../user/references/xml/dubbo-reference/index.html | 11 +
.../user/references/xml/dubbo-registry/index.html | 11 +
.../user/references/xml/dubbo-service/index.html | 11 +
zh/docsv2.7/user/references/xml/index.html | 11 +
zh/docsv2.7/user/references/xml/index.xml | 2323 +++
zh/docsv2.7/user/rest/index.html | 363 +
zh/docsv2.7/user/serialization/index.html | 57 +
zh/docsv2.7/user/simple-monitor/index.html | 51 +
zh/docsv2.7/user/versions/index.html | 11 +
zh/docsv2.7/user/versions/index.xml | 297 +
zh/docsv2.7/user/versions/version-270/index.html | 95 +
zh/featured-background.jpg | Bin 0 -> 146971 bytes
...a2_146971_1920x1080_fill_q75_catmullrom_top.jpg | Bin 0 -> 49146 bytes
...9fa2_146971_960x540_fill_q75_catmullrom_top.jpg | Bin 0 -> 15763 bytes
zh/index.html | 14 +
zh/index.xml | 14472 +++++++++++++++++++
zh/notices/index.html | 11 +
zh/notices/index.xml | 1 +
zh/notices/security/index.html | 29 +
zh/overview/history-version/index.html | 11 +
zh/overview/history-version/index.xml | 1 +
zh/overview/index.html | 11 +
zh/overview/index.xml | 1 +
zh/overview/mannual/index.html | 11 +
zh/overview/mannual/index.xml | 1 +
zh/overview/quickstart/index.html | 11 +
zh/overview/quickstart/index.xml | 1 +
zh/overview/tasks/config-rule/index.html | 121 +
zh/overview/tasks/deploy-on-k8s/index.html | 206 +
zh/overview/tasks/dubbo-mesh/index.html | 11 +
zh/overview/tasks/ecosystem/index.html | 11 +
zh/overview/tasks/ecosystem/index.xml | 269 +
zh/overview/tasks/ecosystem/rate-limit/index.html | 47 +
zh/overview/tasks/ecosystem/transaction/index.html | 180 +
zh/overview/tasks/idl/index.html | 148 +
zh/overview/tasks/index.html | 11 +
zh/overview/tasks/index.xml | 311 +
.../tasks/kubernetes/deploy-on-k8s/index.html | 195 +
zh/overview/tasks/kubernetes/index.html | 11 +
zh/overview/tasks/kubernetes/index.xml | 242 +
zh/overview/tasks/mesh/dubbo-mesh/index.html | 138 +
zh/overview/tasks/mesh/index.html | 11 +
zh/overview/tasks/mesh/index.xml | 386 +
zh/overview/tasks/mesh/proxyless/index.html | 124 +
zh/overview/tasks/migration/2to3/index.html | 16 +
zh/overview/tasks/migration/index.html | 11 +
zh/overview/tasks/migration/index.xml | 114 +
.../tasks/migration/migration-triple/index.html | 11 +
.../migration/service-discovery-samples/index.html | 26 +
zh/overview/tasks/traffic-management/index.html | 11 +
zh/overview/tasks/traffic-management/index.xml | 430 +
.../tasks/traffic-management/isolation/index.html | 34 +
.../tasks/traffic-management/timeout/index.html | 34 +
.../traffic-condition/index.html | 22 +
.../traffic-management/traffic-gray/index.html | 31 +
.../traffic-management/traffic-routing/index.html | 20 +
.../tasks/traffic-management/weight/index.html | 12 +
.../tasks/traffic-management/zone/index.html | 22 +
zh/overview/tasks/triple/grpc/index.html | 11 +
zh/overview/tasks/triple/idl/index.html | 182 +
zh/overview/tasks/triple/index.html | 11 +
zh/overview/tasks/triple/index.xml | 630 +
zh/overview/tasks/triple/streaming/index.html | 239 +
zh/overview/tasks/triple/wrap/index.html | 140 +
zh/overview/what/architecture/index.html | 43 +
zh/overview/what/dubbo3/index.html | 23 +
zh/overview/what/ecosystem/index.html | 17 +
zh/overview/what/extensibility/index.html | 33 +
zh/overview/what/index.html | 11 +
zh/overview/what/index.xml | 423 +
zh/overview/what/overview/index.html | 23 +
zh/overview/whatsnew/background/index.html | 23 +
zh/overview/whatsnew/index.html | 11 +
zh/overview/whatsnew/index.xml | 157 +
zh/overview/whatsnew/mesh/index.html | 25 +
zh/overview/whatsnew/service-discovery/index.html | 41 +
zh/overview/whatsnew/triple/index.html | 22 +
zh/release/dubbo-admin/index.html | 19 +
zh/release/dubbo-go-pixiu/index.html | 14 +
zh/release/dubbo-spi-extensions/index.html | 24 +
zh/release/go/index.html | 14 +
zh/release/index.html | 11 +
zh/release/index.xml | 1 +
zh/release/java/index.html | 48 +
zh/release/past-releases/dubbo-admin/index.html | 19 +
zh/release/past-releases/dubbo-go-pixiu/index.html | 14 +
.../past-releases/dubbo-spi-extensions/index.html | 31 +
zh/release/past-releases/go/index.html | 14 +
zh/release/past-releases/index.html | 11 +
zh/release/past-releases/index.xml | 687 +
zh/release/past-releases/java/index.html | 232 +
zh/sitemap.xml | 1 +
zh/users/alibaba/index.html | 23 +
zh/users/dianxiaomi/index.html | 56 +
zh/users/eleme/index.html | 40 +
zh/users/fenghuodi/index.html | 11 +
zh/users/guazi/index.html | 87 +
zh/users/icbc/index.html | 26 +
zh/users/index.html | 7 +
zh/users/index.xml | 1 +
zh/users/pingan/index.html | 35 +
zh/users/xiaomi/index.html | 17 +
zh/users/zhonglunwangluo/index.html | 45 +
5258 files changed, 1020349 insertions(+)
diff --git a/.asf.yaml b/.asf.yaml
new file mode 100644
index 00000000000..07355508b45
--- /dev/null
+++ b/.asf.yaml
@@ -0,0 +1,2 @@
+publish:
+ whoami: asf-site
diff --git a/.htaccess b/.htaccess
new file mode 100644
index 00000000000..673542e0b4f
--- /dev/null
+++ b/.htaccess
@@ -0,0 +1,34 @@
+# no cahce for root index redirection
+<If "%{REQUEST_URI} =~ m#^/?([\w\-]+\.html)?$#">
+ <IfModule mod_expires.c>
+ ExpiresActive off
+ </IfModule>
+
+ <IfModule mod_headers.c>
+ Header always set Cache-Control "no-store, no-cache, must-revalidate"
+ Header always set Expires "Thu, 01 Dec 1994 16:00:00 GMT"
+ Header always merge Vary "Accept-Language"
+ </IfModule>
+</If>
+
+<IfModule mod_rewrite.c>
+ RewriteEngine On
+
+ RewriteCond "%{HTTP:Accept-Language}" ^zh
+ RewriteCond %{HTTP_HOST} !cn
+ RewriteRule ^(.*)$ https://cn.dubbo.apache.org/$1 [L,R=302]
+
+ RewriteCond %{SERVER_PORT} !^443$
+ RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
+
+ RewriteCond "%{HTTP:Accept-Language}" ^zh [NC]
+ RewriteRule ^/?(index\.html)?$ "/zh/index.html" [L,R=302]
+
+ RewriteRule ^/?(index\.html)?$ "/en/index.html" [L,R=302]
+
+ RewriteCond "%{HTTP:Accept-Language}" ^zh [NC]
+ RewriteRule ^/?faq/?([\w\-/]+)?$ "/zh/docs3-v2/java-sdk/faq/$1" [L,R=302]
+
+ RewriteRule ^/?faq/?([\w\-/]+)?$ "/en/docs3-v2/java-sdk/faq/$1" [L,R=302]
+
+</IfModule>
diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/404.html b/404.html
new file mode 100644
index 00000000000..7478d0b24b9
--- /dev/null
+++ b/404.html
@@ -0,0 +1,4 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+function newHref(path,newPath){var idx=originalHref.indexOf(path);var part1=originalHref.substring(0,idx);var part2="";if(idx+path.length<originalHref.length-1){part2=originalHref.substring(idx+path.length);}
+var newHref=part1+newPath+part2;if(newHref.endsWith('.html')){newHref=newHref.substr(0,newHref.length-5)+"/";}
+return newHref;}</script></main><footer class="bg-dark py-5 row d-print-none"><div class="container-fluid mx-sm-5"><div class=row><div class="col-6 col-sm-4 text-xs-center order-sm-2"><ul class="list-inline mb-0"><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title="Dubbo mailing list archive" aria-label="Dubbo mailing list archive"><a class=text-white target=_blank rel="noopener noreferrer" href=https://lists.apache.org/list.html?dev@dubbo.apache.org><i clas [...]
\ No newline at end of file
diff --git a/ByteDanceVerify.html b/ByteDanceVerify.html
new file mode 100644
index 00000000000..8c4ba2c1f84
--- /dev/null
+++ b/ByteDanceVerify.html
@@ -0,0 +1 @@
+11lPNAUhNfhESk2wPqpP
\ No newline at end of file
diff --git a/CNAME b/CNAME
new file mode 100644
index 00000000000..21513514687
--- /dev/null
+++ b/CNAME
@@ -0,0 +1 @@
+dubbo.io
diff --git a/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/index.html b/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/index.html
new file mode 100644
index 00000000000..df82f9f09bf
--- /dev/null
+++ b/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/index.html
@@ -0,0 +1,38 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/qcon-beijing-2018.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+ [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Dubbo%20roadmap%20is%20announced%20in%20QCon%20Beijing%202018" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role=main><a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href=/blog/news/index.xml target=_blank>RSS <i class="fa fa-rss ml-2"></i></a><div class=td-content><h1>Dubbo roadmap is announced in QCon Beijing 2018</h1><div class=lead>This article will introduce you that Dubbo roadmap is a [...]
\ No newline at end of file
diff --git a/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/index.html b/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/index.html
new file mode 100644
index 00000000000..6d3d01adfe8
--- /dev/null
+++ b/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/index.html
@@ -0,0 +1,38 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/gsoc-2018.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+t [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=The%20GSoC%28Google%20Summer%20of%20Code%29%202018" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role=main><a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href=/blog/news/index.xml target=_blank>RSS <i class="fa fa-rss ml-2"></i></a><div class=td-content><h1>The GSoC(Google Summer of Code) 2018</h1><div class=lead>The GSoC(Google Summer of Code) 2018 projects has been announced</ [...]
\ No newline at end of file
diff --git a/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/index.html b/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/index.html
new file mode 100644
index 00000000000..e9e4be0ba32
--- /dev/null
+++ b/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/index.html
@@ -0,0 +1,38 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/apachecon-na-2018.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+ [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=The%20ApacheCon%20NA%20schedule%20has%20been%20announced" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role=main><a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href=/blog/news/index.xml target=_blank>RSS <i class="fa fa-rss ml-2"></i></a><div class=td-content><h1>The ApacheCon NA schedule has been announced</h1><div class=lead>This article will introduce you that the ApacheCon NA sche [...]
\ No newline at end of file
diff --git a/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/index.html b/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/index.html
new file mode 100644
index 00000000000..983f4f68973
--- /dev/null
+++ b/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/index.html
@@ -0,0 +1,38 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-meetup-beijing.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+secti [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=The%20first%20Dubbo%20meetup%20has%20been%20held%20in%20Beijing" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role=main><a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href=/blog/news/index.xml target=_blank>RSS <i class="fa fa-rss ml-2"></i></a><div class=td-content><h1>The first Dubbo meetup has been held in Beijing</h1><div class=lead>The first Dubbo meetup has been held in Beijing.</div>< [...]
\ No newline at end of file
diff --git a/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/index.html b/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/index.html
new file mode 100644
index 00000000000..85b89640592
--- /dev/null
+++ b/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/index.html
@@ -0,0 +1,38 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-meetup-shanghai.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+sect [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=The%20second%20Dubbo%20Shanghai%20meetup%20has%20been%20held%20successfully" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role=main><a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href=/blog/news/index.xml target=_blank>RSS <i class="fa fa-rss ml-2"></i></a><div class=td-content><h1>The second Dubbo Shanghai meetup has been held successfully</h1><div class=lead>The second Dubbo Shanghai meetup has been h [...]
\ No newline at end of file
diff --git a/blog/2018/07/01/your-first-dubbo-filter/index.html b/blog/2018/07/01/your-first-dubbo-filter/index.html
new file mode 100644
index 00000000000..69726917e8d
--- /dev/null
+++ b/blog/2018/07/01/your-first-dubbo-filter/index.html
@@ -0,0 +1,194 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/first-dubbo-filter.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Your%20First%20Dubbo%20Filter" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role=main><a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href=/blog/news/index.xml target=_blank>RSS <i class="fa fa-rss ml-2"></i></a><div class=td-content><h1>Your First Dubbo Filter</h1><div class=lead>This article will introduce you that how to implement a dubbo filter</div><div [...]
+extension point, and the Filter interception will be executed during each call.</p><h4 id=extension-mechanism-of-dubbo-filter>Extension Mechanism of Dubbo Filter</h4><p>There are already about 20 Filters implemented in Dubbo. Their entry is ProtocolFilterWrapper, ProtocolFilterWrapper
+makes a Wrapper on Protocol and will be loaded when the extension is loaded. Then, let’s see how
+the Filter chain is constructed.</p><div class=highlight><pre 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=color:#586e75>//ProtocolFilterWrapper.java
+</span><span style=color:#586e75></span><span style=color:#268bd2>public</span> <span style=color:#719e07><</span>T<span style=color:#719e07>></span> Invoker<span style=color:#719e07><</span>T<span style=color:#719e07>></span> <span style=color:#268bd2>refer</span><span style=color:#719e07>(</span>Class<span style=color:#719e07><</span>T<span style=color:#719e07>></span> type<span style=color:#719e07>,</span> URL url<span style=color:#719e07>)</span> <span style=color:# [...]
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>Constants<span style=color:#719e07>.</span>REGISTRY_PROTOCOL<span style=color:#719e07>.</span>equals<span style=color:#719e07>(</span>url<span style=color:#719e07>.</span>getProtocol<span style=color:#719e07>()))</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> protocol<span style=color:#719e07>.</span>refer<span style=color:#719e07>(</span>type<span style=color:#719e07>,</span> url<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>return</span> buildInvokerChain<span style=color:#719e07>(</span>protocol<span style=color:#719e07>.</span>refer<span style=color:#719e07>(</span>type<span style=color:#719e07>,</span> url<span style=color:#719e07>),</span> Constants<span style=color:#719e07>.</span>REFERENCE_FILTER_KEY<span style=color:#719e07>,</span> Constants<span style=color:#719e07>.</span>CONSUMER<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>private</span> <span style=color:#268bd2>static</span> <span style=color:#719e07><</span>T<span style=color:#719e07>></span> Invoker<span style=color:#719e07><</span>T<span style=color:#719e07>></span> <span style=color:#268bd2>buildInvokerChain</span><span style=color:#719e07>(</span><span style=color:#268bd2>final</span> Invoker<span style=color:#719e07><</span>T<span style=color:#719e07>></span> invoker<span style=color:#719e07>,</span> [...]
+ Invoker<span style=color:#719e07><</span>T<span style=color:#719e07>></span> last <span style=color:#719e07>=</span> invoker<span style=color:#719e07>;</span>
+ List<span style=color:#719e07><</span>Filter<span style=color:#719e07>></span> filters <span style=color:#719e07>=</span> ExtensionLoader<span style=color:#719e07>.</span>getExtensionLoader<span style=color:#719e07>(</span>Filter<span style=color:#719e07>.</span>class<span style=color:#719e07>).</span>getActivateExtension<span style=color:#719e07>(</span>invoker<span style=color:#719e07>.</span>getUrl<span style=color:#719e07>(),</span> key<span style=color:#719e07>,</span> [...]
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>filters<span style=color:#719e07>.</span>size<span style=color:#719e07>()</span> <span style=color:#719e07>></span> 0<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>for</span> <span style=color:#719e07>(</span><span style=color:#dc322f>int</span> i <span style=color:#719e07>=</span> filters<span style=color:#719e07>.</span>size<span style=color:#719e07>()</span> <span style=color:#719e07>-</span> 1<span style=color:#719e07>;</span> i <span style=color:#719e07>>=</span> 0<span style=color:#719e07>;</span> i <span style=color:#719e07>--)</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>final</span> Filter filter <span style=color:#719e07>=</span> filters<span style=color:#719e07>.</span>get<span style=color:#719e07>(</span>i<span style=color:#719e07>);</span>
+ <span style=color:#268bd2>final</span> Invoker<span style=color:#719e07><</span>T<span style=color:#719e07>></span> next <span style=color:#719e07>=</span> last<span style=color:#719e07>;</span>
+ last <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> Invoker<span style=color:#719e07><</span>T<span style=color:#719e07>>()</span> <span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>public</span> Class<span style=color:#719e07><</span>T<span style=color:#719e07>></span> <span style=color:#268bd2>getInterface</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> invoker<span style=color:#719e07>.</span>getInterface<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>public</span> URL <span style=color:#268bd2>getUrl</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> invoker<span style=color:#719e07>.</span>getUrl<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>boolean</span> <span style=color:#268bd2>isAvailable</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> invoker<span style=color:#719e07>.</span>isAvailable<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>public</span> Result <span style=color:#268bd2>invoke</span><span style=color:#719e07>(</span>Invocation invocation<span style=color:#719e07>)</span> <span style=color:#268bd2>throws</span> RpcException <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> filter<span style=color:#719e07>.</span>invoke<span style=color:#719e07>(</span>next<span style=color:#719e07>,</span> invocation<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>destroy</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ invoker<span style=color:#719e07>.</span>destroy<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>toString</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> invoker<span style=color:#719e07>.</span>toString<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>};</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>return</span> last<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+
+</code></pre></div><h4 id=activation-mechanism-of-dubbo-filter>Activation Mechanism of Dubbo Filter</h4><p>Through the above code we can see that, in the method buildInvokerChain, first get all
+activated chains, the chain here is already sorted. Then construct a call chain of Filter
+through the Invoker, finally the constructed call chain can be roughly expressed as: Filter1->Filter2->Filter3->……->Invoker,
+now let’s see the detailed flow of the activated chain in the above step.</p><div class=highlight><pre 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=color:#268bd2>public</span> List<span style=color:#719e07><</span>T<span style=color:#719e07>></span> <span style=color:#268bd2>getActivateExtension</span><span style=color:#719e07>(</span>URL url<span style=color:#719e07>,</span> Str [...]
+ String value <span style=color:#719e07>=</span> url<span style=color:#719e07>.</span>getParameter<span style=color:#719e07>(</span>key<span style=color:#719e07>);</span>
+ <span style=color:#719e07>return</span> getActivateExtension<span style=color:#719e07>(</span>url<span style=color:#719e07>,</span> value <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>||</span> value<span style=color:#719e07>.</span>length<span style=color:#719e07>()</span> <span style=color:#719e07>==</span> 0 <span style=color:#719e07>?</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>:</span> Constants [...]
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>public</span> List<span style=color:#719e07><</span>T<span style=color:#719e07>></span> <span style=color:#268bd2>getActivateExtension</span><span style=color:#719e07>(</span>URL url<span style=color:#719e07>,</span> String<span style=color:#719e07>[]</span> values<span style=color:#719e07>,</span> String group<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ List<span style=color:#719e07><</span>T<span style=color:#719e07>></span> exts <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ArrayList<span style=color:#719e07><</span>T<span style=color:#719e07>>();</span>
+
+ List<span style=color:#719e07><</span>String<span style=color:#719e07>></span> names <span style=color:#719e07>=</span> values <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>?</span> <span style=color:#719e07>new</span> ArrayList<span style=color:#719e07><</span>String<span style=color:#719e07>>(</span>0<span style=color:#719e07>)</span> <span style=color:#719e07>:</span> Arrays<span style=color:#719e07>.</span>asLi [...]
+
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(!</span> names<span style=color:#719e07>.</span>contains<span style=color:#719e07>(</span>Constants<span style=color:#719e07>.</span>REMOVE_VALUE_PREFIX <span style=color:#719e07>+</span> Constants<span style=color:#719e07>.</span>DEFAULT_KEY<span style=color:#719e07>))</span> <span style=color:#719e07>{</span>
+ getExtensionClasses<span style=color:#719e07>();</span>
+ <span style=color:#719e07>for</span> <span style=color:#719e07>(</span>Map<span style=color:#719e07>.</span>Entry<span style=color:#719e07><</span>String<span style=color:#719e07>,</span> Activate<span style=color:#719e07>></span> entry <span style=color:#719e07>:</span> cachedActivates<span style=color:#719e07>.</span>entrySet<span style=color:#719e07>())</span> <span style=color:#719e07>{</span>
+ String name <span style=color:#719e07>=</span> entry<span style=color:#719e07>.</span>getKey<span style=color:#719e07>();</span>
+ Activate activate <span style=color:#719e07>=</span> entry<span style=color:#719e07>.</span>getValue<span style=color:#719e07>();</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>isMatchGroup<span style=color:#719e07>(</span>group<span style=color:#719e07>,</span> activate<span style=color:#719e07>.</span>group<span style=color:#719e07>()))</span> <span style=color:#719e07>{</span>
+ T ext <span style=color:#719e07>=</span> getExtension<span style=color:#719e07>(</span>name<span style=color:#719e07>);</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(!</span> names<span style=color:#719e07>.</span>contains<span style=color:#719e07>(</span>name<span style=color:#719e07>)</span> <span style=color:#719e07>&&</span> <span style=color:#719e07>!</span> names<span style=color:#719e07>.</span>contains<span style=color:#719e07>(</span>Constants<span style=color:#719e07>.</span>REMOVE_VALUE_PREFIX <span style=color:#719e07>+</span> name<span style=color: [...]
+ <span style=color:#719e07>&&</span> isActive<span style=color:#719e07>(</span>activate<span style=color:#719e07>,</span> url<span style=color:#719e07>))</span> <span style=color:#719e07>{</span>
+ exts<span style=color:#719e07>.</span>add<span style=color:#719e07>(</span>ext<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ Collections<span style=color:#719e07>.</span>sort<span style=color:#719e07>(</span>exts<span style=color:#719e07>,</span> ActivateComparator<span style=color:#719e07>.</span>COMPARATOR<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ List<span style=color:#719e07><</span>T<span style=color:#719e07>></span> usrs <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ArrayList<span style=color:#719e07><</span>T<span style=color:#719e07>>();</span>
+ <span style=color:#719e07>for</span> <span style=color:#719e07>(</span><span style=color:#dc322f>int</span> i <span style=color:#719e07>=</span> 0<span style=color:#719e07>;</span> i <span style=color:#719e07><</span> names<span style=color:#719e07>.</span>size<span style=color:#719e07>();</span> i <span style=color:#719e07>++)</span> <span style=color:#719e07>{</span>
+ String name <span style=color:#719e07>=</span> names<span style=color:#719e07>.</span>get<span style=color:#719e07>(</span>i<span style=color:#719e07>);</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(!</span> name<span style=color:#719e07>.</span>startsWith<span style=color:#719e07>(</span>Constants<span style=color:#719e07>.</span>REMOVE_VALUE_PREFIX<span style=color:#719e07>)</span>
+ <span style=color:#719e07>&&</span> <span style=color:#719e07>!</span> names<span style=color:#719e07>.</span>contains<span style=color:#719e07>(</span>Constants<span style=color:#719e07>.</span>REMOVE_VALUE_PREFIX <span style=color:#719e07>+</span> name<span style=color:#719e07>))</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>Constants<span style=color:#719e07>.</span>DEFAULT_KEY<span style=color:#719e07>.</span>equals<span style=color:#719e07>(</span>name<span style=color:#719e07>))</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>usrs<span style=color:#719e07>.</span>size<span style=color:#719e07>()</span> <span style=color:#719e07>></span> 0<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ exts<span style=color:#719e07>.</span>addAll<span style=color:#719e07>(</span>0<span style=color:#719e07>,</span> usrs<span style=color:#719e07>);</span>
+ usrs<span style=color:#719e07>.</span>clear<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span> <span style=color:#719e07>else</span> <span style=color:#719e07>{</span>
+ T ext <span style=color:#719e07>=</span> getExtension<span style=color:#719e07>(</span>name<span style=color:#719e07>);</span>
+ usrs<span style=color:#719e07>.</span>add<span style=color:#719e07>(</span>ext<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>usrs<span style=color:#719e07>.</span>size<span style=color:#719e07>()</span> <span style=color:#719e07>></span> 0<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ exts<span style=color:#719e07>.</span>addAll<span style=color:#719e07>(</span>usrs<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>return</span> exts<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+</code></pre></div><p>Through the above code we can see that, some of the Filters configured by the user are activated by default,
+and some need to be activated by the configuration file. The loading order of all Filters is to process Dubbo’s
+default Filter first, and then to process the Filter defined by the user. With the “-” configuration, Dubbo’s defualt Filter
+can be replaced, with this configuration, the user can flexibly replace or modify the Filter’s load order.</p><h4 id=built-in-filter-of-dubbo>Built-in Filter of Dubbo</h4><p>Dubbo has lots of built-in Filter. RpcContext, accesslog and other functions can be implemented by Dubbo.
+Now let’s see the ConsumerContextFilter which used by the Consumer side for context delivery:</p><div class=highlight><pre 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=color:#268bd2>public</span> Result <span style=color:#268bd2>invoke</span><span style=color:#719e07>(</span>Invoker<span style=color:#719e07><?></span> invoker<span style=color:#719e07>,</span> Invocation invocation<sp [...]
+ RpcContext<span style=color:#719e07>.</span>getContext<span style=color:#719e07>()</span>
+ <span style=color:#719e07>.</span>setInvoker<span style=color:#719e07>(</span>invoker<span style=color:#719e07>)</span>
+ <span style=color:#719e07>.</span>setInvocation<span style=color:#719e07>(</span>invocation<span style=color:#719e07>)</span>
+ <span style=color:#719e07>.</span>setLocalAddress<span style=color:#719e07>(</span>NetUtils<span style=color:#719e07>.</span>getLocalHost<span style=color:#719e07>(),</span> 0<span style=color:#719e07>)</span>
+ <span style=color:#719e07>.</span>setRemoteAddress<span style=color:#719e07>(</span>invoker<span style=color:#719e07>.</span>getUrl<span style=color:#719e07>().</span>getHost<span style=color:#719e07>(),</span>
+ invoker<span style=color:#719e07>.</span>getUrl<span style=color:#719e07>().</span>getPort<span style=color:#719e07>());</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>invocation <span style=color:#719e07>instanceof</span> RpcInvocation<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>((</span>RpcInvocation<span style=color:#719e07>)</span>invocation<span style=color:#719e07>).</span>setInvoker<span style=color:#719e07>(</span>invoker<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> invoker<span style=color:#719e07>.</span>invoke<span style=color:#719e07>(</span>invocation<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span> <span style=color:#719e07>finally</span> <span style=color:#719e07>{</span>
+ RpcContext<span style=color:#719e07>.</span>getContext<span style=color:#719e07>().</span>clearAttachments<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+</code></pre></div><p>This Filter records the state information during call, and passes the attachments parameter set
+by the client to the server through the invocation object, and these parameters will be cleared
+after the call is completed, which is why the request status information can be recorded by times
+and delivered.</p><h4 id=implement-a-dubbo-filter>Implement A Dubbo Filter</h4><p>Because of Dubbo’s flexible design and good scalability, we can implement business logic
+in the call chain by implementing our own Dubbo Filter, such as time-consuming statistics, monitor information statistics, etc.
+Now, let’s implement a simple Filter:</p><p>Maven project structure:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>src
+ |-main
+ |-java
+ |-com
+ |-xxx
+ |-XxxFilter.java (impelement Filter interface)
+ |-resources
+ |-META-INF
+ |-dubbo
+ |-com.alibaba.dubbo.rpc.Filter (Plain text file with content:xxx=com.xxx.XxxFilter)
+</code></pre></div><p>XxxFilter.java:</p><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>XxxFilter</span> <span style=color:#268bd2>implements</span> Filter <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>public</span> Result <span style=color:#268bd2>invoke</span><span style=color:#719e07>(</span>Invoker<span style=color:#719e07><?></span> invoker<span style=color:#719e07>,</span> Invocation invocation<span style=color:#719e07>)</span> <span style=color:#268bd2>throws</span> RpcException <span style=color:#719e07>{</span>
+ <span style=color:#586e75>// before filter ...
+</span><span style=color:#586e75></span> Result result <span style=color:#719e07>=</span> invoker<span style=color:#719e07>.</span>invoke<span style=color:#719e07>(</span>invocation<span style=color:#719e07>);</span>
+ <span style=color:#586e75>// after filter ...
+</span><span style=color:#586e75></span> <span style=color:#719e07>return</span> result<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>META-INF/dubbo/com.alibaba.dubbo.rpc.Filter:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>xxx=com.xxx.XxxFilter
+</code></pre></div><p>configure in xml as:</p><div class=highlight><pre 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=color:#586e75><!-- Consumer call process interception --></span>
+<span style=color:#268bd2><dubbo:reference</span> filter=<span style=color:#2aa198>"xxx"</span> <span style=color:#268bd2>/></span>
+<span style=color:#586e75><!-- Consumer call process default interception,intercept all reference --></span>
+<span style=color:#268bd2><dubbo:consumer</span> filter=<span style=color:#2aa198>"xxx"</span><span style=color:#268bd2>/></span>
+<span style=color:#586e75><!-- Provider call process interception --></span>
+<span style=color:#268bd2><dubbo:service</span> filter=<span style=color:#2aa198>"xxx"</span> <span style=color:#268bd2>/></span>
+<span style=color:#586e75><!-- Provider call process default interception,intercept all service --></span>
+<span style=color:#268bd2><dubbo:provider</span> filter=<span style=color:#2aa198>"xxx"</span><span style=color:#268bd2>/></span>
+</code></pre></div><p>or use annotation as:</p><div class=highlight><pre 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=color:#268bd2>@Activate</span><span style=color:#719e07>(</span>group <span style=color:#719e07>=</span> <span style=color:#2aa198>"consumer"</span><span style=color:#719e07>)</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>XxxFilter</span> <span style=color:#268bd2>implements</span> Filter <span style=color:#719e07>{</span>
+ <span style=color:#586e75>// ...
+</span><span style=color:#586e75></span><span style=color:#719e07>}</span>
+</code></pre></div><p>Using xml configuration is more flexible and granular.</p><p>In before and after, you can implement your own business logic to give the filter a certain function.
+Once written and configured, the filter is activated by the Dubbo and executed in the call chain.</p><ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5"><li><a href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/ class="btn btn-primary"><span class=mr-1>←</span> Previous</a></li><a href=/blog/2018/07/12/tracking-with-pinpoint/ class="btn btn-primary">Next <span class=ml-1>→</span></a></li></ul></div></main></div></div><foote [...]
\ No newline at end of file
diff --git a/blog/2018/07/12/tracking-with-pinpoint/index.html b/blog/2018/07/12/tracking-with-pinpoint/index.html
new file mode 100644
index 00000000000..e4cf8ce3221
--- /dev/null
+++ b/blog/2018/07/12/tracking-with-pinpoint/index.html
@@ -0,0 +1,310 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/pinpoint.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+to [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Tracking%20with%20Pinpoint" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#what-is-pinpoint>What is Pinpoint</a><ul><li><a href=#servermap>ServerMap</a></li><li><a href=#realtime-active-thread-chart>Realtime Active Thread Chart</a></li><li><a href=#requestresponse-scatter-chart>Request/Response Scatter Chart</a></li><li><a href=#callstack>CallStack</a></li><li><a href=#inspector>Inspector</a></ [...]
+monitor your application in Real-Time
+gain code-level visibility to every transaction
+install APM Agents without changing a single line of code
+have minimal impact on the performance (approximately 3% increase in resource usage)</p><h3 id=servermap>ServerMap</h3><p>Understand the topology of any distributed systems by visualizing how their components are interconnected. Clicking on a node reveals details about the component, such as its current status, and transaction count.</p><h3 id=realtime-active-thread-chart>Realtime Active Thread Chart</h3><p>Monitor active threads inside applications in real-time.</p><h3 id=requestrespons [...]
+<span style=color:#268bd2><project</span> xmlns=<span style=color:#2aa198>"http://maven.apache.org/POM/4.0.0"</span>
+ xmlns:xsi=<span style=color:#2aa198>"http://www.w3.org/2001/XMLSchema-instance"</span>
+ xsi:schemaLocation=<span style=color:#2aa198>"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"</span><span style=color:#268bd2>></span>
+ <span style=color:#268bd2><modelVersion></span>4.0.0<span style=color:#268bd2></modelVersion></span>
+
+ <span style=color:#268bd2><groupId></span>com.example<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>demo-api<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>0.0.1-SNAPSHOT<span style=color:#268bd2></version></span>
+<span style=color:#268bd2></project></span>
+</code></pre></div><p>Create API interface:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-go data-lang=go><span style=color:#719e07>package</span> com.example.demoapi;
+
+public <span style=color:#268bd2>interface</span> HelloService {
+ String <span style=color:#268bd2>sayHello</span>(String name);
+}
+</code></pre></div><h4 id=dubbo-provider>Dubbo provider</h4><p>pom.xml</p><div class=highlight><pre 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=color:#719e07><?xml version="1.0" encoding="UTF-8"?></span>
+<span style=color:#268bd2><project</span> xmlns=<span style=color:#2aa198>"http://maven.apache.org/POM/4.0.0"</span> xmlns:xsi=<span style=color:#2aa198>"http://www.w3.org/2001/XMLSchema-instance"</span>
+ xsi:schemaLocation=<span style=color:#2aa198>"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"</span><span style=color:#268bd2>></span>
+ <span style=color:#268bd2><modelVersion></span>4.0.0<span style=color:#268bd2></modelVersion></span>
+
+ <span style=color:#268bd2><groupId></span>com.example<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>demo-provider<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>0.0.1-SNAPSHOT<span style=color:#268bd2></version></span>
+ <span style=color:#268bd2><packaging></span>jar<span style=color:#268bd2></packaging></span>
+
+ <span style=color:#268bd2><name></span>demo-provider<span style=color:#268bd2></name></span>
+
+ <span style=color:#268bd2><parent></span>
+ <span style=color:#268bd2><groupId></span>org.springframework.boot<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>spring-boot-starter-parent<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>2.0.3.RELEASE<span style=color:#268bd2></version></span>
+ <span style=color:#268bd2><relativePath/></span> <span style=color:#586e75><!-- lookup parent from repository --></span>
+ <span style=color:#268bd2></parent></span>
+
+ <span style=color:#268bd2><properties></span>
+ <span style=color:#268bd2><project.build.sourceEncoding></span>UTF-8<span style=color:#268bd2></project.build.sourceEncoding></span>
+ <span style=color:#268bd2><project.reporting.outputEncoding></span>UTF-8<span style=color:#268bd2></project.reporting.outputEncoding></span>
+ <span style=color:#268bd2><java.version></span>1.8<span style=color:#268bd2></java.version></span>
+ <span style=color:#268bd2></properties></span>
+
+ <span style=color:#268bd2><repositories></span>
+ <span style=color:#268bd2><repository></span>
+ <span style=color:#268bd2><id></span>sonatype-nexus-snapshots<span style=color:#268bd2></id></span>
+ <span style=color:#268bd2><url></span>https://oss.sonatype.org/content/repositories/snapshots<span style=color:#268bd2></url></span>
+ <span style=color:#268bd2><releases></span>
+ <span style=color:#268bd2><enabled></span>false<span style=color:#268bd2></enabled></span>
+ <span style=color:#268bd2></releases></span>
+ <span style=color:#268bd2><snapshots></span>
+ <span style=color:#268bd2><enabled></span>true<span style=color:#268bd2></enabled></span>
+ <span style=color:#268bd2></snapshots></span>
+ <span style=color:#268bd2></repository></span>
+ <span style=color:#268bd2></repositories></span>
+
+ <span style=color:#268bd2><dependencies></span>
+ <span style=color:#268bd2><dependency></span>
+ <span style=color:#268bd2><groupId></span>org.springframework.boot<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>spring-boot-starter<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2></dependency></span>
+ <span style=color:#268bd2><dependency></span>
+ <span style=color:#268bd2><groupId></span>com.alibaba.boot<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>dubbo-spring-boot-starter<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>0.2.0<span style=color:#268bd2></version></span>
+ <span style=color:#268bd2></dependency></span>
+ <span style=color:#268bd2><dependency></span>
+ <span style=color:#268bd2><groupId></span>com.example<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>demo-api<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>0.0.1-SNAPSHOT<span style=color:#268bd2></version></span>
+ <span style=color:#268bd2></dependency></span>
+
+ <span style=color:#268bd2><dependency></span>
+ <span style=color:#268bd2><groupId></span>org.springframework.boot<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>spring-boot-starter-test<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><scope></span>test<span style=color:#268bd2></scope></span>
+ <span style=color:#268bd2></dependency></span>
+ <span style=color:#268bd2></dependencies></span>
+
+ <span style=color:#268bd2><build></span>
+ <span style=color:#268bd2><plugins></span>
+ <span style=color:#268bd2><plugin></span>
+ <span style=color:#268bd2><groupId></span>org.springframework.boot<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>spring-boot-maven-plugin<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2></plugin></span>
+ <span style=color:#268bd2></plugins></span>
+ <span style=color:#268bd2></build></span>
+
+<span style=color:#268bd2></project></span>
+</code></pre></div><ol><li><code>HelloService</code> interface:</li></ol><div class=highlight><pre 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=color:#719e07>package</span> com.example.demoprovider.provider<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> com.alibaba.dubbo.config.annotation.Service<span style=color:#719e07>;</span>
+<span style=color:#719e07>import</span> com.example.demoapi.HelloService<span style=color:#719e07>;</span>
+
+<span style=color:#268bd2>@Service</span><span style=color:#719e07>(</span>version <span style=color:#719e07>=</span> <span style=color:#2aa198>"${demo.service.version}"</span><span style=color:#719e07>,</span>
+ application <span style=color:#719e07>=</span> <span style=color:#2aa198>"${dubbo.application.id}"</span><span style=color:#719e07>,</span>
+ protocol <span style=color:#719e07>=</span> <span style=color:#2aa198>"${dubbo.protocol.id}"</span><span style=color:#719e07>,</span>
+ registry <span style=color:#719e07>=</span> <span style=color:#2aa198>"${dubbo.registry.id}"</span><span style=color:#719e07>)</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>HelloServiceImpl</span> <span style=color:#268bd2>implements</span> HelloService <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>static</span> <span style=color:#dc322f>int</span> i <span style=color:#719e07>=</span> 0<span style=color:#719e07>;</span>
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ i<span style=color:#719e07>++;</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>i <span style=color:#719e07>%</span> 3 <span style=color:#719e07>==</span> 0<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> RuntimeException<span style=color:#719e07>(</span><span style=color:#2aa198>"ex"</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"Hello "</span> <span style=color:#719e07>+</span> name <span style=color:#719e07>+</span> <span style=color:#2aa198>"!"</span><span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><ol start=2><li>Spring Boot bootstrap:</li></ol><div class=highlight><pre 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=color:#719e07>package</span> com.example.demoprovider<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> org.springframework.boot.SpringApplication<span style=color:#719e07>;</span>
+<span style=color:#719e07>import</span> org.springframework.boot.autoconfigure.SpringBootApplication<span style=color:#719e07>;</span>
+
+<span style=color:#268bd2>@SpringBootApplication</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoProviderApplication</span> <span style=color:#719e07>{</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:#719e07>{</span>
+ SpringApplication<span style=color:#719e07>.</span>run<span style=color:#719e07>(</span>DemoProviderApplication<span style=color:#719e07>.</span>class<span style=color:#719e07>,</span> args<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><ol start=3><li><code>application.properties</code>:</li></ol><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback># Spring boot application
+spring.application.name = dubbo-provider-demo
+server.port = 9090
+management.port = 9091
+
+# Service version
+demo.service.version = 1.0.0
+
+# Base packages to scan Dubbo Components (e.g @Service , @Reference)
+dubbo.scan.basePackages = com.example.demoprovider
+
+# Dubbo Config properties
+## ApplicationConfig Bean
+dubbo.application.id = dubbo-provider-demo
+dubbo.application.name = dubbo-provider-demo
+
+## ProtocolConfig Bean
+dubbo.protocol.id = dubbo
+dubbo.protocol.name = dubbo
+dubbo.protocol.port = 12345
+
+## RegistryConfig Bean
+dubbo.registry.id = my-registry
+dubbo.registry.address = N/A
+</code></pre></div><h4 id=dubbo-consumer>Dubbo consumer</h4><p>pom.xml</p><div class=highlight><pre 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=color:#719e07><?xml version="1.0" encoding="UTF-8"?></span>
+<span style=color:#268bd2><project</span> xmlns=<span style=color:#2aa198>"http://maven.apache.org/POM/4.0.0"</span> xmlns:xsi=<span style=color:#2aa198>"http://www.w3.org/2001/XMLSchema-instance"</span>
+ xsi:schemaLocation=<span style=color:#2aa198>"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"</span><span style=color:#268bd2>></span>
+ <span style=color:#268bd2><modelVersion></span>4.0.0<span style=color:#268bd2></modelVersion></span>
+
+ <span style=color:#268bd2><groupId></span>com.example<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>demo-consumer<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>0.0.1-SNAPSHOT<span style=color:#268bd2></version></span>
+ <span style=color:#268bd2><packaging></span>jar<span style=color:#268bd2></packaging></span>
+
+ <span style=color:#268bd2><name></span>demo-consumer<span style=color:#268bd2></name></span>
+
+ <span style=color:#268bd2><parent></span>
+ <span style=color:#268bd2><groupId></span>org.springframework.boot<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>spring-boot-starter-parent<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>2.0.3.RELEASE<span style=color:#268bd2></version></span>
+ <span style=color:#268bd2><relativePath/></span> <span style=color:#586e75><!-- lookup parent from repository --></span>
+ <span style=color:#268bd2></parent></span>
+
+ <span style=color:#268bd2><properties></span>
+ <span style=color:#268bd2><project.build.sourceEncoding></span>UTF-8<span style=color:#268bd2></project.build.sourceEncoding></span>
+ <span style=color:#268bd2><project.reporting.outputEncoding></span>UTF-8<span style=color:#268bd2></project.reporting.outputEncoding></span>
+ <span style=color:#268bd2><java.version></span>1.8<span style=color:#268bd2></java.version></span>
+ <span style=color:#268bd2></properties></span>
+
+ <span style=color:#268bd2><repositories></span>
+ <span style=color:#268bd2><repository></span>
+ <span style=color:#268bd2><id></span>sonatype-nexus-snapshots<span style=color:#268bd2></id></span>
+ <span style=color:#268bd2><url></span>https://oss.sonatype.org/content/repositories/snapshots<span style=color:#268bd2></url></span>
+ <span style=color:#268bd2><releases></span>
+ <span style=color:#268bd2><enabled></span>false<span style=color:#268bd2></enabled></span>
+ <span style=color:#268bd2></releases></span>
+ <span style=color:#268bd2><snapshots></span>
+ <span style=color:#268bd2><enabled></span>true<span style=color:#268bd2></enabled></span>
+ <span style=color:#268bd2></snapshots></span>
+ <span style=color:#268bd2></repository></span>
+ <span style=color:#268bd2></repositories></span>
+
+ <span style=color:#268bd2><dependencies></span>
+ <span style=color:#268bd2><dependency></span>
+ <span style=color:#268bd2><groupId></span>org.springframework.boot<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>spring-boot-starter-web<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2></dependency></span>
+ <span style=color:#268bd2><dependency></span>
+ <span style=color:#268bd2><groupId></span>com.alibaba.boot<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>dubbo-spring-boot-starter<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>0.2.0<span style=color:#268bd2></version></span>
+ <span style=color:#268bd2></dependency></span>
+ <span style=color:#268bd2><dependency></span>
+ <span style=color:#268bd2><groupId></span>com.example<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>demo-api<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>0.0.1-SNAPSHOT<span style=color:#268bd2></version></span>
+ <span style=color:#268bd2></dependency></span>
+
+ <span style=color:#268bd2><dependency></span>
+ <span style=color:#268bd2><groupId></span>org.springframework.boot<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>spring-boot-starter-test<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><scope></span>test<span style=color:#268bd2></scope></span>
+ <span style=color:#268bd2></dependency></span>
+ <span style=color:#268bd2></dependencies></span>
+
+ <span style=color:#268bd2><build></span>
+ <span style=color:#268bd2><plugins></span>
+ <span style=color:#268bd2><plugin></span>
+ <span style=color:#268bd2><groupId></span>org.springframework.boot<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>spring-boot-maven-plugin<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><configuration></span>
+ <span style=color:#268bd2><classifier></span>exec<span style=color:#268bd2></classifier></span>
+ <span style=color:#268bd2></configuration></span>
+ <span style=color:#268bd2></plugin></span>
+ <span style=color:#268bd2></plugins></span>
+ <span style=color:#268bd2></build></span>
+
+<span style=color:#268bd2></project></span>
+</code></pre></div><ol><li><code>@Reference</code> injection <code>HelloService</code></li></ol><div class=highlight><pre 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=color:#719e07>package</span> com.example.democonsumer.controller<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> com.alibaba.dubbo.config.annotation.Reference<span style=color:#719e07>;</span>
+<span style=color:#719e07>import</span> com.example.demoapi.HelloService<span style=color:#719e07>;</span>
+<span style=color:#719e07>import</span> org.springframework.web.bind.annotation.RequestMapping<span style=color:#719e07>;</span>
+<span style=color:#719e07>import</span> org.springframework.web.bind.annotation.RequestParam<span style=color:#719e07>;</span>
+<span style=color:#719e07>import</span> org.springframework.web.bind.annotation.RestController<span style=color:#719e07>;</span>
+
+<span style=color:#268bd2>@RestController</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoConsumerController</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>@Reference</span><span style=color:#719e07>(</span>version <span style=color:#719e07>=</span> <span style=color:#2aa198>"${demo.service.version}"</span><span style=color:#719e07>,</span>
+ application <span style=color:#719e07>=</span> <span style=color:#2aa198>"${dubbo.application.id}"</span><span style=color:#719e07>,</span>
+ url <span style=color:#719e07>=</span> <span style=color:#2aa198>"dubbo://<Real IP Address>:12345"</span><span style=color:#719e07>)</span>
+ <span style=color:#268bd2>private</span> HelloService helloService<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>@RequestMapping</span><span style=color:#719e07>(</span><span style=color:#2aa198>"/sayHello"</span><span style=color:#719e07>)</span>
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span><span style=color:#268bd2>@RequestParam</span> String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> helloService<span style=color:#719e07>.</span>sayHello<span style=color:#719e07>(</span>name<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><ol start=2><li>Spring Boot bootstrap:</li></ol><div class=highlight><pre 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=color:#719e07>package</span> com.example.democonsumer<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> org.springframework.boot.SpringApplication<span style=color:#719e07>;</span>
+<span style=color:#719e07>import</span> org.springframework.boot.autoconfigure.SpringBootApplication<span style=color:#719e07>;</span>
+
+<span style=color:#268bd2>@SpringBootApplication</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoConsumerApplication</span> <span style=color:#719e07>{</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:#719e07>{</span>
+ SpringApplication<span style=color:#719e07>.</span>run<span style=color:#719e07>(</span>DemoConsumerApplication<span style=color:#719e07>.</span>class<span style=color:#719e07>,</span> args<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><ol start=3><li><code>application.properties</code>:</li></ol><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback># Spring boot application
+spring.application.name=dubbo-consumer-demo
+server.port=8080
+management.port=8081
+
+# Service Version
+demo.service.version=1.0.0
+
+# Dubbo Config properties
+## ApplicationConfig Bean
+dubbo.application.id=dubbo-consumer-demo
+dubbo.application.name=dubbo-consumer-demo
+
+## ProtocolConfig Bean
+dubbo.protocol.id=dubbo
+dubbo.protocol.name=dubbo
+dubbo.protocol.port=12345
+</code></pre></div><h3 id=using-pinpoint-agent-to-start-dubbo-provider-and-dubbo-consumer>Using Pinpoint-agent to start <code>Dubbo provider</code> and <code>Dubbo consumer</code></h3><ol><li>Maven clean package</li></ol><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>mvn clean package
+</code></pre></div><ol start=2><li>Start provider</li></ol><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=demo-provider -Dpinpoint.applicationName=DP target/demo-provider-0.0.1-SNAPSHOT.jar
+</code></pre></div><ol start=3><li>Start consumer</li></ol><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=demo-consumer -Dpinpoint.applicationName=DC target/demo-comsumer-0.0.1-SNAPSHOT-exec.jar
+</code></pre></div><ol start=4><li>Access the consumer address to simulate user requests</li></ol><p><code>http://localhost:8080/sayHello?name=ABC</code></p><h2 id=using-pinpoint-locate-problems>Using Pinpoint locate problems</h2><h3 id=homepage>Homepage</h3><p><img src=/imgs/blog/en_pinpoint-home.png alt=/admin-guide/images/pinpoint-home.png></p><blockquote><p>The user request here is double the number of requests for DubboProvider, because the favicon.ico icon request is recorded.</p>< [...]
\ No newline at end of file
diff --git a/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/index.html b/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/index.html
new file mode 100644
index 00000000000..4f18570f160
--- /dev/null
+++ b/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/index.html
@@ -0,0 +1,54 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/sentinel-introduction-for-dubbo.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matt [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Sentinel:%20The%20flow%20sentinel%20of%20Dubbo%20services" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#introduction-to-sentinel>Introduction to Sentinel</a></li><li><a href=#best-practice-for-using-dubbo-with-sentinel>Best Practice for using Dubbo with Sentinel</a><ul><li><a href=#service-provider>Service Provider</a></li><li><a href=#service-consumer>Service Consumer</a></li><li><a href=#sentinel-dashboard>Sentinel Dashb [...]
+ <span style=color:#268bd2><groupId></span>com.alibaba.csp<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>sentinel-dubbo-adapter<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>x.y.z<span style=color:#268bd2></version></span>
+<span style=color:#268bd2></dependency></span>
+</code></pre></div><p>The two filters are enabled by default. Once you add the dependency, the Dubbo services and methods will become protected resources in Sentinel, which can leverage Sentinel’s flow control and guard ability when rules are configured. If you don’t want to enable the filter, you can manually disable it. For example:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java da [...]
+<span style=color:#268bd2>public</span> ConsumerConfig <span style=color:#268bd2>consumerConfig</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ ConsumerConfig consumerConfig <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ConsumerConfig<span style=color:#719e07>();</span>
+ consumerConfig<span style=color:#719e07>.</span>setFilter<span style=color:#719e07>(</span><span style=color:#2aa198>"-sentinel.dubbo.consumer.filter"</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>return</span> consumerConfig<span style=color:#719e07>;</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>We’ve provided sereval demos, you can check here: <a href=https://github.com/alibaba/Sentinel/tree/master/sentinel-demo/sentinel-demo-dubbo>sentinel-demo-dubbo</a>。</p><h3 id=service-provider>Service Provider</h3><p>Dubbo service providers provide services for outside world and handle requests from consumers. To protect the service provider from suffering the proliferation of traffic flow, you can set flow rules in <strong>QPS mode</strong> to the service prov [...]
+</code></pre></div><p>Log messages will also appear in provider’s metric log:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>1532423623000|2018-07-24 17:13:43|com.alibaba.csp.sentinel.demo.dubbo.FooService|15|0|15|0|3
+1532423623000|2018-07-24 17:13:43|com.alibaba.csp.sentinel.demo.dubbo.FooService:sayHello(java.lang.String)|10|5|10|0|0
+</code></pre></div><p>In many circumstances, it’s also significant to control traffic flow based on the <strong>caller</strong>. For example, assuming that there are two services A and B, both of them initiate remote call requests to the service provider. If we want to limit the calls from service B only, we can set the <code>limitApp</code> of flow rule as the identifier of service B (e.g. service name). The Sentinel Dubbo Adapter will automatically resolve the Dubbo consumer&rsqu [...]
+</code></pre></div><p>The <code>demo-consumer</code> in the log is the caller name (origin).</p><h3 id=service-consumer>Service Consumer</h3><p>Dubbo service consumers act as a client to invoke the remote service. Each service may depend on several downstream services. If a service A depends on the downstream service B, and service B is unstable (i.e. the response time becomes longer), the number of threads where service A invokes service B will accumulate, thus may eventually run out of [...]
+</code></pre></div><p>After launching the service provider demo, we can find our application in the Sentinel dashboard. It’s convenient to configure the rules in the dashboard:</p><p><img src=/imgs/blog/sentinel-dashboard-view-rules.png alt="Rule List"></p><p>Or view real-time metrics:</p><p><img src=/imgs/blog/sentinel-dashboard-metrics.png alt="Real-time metrics monitoring"></p><h2 id=summary>Summary</h2><p>This blog post only introduces the simplest scenario in Sentinel - Traffi [...]
\ No newline at end of file
diff --git a/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/index.html b/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/index.html
new file mode 100644
index 00000000000..7ade5749bbb
--- /dev/null
+++ b/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/index.html
@@ -0,0 +1,38 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-meetup-shenzhen.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+sect [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=The%20third%20Dubbo%20meetup%20has%20been%20held%20in%20Shenzhen" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role=main><a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href=/blog/news/index.xml target=_blank>RSS <i class="fa fa-rss ml-2"></i></a><div class=td-content><h1>The third Dubbo meetup has been held in Shenzhen</h1><div class=lead>The third Dubbo meetup has been held in Shenzhen</div> [...]
\ No newline at end of file
diff --git a/blog/2018/08/07/dubbo-101/index.html b/blog/2018/08/07/dubbo-101/index.html
new file mode 100644
index 00000000000..a5ef5a36ea7
--- /dev/null
+++ b/blog/2018/08/07/dubbo-101/index.html
@@ -0,0 +1,173 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-101.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+t [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Your%20First%20Dubbo%20Demo" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#java-rmi-introduction>Java RMI Introduction</a><ul><li><a href=#java-rmi-work-flow>Java RMI Work Flow</a></li><li><a href=#java-rmi-concepts>Java RMI Concepts</a></li></ul></li><li><a href=#basic-concepts-of-dubbo>Basic Concepts of Dubbo</a></li><li><a href=#dubbo-applications-based-on-api>Dubbo Applications Based on API [...]
+</span><span style=color:#586e75></span>Hello stub <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>Hello<span style=color:#719e07>)</span> UnicastRemoteObject<span style=color:#719e07>.</span>exportObject<span style=color:#719e07>(</span>obj<span style=color:#719e07>,</span> 0<span style=color:#719e07>);</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span>Registry registry <span style=color:#719e07>=</span> LocateRegistry<span style=color:#719e07>.</span>createRegistry<span style=color:#719e07>(</span>1099<span style=color:#719e07>);</span> <span style=color:#586e75>// #3
+</span><span style=color:#586e75></span>registry<span style=color:#719e07>.</span>rebind<span style=color:#719e07>(</span><span style=color:#2aa198>"Hello"</span><span style=color:#719e07>,</span> stub<span style=color:#719e07>);</span> <span style=color:#586e75>// #4
+</span></code></pre></div><p>Notes:</p><ol><li><p>Initiate service object instance.</p></li><li><p>Create stub object to communicate with the server by UnicastRemoteObject.exportObject.</p></li><li><p>Create a local RMI registry service on port 1099 which is run on server. It can also be registered as an independent process.</p></li><li><p>Bind stub object into registry so the client can find the remote object by looking up Hello.</p></li></ol><h4 id=client-service-look-up>Client service [...]
+</span><span style=color:#586e75></span>Hello stub <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>Hello<span style=color:#719e07>)</span> registry<span style=color:#719e07>.</span>lookup<span style=color:#719e07>(</span><span style=color:#2aa198>"Hello"</span><span style=color:#719e07>);</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span>String response <span style=color:#719e07>=</span> stub<span style=color:#719e07>.</span>sayHello<span style=color:#719e07>();</span> <span style=color:#586e75>// #3
+</span></code></pre></div><p>Notes:</p><ol><li>Acquire registry service instances. In this case, there is no input parameters so it is assumed that the acquired instance is located on port 1099.</li><li>Look up the remote object named Hello in registry service.</li><li>Run a RMI invocation via acquired Stub object and get results.
+Understand the work flow and basic concepts of RMI is helpful to handle current framework of distributed service. It is recommended to refer to RMI official documents for further information[^1].</li></ol><h2 id=basic-concepts-of-dubbo>Basic Concepts of Dubbo</h2><p>The basic concepts of current framework of distributed service is similar to the one of RMI. They both use Java interface as service contract, register and look up by registry center and use agency to block the details of rem [...]
+ String <span style=color:#268bd2>sayHi</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>);</span> <span style=color:#586e75>// #1
+</span><span style=color:#586e75></span><span style=color:#719e07>}</span>
+</code></pre></div><p><strong>Notes</strong>:</p><ol><li>The codes define a simple service contract where there is only one function, sayHi, can be invoked. The type of input parameter and return value are both String.</li></ol><h3 id=provide-contract-implementation>Provide Contract Implementation</h3><div class=highlight><pre 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=color:#268bd2>public</sp [...]
+</span><span style=color:#586e75></span> <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayHi</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"hi, "</span> <span style=color:#719e07>+</span> name<span style=color:#719e07>;</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span> <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p><strong>Notes</strong>:</p><ol><li>Service providers need to implement the interface of service contract, GreetingsService.</li><li>This function simply returns a welcome message. For example, if the input value is <em>dubbo</em>,it will return <em>hi, dubbo</em>.</li></ol><h3 id=implement-dubbo-service-provider>Implement Dubbo Service Provider</h3><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code c [...]
+ <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> IOException <span style=color:#719e07>{</span>
+ ServiceConfig<span style=color:#719e07><</span>GreetingsService<span style=color:#719e07>></span> service <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ServiceConfig<span style=color:#719e07><>();</span> <span style=color:#586e75>// #1
+</span><span style=color:#586e75></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>"first-dubbo-provider"</span><span style=color:#719e07>));</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></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>"multicast://224.5.6.7:1234"</span><span style=color:#719e07>));</span> <span style=color:#586e75>// #3
+</span><span style=color:#586e75></span> service<span style=color:#719e07>.</span>setInterface<span style=color:#719e07>(</span>GreetingsService<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span> <span style=color:#586e75>// #4
+</span><span style=color:#586e75></span> service<span style=color:#719e07>.</span>setRef<span style=color:#719e07>(</span><span style=color:#719e07>new</span> GreetingsServiceImpl<span style=color:#719e07>());</span> <span style=color:#586e75>// #5
+</span><span style=color:#586e75></span> service<span style=color:#719e07>.</span>export<span style=color:#719e07>();</span> <span style=color:#586e75>// #6
+</span><span style=color:#586e75></span> System<span style=color:#719e07>.</span>in<span style=color:#719e07>.</span>read<span style=color:#719e07>();</span> <span style=color:#586e75>// #7
+</span><span style=color:#586e75></span> <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p><strong>Notes</strong>:</p><ol><li>Create an instance <em>ServiceConfig</em> with service interface type as generics parameters, which is <em>GreetingsService</em> in this example.</li><li>Generate an instance of <em>ApplicationConfig</em> and assemble it into <em>ServiceConfig</em>.</li><li>Generate an instance <em>RegistryConfig</em> and assemble it into <em>ServiceConfig</em>. Since the assembled way is applied here, the parameter should be <code>multicast://224. [...]
+ <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:#719e07>{</span>
+ ReferenceConfig<span style=color:#719e07><</span>GreetingsService<span style=color:#719e07>></span> reference <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ReferenceConfig<span style=color:#719e07><>();</span> <span style=color:#586e75>// #1
+</span><span style=color:#586e75></span> reference<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>"first-dubbo-client"</span><span style=color:#719e07>));</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span> reference<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>"multicast://224.5.6.7:1234"</span><span style=color:#719e07>));</span> <span style=color:#586e75>// #3
+</span><span style=color:#586e75></span> reference<span style=color:#719e07>.</span>setInterface<span style=color:#719e07>(</span>GreetingsService<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span> <span style=color:#586e75>// #4
+</span><span style=color:#586e75></span> GreetingsService greetingsService <span style=color:#719e07>=</span> reference<span style=color:#719e07>.</span>get<span style=color:#719e07>();</span> <span style=color:#586e75>// #5
+</span><span style=color:#586e75></span> String message <span style=color:#719e07>=</span> greetingsService<span style=color:#719e07>.</span>sayHi<span style=color:#719e07>(</span><span style=color:#2aa198>"dubbo"</span><span style=color:#719e07>);</span> <span style=color:#586e75>// #6
+</span><span style=color:#586e75></span> System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span>message<span style=color:#719e07>);</span> <span style=color:#586e75>// #7
+</span><span style=color:#586e75></span> <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p><strong>Notes</strong>:</p><ol><li>Create an instance of <em>ReferenceConfig</em> with service interface type as generics parameters, which is <em>GreetingsService</em> in this example.</li><li>Create an instance of <em>ApplicationConfig</em>, and assemble it into <em>ReferenceConfig</em>.</li><li>Generate an instance <em>RegistryConfig</em>, and assemble it into <em>ReferenceConfig</em>. Note that the address information here should be the same as the one of the se [...]
+$ <span style=color:#b58900>cd</span> dubbo-samples/java/dubbo-samples-api/
+$ mvn clean package
+INFO<span style=color:#719e07>]</span> Scanning <span style=color:#719e07>for</span> projects...
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span>
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Building dubbo-samples-api 1.0-SNAPSHOT
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span>
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> --- maven-clean-plugin:2.5:clean <span style=color:#719e07>(</span>default-clean<span style=color:#719e07>)</span> @ dubbo-samples-api ---
+...
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> BUILD SUCCESS
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Total time: 2.182 s
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Finished at: 2018-05-28T14:56:08+08:00
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Final Memory: 20M/353M
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+</code></pre></div><p>The build is finished when it shows <code>BUILD SUCCESS</code>. Then comes the running stage.</p><h4 id=run-the-server>Run the server</h4><p>Run the service provider by the following maven command lines:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash>$ mvn -Djava.net.preferIPv4Stack<span style=color:#719e07>=</span><span style=color:#b58900>true</span> -Dexec [...]
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Scanning <span style=color:#719e07>for</span> projects...
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span>
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Building dubbo-samples-api 1.0-SNAPSHOT
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span>
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> --- exec-maven-plugin:1.6.0:java <span style=color:#719e07>(</span>default-cli<span style=color:#719e07>)</span> @ dubbo-samples-api ---
+log4j:WARN No appenders could be found <span style=color:#719e07>for</span> logger <span style=color:#719e07>(</span>org.apache.dubbo.common.logger.LoggerFactory<span style=color:#719e07>)</span>.
+log4j:WARN Please initialize the log4j system properly.
+log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig <span style=color:#719e07>for</span> more info.
+first-dubbo-provider is running.
+</code></pre></div><p>When <em>first-dubbo-provider is running</em> appears, the service provider is ready to be called by the client.</p><h4 id=run-the-client>Run the client</h4><p>Run the service consumer by the following maven command lines:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash>$ mvn -Djava.net.preferIPv4Stack<span style=color:#719e07>=</span><span style=color:#b58900 [...]
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Scanning <span style=color:#719e07>for</span> projects...
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span>
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Building dubbo-samples-api 1.0-SNAPSHOT
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span>
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> --- exec-maven-plugin:1.6.0:java <span style=color:#719e07>(</span>default-cli<span style=color:#719e07>)</span> @ dubbo-samples-api ---
+log4j:WARN No appenders could be found <span style=color:#719e07>for</span> logger <span style=color:#719e07>(</span>org.apache.dubbo.common.logger.LoggerFactory<span style=color:#719e07>)</span>.
+log4j:WARN Please initialize the log4j system properly.
+log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig <span style=color:#719e07>for</span> more info.
+hi, dubbo
+</code></pre></div><p><code>hi, dubbo</code> is the execution results from service provider.</p><h2 id=quick-creation-of-a-dubbo-application>Quick Creation of A Dubbo Application</h2><p>Dubbo also provides a public platform that can create a Dubbo application quickly based on Spring Boot. Visit <a href=http://start.dubbo.io>http://start.dubbo.io</a> and follow the figure below to create an example project:</p><p><img src=../../img/blog/dubbo-initializr.png alt="dubbo initializr"></p><p>< [...]
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoApplication</span> <span style=color:#719e07>{</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:#719e07>{</span>
+ <span style=color:#719e07>new</span> EmbeddedZooKeeper<span style=color:#719e07>(</span>2181<span style=color:#719e07>,</span> <span style=color:#cb4b16>false</span><span style=color:#719e07>).</span>start<span style=color:#719e07>();</span> <span style=color:#586e75>// #1
+</span><span style=color:#586e75></span> SpringApplication<span style=color:#719e07>.</span>run<span style=color:#719e07>(</span>DemoApplication<span style=color:#719e07>.</span>class<span style=color:#719e07>,</span> args<span style=color:#719e07>);</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span> <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p><strong>Notes</strong>:</p><ol><li>Launch embedded <em>ZooKeeper</em> on port <em>2181</em>.</li><li>Launch the context of <em>Spring Boot</em>.</li></ol><p>Run it directly in IDE and here are the results:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash>2018-05-28 16:59:38.072 INFO <span style=color:#2aa198>59943</span> --- <span style=color:#719e07>[</span> [...]
+
+ ████████▄ ███ █▄ ▀█████████▄ ▀█████████▄ ▄██████▄
+ ███ ▀███ ███ ███ ███ ███ ███ ███ ███ ███
+ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
+ ███ ███ ███ ███ ▄███▄▄▄██▀ ▄███▄▄▄██▀ ███ ███
+ ███ ███ ███ ███ ▀▀███▀▀▀██▄ ▀▀███▀▀▀██▄ ███ ███
+ ███ ███ ███ ███ ███ ██▄ ███ ██▄ ███ ███
+ ███ ▄███ ███ ███ ███ ███ ███ ███ ███ ███
+ ████████▀ ████████▀ ▄█████████▀ ▄█████████▀ ▀██████▀
+
+
+ :: Dubbo Spring Boot <span style=color:#719e07>(</span>v0.1.0<span style=color:#719e07>)</span> : https://github.com/dubbo/dubbo-spring-boot-project
+ :: Dubbo <span style=color:#719e07>(</span>v2.0.1<span style=color:#719e07>)</span> : https://github.com/alibaba/dubbo
+ :: Google group : http://groups.google.com/group/dubbo
+
+2018-05-28 16:59:38.079 INFO <span style=color:#2aa198>59943</span> --- <span style=color:#719e07>[</span> main<span style=color:#719e07>]</span> e.OverrideDubboConfigApplicationListener : Dubbo Config was overridden by externalized configuration <span style=color:#719e07>{</span>dubbo.application.name<span style=color:#719e07>=</span>dubbo-demo-server, dubbo.application.qosAcceptForeignIp<span style=color:#719e07>=</span>false, dubbo.application.qosEnable<span style=color:#71 [...]
+
+...
+
+2018-05-28 16:59:39.624 INFO <span style=color:#2aa198>59943</span> --- <span style=color:#719e07>[</span> main<span style=color:#719e07>]</span> com.example.demo.DemoApplication : Started DemoApplication in 1.746 seconds <span style=color:#719e07>(</span>JVM running <span style=color:#719e07>for</span> 2.963<span style=color:#719e07>)</span>
+</code></pre></div><p><strong>Notes</strong>:</p><ol><li>In the printouts, the configuration starting with <code>dubbo.</code> Is defined in <em>main/resources/application.properties</em>.</li></ol><h3 id=manage-service-by-telnet>Manage service by Telnet</h3><p>If <em>qos</em> is activated during generation, the service can be watched and managed by <em>telnet</em> or <em>nc</em>.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab- [...]
+Trying 127.0.0.1...
+Connected to localhost.
+Escape character is <span style=color:#2aa198>'^]'</span>.
+ ████████▄ ███ █▄ ▀█████████▄ ▀█████████▄ ▄██████▄
+ ███ ▀███ ███ ███ ███ ███ ███ ███ ███ ███
+ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
+ ███ ███ ███ ███ ▄███▄▄▄██▀ ▄███▄▄▄██▀ ███ ███
+ ███ ███ ███ ███ ▀▀███▀▀▀██▄ ▀▀███▀▀▀██▄ ███ ███
+ ███ ███ ███ ███ ███ ██▄ ███ ██▄ ███ ███
+ ███ ▄███ ███ ███ ███ ███ ███ ███ ███ ███
+ ████████▀ ████████▀ ▄█████████▀ ▄█████████▀ ▀██████▀
+
+
+dubbo>
+dubbo>ls
+As Provider side:
++------------------------------+---+
+| Provider Service Name |PUB|
++------------------------------+---+
+|com.example.HelloService:1.0.0| Y |
++------------------------------+---+
+As Consumer side:
++---------------------+---+
+|Consumer Service Name|NUM|
++---------------------+---+
+</code></pre></div><p>Currently, <em>qos</em> supports following command lines. For more information please refer to the official document. [^4]:</p><ul><li><em>ls</em>:List the information of client and server.</li><li><em>online</em>:Bring the service online.</li><li><em>offline</em>:Bring the service offline.</li><li><em>help</em>:View online help.</li></ul><h2 id=summary>Summary</h2><p>In this tutorial, we start with RMI and introduce the basic concepts in Java distributed invocation [...]
\ No newline at end of file
diff --git a/blog/2018/08/07/use-annotations-in-dubbo/index.html b/blog/2018/08/07/use-annotations-in-dubbo/index.html
new file mode 100644
index 00000000000..ca5ae32deb5
--- /dev/null
+++ b/blog/2018/08/07/use-annotations-in-dubbo/index.html
@@ -0,0 +1,231 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-annotation.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+a [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Use%20Annotations%20In%20Dubbo" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#introduce-annotations>Introduce Annotations</a><ul><li><a href=#enabledubbo>@EnableDubbo</a></li><li><a href=#service>@Service</a></li><li><a href=#reference>@Reference</a></li></ul></li><li><a href=#example-practice>Example practice</a><ul><li><a href=#1interface-definition>1.Interface Definition</a></li><li><a href=#2s [...]
+
+<span style=color:#268bd2>@EnableDubboConfig</span>
+<span style=color:#268bd2>@DubboComponentScan</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>@interface</span> EnableDubbo <span style=color:#719e07>{</span>
+ <span style=color:#586e75>/**
+</span><span style=color:#586e75> * Base packages to scan for annotated @Service classes.
+</span><span style=color:#586e75> * <p>
+</span><span style=color:#586e75> * Use {@link #scanBasePackageClasses()} for a type-safe alternative to String-based
+</span><span style=color:#586e75> * package names.
+</span><span style=color:#586e75> *
+</span><span style=color:#586e75> * @return the base packages to scan
+</span><span style=color:#586e75> * @see DubboComponentScan#basePackages()
+</span><span style=color:#586e75> */</span>
+ <span style=color:#268bd2>@AliasFor</span><span style=color:#719e07>(</span>annotation <span style=color:#719e07>=</span> DubboComponentScan<span style=color:#719e07>.</span>class<span style=color:#719e07>,</span> attribute <span style=color:#719e07>=</span> <span style=color:#2aa198>"basePackages"</span><span style=color:#719e07>)</span>
+ String<span style=color:#719e07>[]</span> <span style=color:#268bd2>scanBasePackages</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#719e07>{};</span>
+
+ <span style=color:#586e75>/**
+</span><span style=color:#586e75> * Type-safe alternative to {@link #scanBasePackages()} for specifying the packages to
+</span><span style=color:#586e75> * scan for annotated @Service classes. The package of each class specified will be
+</span><span style=color:#586e75> * scanned.
+</span><span style=color:#586e75> *
+</span><span style=color:#586e75> * @return classes from the base packages to scan
+</span><span style=color:#586e75> * @see DubboComponentScan#basePackageClasses
+</span><span style=color:#586e75> */</span>
+ <span style=color:#268bd2>@AliasFor</span><span style=color:#719e07>(</span>annotation <span style=color:#719e07>=</span> DubboComponentScan<span style=color:#719e07>.</span>class<span style=color:#719e07>,</span> attribute <span style=color:#719e07>=</span> <span style=color:#2aa198>"basePackageClasses"</span><span style=color:#719e07>)</span>
+ Class<span style=color:#719e07><?>[]</span> scanBasePackageClasses<span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#719e07>{};</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>The <code>@bableDubbo</code> can be used to scan Dubbo’s service provider (marked by <code>@Service</code>) and Dubbo’s service consumer (marked by <code>Reference</code>) under the specified package name (via <code>scanBasePackages</code>) or in the specified class (via <code>scanBasePackageClasses</code>). After Dubbo’s service providers and consumers have been scanned, they have been assembled corresponding and been initialized, and finally the [...]
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>AnnotatedGreetingService</span> <span style=color:#268bd2>implements</span> GreetingService <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"hello, "</span> <span style=color:#719e07>+</span> name<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>Via <code>@Service</code>’s properties, you can customize Dubbo’s Service provider:</p><div class=highlight><pre 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=color:#719e07>package</span> org.apache.dubbo.config.annotation<span style=color:#719e07>;</span>
+
+<span style=color:#268bd2>@Documented</span>
+<span style=color:#268bd2>@Retention</span><span style=color:#719e07>(</span>RetentionPolicy<span style=color:#719e07>.</span>RUNTIME<span style=color:#719e07>)</span>
+<span style=color:#268bd2>@Target</span><span style=color:#719e07>({</span>ElementType<span style=color:#719e07>.</span>TYPE<span style=color:#719e07>})</span> <span style=color:#586e75>// #1
+</span><span style=color:#586e75></span><span style=color:#268bd2>@Inherited</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>@interface</span> Service <span style=color:#719e07>{</span>
+ Class<span style=color:#719e07><?></span> interfaceClass<span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#dc322f>void</span><span style=color:#719e07>.</span>class<span style=color:#719e07>;</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span> String <span style=color:#268bd2>interfaceName</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #3
+</span><span style=color:#586e75></span> String <span style=color:#268bd2>version</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #4
+</span><span style=color:#586e75></span> String <span style=color:#268bd2>group</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #5
+</span><span style=color:#586e75></span> <span style=color:#dc322f>boolean</span> <span style=color:#268bd2>export</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#cb4b16>true</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #6
+</span><span style=color:#586e75></span> <span style=color:#dc322f>boolean</span> <span style=color:#268bd2>register</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#cb4b16>true</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #7
+</span><span style=color:#586e75></span>
+ String <span style=color:#268bd2>application</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #8
+</span><span style=color:#586e75></span> String <span style=color:#268bd2>module</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #9
+</span><span style=color:#586e75></span> String <span style=color:#268bd2>provider</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #10
+</span><span style=color:#586e75></span> String<span style=color:#719e07>[]</span> <span style=color:#268bd2>protocol</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#719e07>{};</span> <span style=color:#586e75>// #11
+</span><span style=color:#586e75></span> String <span style=color:#268bd2>monitor</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #12
+</span><span style=color:#586e75></span> String<span style=color:#719e07>[]</span> <span style=color:#268bd2>registry</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#719e07>{};</span> <span style=color:#586e75>// #13
+</span><span style=color:#586e75></span><span style=color:#719e07>}</span>
+</code></pre></div><p>Which is more important:</p><ol><li><strong>@Service</strong>: Can only be defined on a class, represent a service</li><li><strong>interfaceClass</strong>: specified <code>interface</code>’s class implemented by the service provider</li><li><strong>interfaceName</strong>: specified <code>interface</code>’s class name implemented by the service provider</li><li><strong>version</strong>: specified the version number of the service</li><li><strong>group</st [...]
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>GreetingServiceConsumer</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>@Reference</span>
+ <span style=color:#268bd2>private</span> GreetingService greetingService<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>doSayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> greetingService<span style=color:#719e07>.</span>sayHello<span style=color:#719e07>(</span>name<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>Via <code>@Reference</code>’s properties, you can customize Dubbo’s Service consumer:</p><div class=highlight><pre 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=color:#719e07>package</span> org.apache.dubbo.config.annotation<span style=color:#719e07>;</span>
+
+<span style=color:#268bd2>@Documented</span>
+<span style=color:#268bd2>@Retention</span><span style=color:#719e07>(</span>RetentionPolicy<span style=color:#719e07>.</span>RUNTIME<span style=color:#719e07>)</span>
+<span style=color:#268bd2>@Target</span><span style=color:#719e07>({</span>ElementType<span style=color:#719e07>.</span>FIELD<span style=color:#719e07>,</span> ElementType<span style=color:#719e07>.</span>METHOD<span style=color:#719e07>,</span> ElementType<span style=color:#719e07>.</span>ANNOTATION_TYPE<span style=color:#719e07>})</span> <span style=color:#586e75>// #1
+</span><span style=color:#586e75></span><span style=color:#268bd2>public</span> <span style=color:#268bd2>@interface</span> Reference <span style=color:#719e07>{</span>
+ Class<span style=color:#719e07><?></span> interfaceClass<span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#dc322f>void</span><span style=color:#719e07>.</span>class<span style=color:#719e07>;</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span> String <span style=color:#268bd2>interfaceName</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #3
+</span><span style=color:#586e75></span> String <span style=color:#268bd2>version</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #4
+</span><span style=color:#586e75></span> String <span style=color:#268bd2>group</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #5
+</span><span style=color:#586e75></span> String <span style=color:#268bd2>url</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #6
+</span><span style=color:#586e75></span>
+ String <span style=color:#268bd2>application</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #7
+</span><span style=color:#586e75></span> String <span style=color:#268bd2>module</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #8
+</span><span style=color:#586e75></span> String <span style=color:#268bd2>consumer</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #9
+</span><span style=color:#586e75></span> String <span style=color:#268bd2>protocol</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #10
+</span><span style=color:#586e75></span> String <span style=color:#268bd2>monitor</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#2aa198>""</span><span style=color:#719e07>;</span> <span style=color:#586e75>// #11
+</span><span style=color:#586e75></span> String<span style=color:#719e07>[]</span> <span style=color:#268bd2>registry</span><span style=color:#719e07>()</span> <span style=color:#719e07>default</span> <span style=color:#719e07>{};</span> <span style=color:#586e75>// #12
+</span><span style=color:#586e75></span><span style=color:#719e07>}</span>
+</code></pre></div><p>Which is more important:</p><ol><li><strong>@Reference</strong>:you can define it on a field in a class, you can define it on a method, you can even modify another annotation, it represent a reference to a service.Normally <code>@Reference</code> is defined in one field</li><li><strong>interfaceClass</strong> : specified <code>interface</code>’s class implemented by the service provider</li><li><strong>interfaceName</strong>: specified <code>interface</code>&r [...]
+ String <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h3 id=2serverservice-implementation>2.Server:Service Implementation</h3><p>Implement the <code>GreetingService</code> interface, and mark it as a service for Dubbo via @Service.</p><div class=highlight><pre 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=color:#268bd2>@Service</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>AnnotatedGreetingService</span> <span style=color:#268bd2>implements</span> GreetingService <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"hello, "</span> <span style=color:#719e07>+</span> name<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h3 id=3serverassembly-service-provider>3.Server:Assembly Service Provider</h3><p>You can discover, assemble, and provide Dubbo’s services through the Java config technology (@Configuration) and annotation scan (@EnableDubbo) in Spring.</p><div class=highlight><pre 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=color:#268bd2>@Configuration</span>
+<span style=color:#268bd2>@EnableDubbo</span><span style=color:#719e07>(</span>scanBasePackages <span style=color:#719e07>=</span> <span style=color:#2aa198>"com.alibaba.dubbo.samples.impl"</span><span style=color:#719e07>)</span>
+<span style=color:#268bd2>static</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>ProviderConfiguration</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>@Bean</span> <span style=color:#586e75>// #1
+</span><span style=color:#586e75></span> <span style=color:#268bd2>public</span> ProviderConfig <span style=color:#268bd2>providerConfig</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ ProviderConfig providerConfig <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ProviderConfig<span style=color:#719e07>();</span>
+ providerConfig<span style=color:#719e07>.</span>setTimeout<span style=color:#719e07>(</span>1000<span style=color:#719e07>);</span>
+ <span style=color:#719e07>return</span> providerConfig<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>@Bean</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span> <span style=color:#268bd2>public</span> ApplicationConfig <span style=color:#268bd2>applicationConfig</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ ApplicationConfig applicationConfig <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ApplicationConfig<span style=color:#719e07>();</span>
+ applicationConfig<span style=color:#719e07>.</span>setName<span style=color:#719e07>(</span><span style=color:#2aa198>"dubbo-annotation-provider"</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>return</span> applicationConfig<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>@Bean</span> <span style=color:#586e75>// #3
+</span><span style=color:#586e75></span> <span style=color:#268bd2>public</span> RegistryConfig <span style=color:#268bd2>registryConfig</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ RegistryConfig registryConfig <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> RegistryConfig<span style=color:#719e07>();</span>
+ registryConfig<span style=color:#719e07>.</span>setProtocol<span style=color:#719e07>(</span><span style=color:#2aa198>"zookeeper"</span><span style=color:#719e07>);</span>
+ registryConfig<span style=color:#719e07>.</span>setAddress<span style=color:#719e07>(</span><span style=color:#2aa198>"localhost"</span><span style=color:#719e07>);</span>
+ registryConfig<span style=color:#719e07>.</span>setPort<span style=color:#719e07>(</span>2181<span style=color:#719e07>);</span>
+ <span style=color:#719e07>return</span> registryConfig<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>@Bean</span> <span style=color:#586e75>// #4
+</span><span style=color:#586e75></span> <span style=color:#268bd2>public</span> ProtocolConfig <span style=color:#268bd2>protocolConfig</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ ProtocolConfig protocolConfig <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ProtocolConfig<span style=color:#719e07>();</span>
+ protocolConfig<span style=color:#719e07>.</span>setName<span style=color:#719e07>(</span><span style=color:#2aa198>"dubbo"</span><span style=color:#719e07>);</span>
+ protocolConfig<span style=color:#719e07>.</span>setPort<span style=color:#719e07>(</span>20880<span style=color:#719e07>);</span>
+ <span style=color:#719e07>return</span> protocolConfig<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>Description:</p><ul><li>Scan all classes marked with <code>@Service</code> under <code>com.alibaba.dubbo.samples.impl</code> with <code>@EnableDubbo</code></li><li>Via @Configuration, all @Beans in the ProviderConfiguration are assembled using the way of <code>Java Config</code> and then injected into the Dubbo service, which means the class marked with <code>@Service</code>.Which included:
+i. <strong>ProviderConfig</strong>:Service provider configuration
+ii. <strong>ApplicationConfig</strong>:Application configuration
+iii.<strong>RegistryConfig</strong>:registry configuration
+iv. <strong>ProtocolConfig</strong>:Protocol configuration</li></ul><h3 id=4serverstart-service>4.Server:Start Service</h3><p>In the <code>main</code> method to provide external <code>Dubbo</code> service by starting a <code>Spring Context</code>.</p><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span sty [...]
+ <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> Exception <span style=color:#719e07>{</span>
+ <span style=color:#719e07>new</span> EmbeddedZooKeeper<span style=color:#719e07>(</span>2181<span style=color:#719e07>,</span> <span style=color:#cb4b16>false</span><span style=color:#719e07>).</span>start<span style=color:#719e07>();</span> <span style=color:#586e75>// #1
+</span><span style=color:#586e75></span> AnnotationConfigApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> AnnotationConfigApplicationContext<span style=color:#719e07>(</span>ProviderConfiguration<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span> context<span style=color:#719e07>.</span>start<span style=color:#719e07>();</span> <span style=color:#586e75>// #3
+</span><span style=color:#586e75></span> System<span style=color:#719e07>.</span>in<span style=color:#719e07>.</span>read<span style=color:#719e07>();</span> <span style=color:#586e75>// #4
+</span><span style=color:#586e75></span> <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>Description:</p><ol><li>Start an embedded <code>zookeeper</code> and provide service registry on port <code>2181</code></li><li>Initialize an example of an AnnotationConfigApplicationContext and pass the <code>ProviderConfiguration</code> into the example to complete the automatic discovery and assembly of the <code>Dubbo</code> service.</li><li>Start the <code>Spring Context</code> and start providing external <code>Dubbo</code> services.</li><li>Because it is a se [...]
+
+<span style=color:#719e07>[</span>01/08/18 02:12:51:051 CST<span style=color:#719e07>]</span> main INFO zookeeper.ZookeeperRegistry: <span style=color:#719e07>[</span>DUBBO<span style=color:#719e07>]</span> Register: dubbo://192.168.99.1:20880/com.alibaba.dubbo.samples.api.GreetingService?anyhost<span style=color:#719e07>=</span>true&<span style=color:#268bd2>application</span><span style=color:#719e07>=</span>dubbo-annotation-provider&default.timeout<span style=color:#719e07>= [...]
+</code></pre></div><h3 id=5serverreference-service>5.Server:Reference Service</h3><p>Marking the member variable of the <code>GreetingService</code> via <code>@Reference</code> .The <code>greetingService</code> is a reference to the <code>Dubbo</code> service, which means that it can simply provide through the interface to the remote party to initiate service calls, and the client does not implement <code>GreetingService</code> interface.</p><div class=highlight><pre style=color:#93a1a1; [...]
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>GreetingServiceConsumer</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>@Reference</span>
+ <span style=color:#268bd2>private</span> GreetingService greetingService<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>doSayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> greetingService<span style=color:#719e07>.</span>sayHello<span style=color:#719e07>(</span>name<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h3 id=6serverassembly-service-consumer>6.Server:Assembly Service consumer</h3><p>Just like <strong>3. Server:Assembly Service Provider</strong> You can discover, assemble, and provide Dubbo’s service consumer through the Java config technology (@Configuration) and annotation scan (@EnableDubbo) in Spring.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-Java data-lang=Java><sp [...]
+<span style=color:#268bd2>@EnableDubbo</span><span style=color:#719e07>(</span>scanBasePackages <span style=color:#719e07>=</span> <span style=color:#2aa198>"com.alibaba.dubbo.samples.action"</span><span style=color:#719e07>)</span>
+<span style=color:#268bd2>@ComponentScan</span><span style=color:#719e07>(</span>value <span style=color:#719e07>=</span> <span style=color:#719e07>{</span><span style=color:#2aa198>"com.alibaba.dubbo.samples.action"</span><span style=color:#719e07>})</span>
+<span style=color:#268bd2>static</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>ConsumerConfiguration</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>@Bean</span> <span style=color:#586e75>// #1
+</span><span style=color:#586e75></span> <span style=color:#268bd2>public</span> ApplicationConfig <span style=color:#268bd2>applicationConfig</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ ApplicationConfig applicationConfig <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ApplicationConfig<span style=color:#719e07>();</span>
+ applicationConfig<span style=color:#719e07>.</span>setName<span style=color:#719e07>(</span><span style=color:#2aa198>"dubbo-annotation-consumer"</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>return</span> applicationConfig<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>@Bean</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span> <span style=color:#268bd2>public</span> ConsumerConfig <span style=color:#268bd2>consumerConfig</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ ConsumerConfig consumerConfig <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ConsumerConfig<span style=color:#719e07>();</span>
+ consumerConfig<span style=color:#719e07>.</span>setTimeout<span style=color:#719e07>(</span>3000<span style=color:#719e07>);</span>
+ <span style=color:#719e07>return</span> consumerConfig<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>@Bean</span> <span style=color:#586e75>// #3
+</span><span style=color:#586e75></span> <span style=color:#268bd2>public</span> RegistryConfig <span style=color:#268bd2>registryConfig</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ RegistryConfig registryConfig <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> RegistryConfig<span style=color:#719e07>();</span>
+ registryConfig<span style=color:#719e07>.</span>setProtocol<span style=color:#719e07>(</span><span style=color:#2aa198>"zookeeper"</span><span style=color:#719e07>);</span>
+ registryConfig<span style=color:#719e07>.</span>setAddress<span style=color:#719e07>(</span><span style=color:#2aa198>"localhost"</span><span style=color:#719e07>);</span>
+ registryConfig<span style=color:#719e07>.</span>setPort<span style=color:#719e07>(</span>2181<span style=color:#719e07>);</span>
+ <span style=color:#719e07>return</span> registryConfig<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>Description:</p><ul><li>Scan all classes marked with <code>@Service</code> under <code>com.alibaba.dubbo.samples.impl</code> with <code>@Reference</code></li><li>Via @Configuration, all @Beans in the ProviderConfiguration are assembled using the way of <code>Java Config</code> and then injected into the Dubbo service, which means the class marked with <code>@Reference</code>.Which included:
+i. <code>ApplicationConfig</code>: Application configuration
+ii. <code>ConsumerConfig</code>:Service consumer configuration
+iii.<code>RegistryConfig</code>:Registry configuration.Note:The configuration here needs to be consistent with the configuration information of the EmbeddedZooKeeper when started by the service provider.</li></ul><h3 id=7server-initiate-remote-calls>7.Server: Initiate Remote Calls</h3><p>In the <code>main</code> method, you can start a <code>Spring Context</code> to find the service consumer of the assembled <code>Dubbo</code> from it, and initiate a remote call.</p><div class=highlight> [...]
+ <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:#719e07>{</span>
+ AnnotationConfigApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> AnnotationConfigApplicationContext<span style=color:#719e07>(</span>ConsumerConfiguration<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span> <span style=color:#586e75>// #1
+</span><span style=color:#586e75></span> context<span style=color:#719e07>.</span>start<span style=color:#719e07>();</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span> GreetingServiceConsumer greetingServiceConsumer <span style=color:#719e07>=</span> context<span style=color:#719e07>.</span>getBean<span style=color:#719e07>(</span>GreetingServiceConsumer<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span> <span style=color:#586e75>// #3
+</span><span style=color:#586e75></span> String hello <span style=color:#719e07>=</span> greetingServiceConsumer<span style=color:#719e07>.</span>doSayHello<span style=color:#719e07>(</span><span style=color:#2aa198>"annotation"</span><span style=color:#719e07>);</span> <span style=color:#586e75>// #4
+</span><span style=color:#586e75></span> System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"result: "</span> <span style=color:#719e07>+</span> hello<span style=color:#719e07>);</span> <span style=color:#586e75>// #5
+</span><span style=color:#586e75></span> <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>Description:</p><ul><li>Initialize an example of an AnnotationConfigApplicationContext and pass the <code>ProviderConfiguration</code> into the example to complete the automatic discovery and assembly of the <code>Dubbo</code> service consumer.</li><li>start <code>Spring Context</code>.</li><li>Find <code>bean</code> which type is <code>GreetingServiceConsumer</code> from <code>Context</code>.</li><li>Call the <code>doSayHello</code> method and finally initiate a re [...]
+Start the Server’s <code>main</code> method, you will see the following output, which returns the <code>result</code>: hello, annotation:</li></ul><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh><span style=color:#719e07>[</span>01/08/18 02:38:40:040 CST<span style=color:#719e07>]</span> main INFO config.AbstractConfig: <span style=color:#719e07>[</span>DUBBO<span style=color:#719 [...]
+<span style=color:#719e07>[</span>01/08/18 02:38:40:040 CST<span style=color:#719e07>]</span> main INFO annotation.ReferenceBeanBuilder: <dubbo:reference <span style=color:#268bd2>object</span><span style=color:#719e07>=</span><span style=color:#2aa198>"com.alibaba.dubbo.common.bytecode.proxy0@673be18f"</span> <span style=color:#268bd2>singleton</span><span style=color:#719e07>=</span><span style=color:#2aa198>"true"</span> <span style=color:#268bd2>interface</span><s [...]
+result: hello, annotation
+</code></pre></div><h2 id=conclusion>Conclusion</h2><p>By studying this article, the reader can master the basic concepts of <code>Dubbo</code>’s exclusive <code>annotations</code> , <code>@EnableDubbo</code>, <code>@Service</code>, <code>@Reference</code>, and master it’s basic usage through a simple <code>Dubbo</code> application.</p><p>In addition to traditional <code>XML</code> configuration, <code>Spring</code> offers more modern configurations such as annotation drivers [...]
\ No newline at end of file
diff --git a/blog/2018/08/07/using-zookeeper-in-dubbo/index.html b/blog/2018/08/07/using-zookeeper-in-dubbo/index.html
new file mode 100644
index 00000000000..894e60eef7a
--- /dev/null
+++ b/blog/2018/08/07/using-zookeeper-in-dubbo/index.html
@@ -0,0 +1,175 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-zk.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+to [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Using%20Zookeeper%20in%20Dubbo" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#introduction-of-zookeeper>Introduction of Zookeeper</a><ul><li><a href=#the-basic-concept>The basic concept</a></li><li><a href=#basic-implementation>Basic Implementation</a></li></ul></li><li><a href=#using-zookeeper-in-dubbo>Using Zookeeper in Dubbo</a><ul><li><a href=#prepare-the-sample-code>Prepare the sample code</a [...]
+<em>Image Credit : ebook -Zookeeper-Distributed Process Coordination from O’Reilly</em></p><p>The method to store the data in Zookeeper is similar as the standard UNIX file system, as a data model styled after the familiar directory tree structure of file systems. When we talking about ZooKeeper data nodes, we call it Znodes to clarify it.</p><p><img src=/imgs/blog/zk-tree.png alt=zk-tree>
+<em>Image Credit : ebook -Zookeeper-Distributed Process Coordination from O’Reilly</em></p><h3 id=basic-implementation>Basic Implementation</h3><p>You could donwload and install Zookeeper directly<sup id=fnref:1><a href=#fn:1 class=footnote-ref role=doc-noteref>1</a></sup>.
+Or you could use Homebrew <sup id=fnref:2><a href=#fn:2 class=footnote-ref role=doc-noteref>2</a></sup> <code>brew install zookeeper</code> to install Zookeeper in Mac OS.
+Considering the versatility, we run the Zookeeper by using docker in this blog. If you have not installed the docker yet, please prepare the docker environment first. <sup id=fnref:3><a href=#fn:3 class=footnote-ref role=doc-noteref>3</a></sup></p><h4 id=1-running-the-zookeeper>1. Running the Zookeeper</h4><p>Execute the command to run zookeeper in a docker container</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code c [...]
+</code></pre></div><h4 id=2-entering-the-zookeeper-container>2. Entering the zookeeper container</h4><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell>docker <span style=color:#b58900>exec</span> -it zookeeper bash
+</code></pre></div><p>In the <code>bin</code> directory, there is a command to start zookeeper <code>zkServer</code> and the Management Console <code>zkCli</code></p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell>bash-4.4# ls -l bin
+total <span style=color:#2aa198>36</span>
+-rwxr-xr-x <span style=color:#2aa198>1</span> zookeepe zookeepe <span style=color:#2aa198>232</span> Mar <span style=color:#2aa198>27</span> 04:32 README.txt
+-rwxr-xr-x <span style=color:#2aa198>1</span> zookeepe zookeepe <span style=color:#2aa198>1937</span> Mar <span style=color:#2aa198>27</span> 04:32 zkCleanup.sh
+-rwxr-xr-x <span style=color:#2aa198>1</span> zookeepe zookeepe <span style=color:#2aa198>1056</span> Mar <span style=color:#2aa198>27</span> 04:32 zkCli.cmd
+-rwxr-xr-x <span style=color:#2aa198>1</span> zookeepe zookeepe <span style=color:#2aa198>1534</span> Mar <span style=color:#2aa198>27</span> 04:32 zkCli.sh
+-rwxr-xr-x <span style=color:#2aa198>1</span> zookeepe zookeepe <span style=color:#2aa198>1759</span> Mar <span style=color:#2aa198>27</span> 04:32 zkEnv.cmd
+-rwxr-xr-x <span style=color:#2aa198>1</span> zookeepe zookeepe <span style=color:#2aa198>2696</span> Mar <span style=color:#2aa198>27</span> 04:32 zkEnv.sh
+-rwxr-xr-x <span style=color:#2aa198>1</span> zookeepe zookeepe <span style=color:#2aa198>1089</span> Mar <span style=color:#2aa198>27</span> 04:32 zkServer.cmd
+-rwxr-xr-x <span style=color:#2aa198>1</span> zookeepe zookeepe <span style=color:#2aa198>6773</span> Mar <span style=color:#2aa198>27</span> 04:32 zkServer.sh
+</code></pre></div><h4 id=3-entering-the-zookeeper-management-interface-via-zkcli>3. Entering the zookeeper management interface via zkCli</h4><p>Since it was started through docker, the process of Zookeeper has been started and will provide the services to the public via port 2181.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell>bash-4.4# ps
+PID USER TIME COMMAND
+ <span style=color:#2aa198>1</span> zookeepe 0:02 /usr/lib/jvm/java-1.8-openjdk/jre/bin/java -Dzookeeper.log.dir<span style=color:#719e07>=</span>. -Dzookeeper.root
+ <span style=color:#2aa198>32</span> root 0:00 bash
+ <span style=color:#2aa198>42</span> root 0:00 ps
+</code></pre></div><p>So, it allows you to access Zookeeper’s console directly through <code>zkCli</code> for management.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell>bash-4.4# bin/zkCli.sh -server 127.0.0.1:2181
+Connecting to 127.0.0.1:2181
+...
+WATCHER::
+
+WatchedEvent state:SyncConnected type:None path:null
+
+<span style=color:#719e07>[</span>zk: 127.0.0.1:2181<span style=color:#719e07>(</span>CONNECTED<span style=color:#719e07>)</span> 0<span style=color:#719e07>]</span> <span style=color:#b58900>help</span>
+ZooKeeper -server host:port cmd args
+ stat path <span style=color:#719e07>[</span>watch<span style=color:#719e07>]</span>
+ <span style=color:#b58900>set</span> path data <span style=color:#719e07>[</span>version<span style=color:#719e07>]</span>
+ ls path <span style=color:#719e07>[</span>watch<span style=color:#719e07>]</span>
+ delquota <span style=color:#719e07>[</span>-n|-b<span style=color:#719e07>]</span> path
+ ls2 path <span style=color:#719e07>[</span>watch<span style=color:#719e07>]</span>
+ setAcl path acl
+ setquota -n|-b val path
+ <span style=color:#b58900>history</span>
+ redo cmdno
+ printwatches on|off
+ delete path <span style=color:#719e07>[</span>version<span style=color:#719e07>]</span>
+ sync path
+ listquota path
+ rmr path
+ get path <span style=color:#719e07>[</span>watch<span style=color:#719e07>]</span>
+ create <span style=color:#719e07>[</span>-s<span style=color:#719e07>]</span> <span style=color:#719e07>[</span>-e<span style=color:#719e07>]</span> path data acl
+ addauth scheme auth
+ quit
+ getAcl path
+ close
+ connect host:port
+</code></pre></div><h4 id=4-basic-examples-on-zkcli>4. Basic Examples on zkCli</h4><p>Create <code>/hello-zone</code> node:</p><div class=highlight><pre 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=color:#719e07>[</span>zk: 127.0.0.1:2181<span style=color:#719e07>(</span>CONNECTED<span style=color:#719e07>)</span> 19<span style=color:#719e07>]</span> create /hello-zone <span style=color:#2aa19 [...]
+Created /hello-zone
+</code></pre></div><p>List the child nodes under <code>/</code> and confirm that <code>hello-zone</code> is created:</p><div class=highlight><pre 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=color:#719e07>[</span>zk: 127.0.0.1:2181<span style=color:#719e07>(</span>CONNECTED<span style=color:#719e07>)</span> 20<span style=color:#719e07>]</span> ls /
+<span style=color:#719e07>[</span>zookeeper, hello-zone<span style=color:#719e07>]</span>
+</code></pre></div><p>List the child nodes for <code>/hello-zone</code> and verify that it is empty:</p><div class=highlight><pre 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=color:#719e07>[</span>zk: 127.0.0.1:2181<span style=color:#719e07>(</span>CONNECTED<span style=color:#719e07>)</span> 21<span style=color:#719e07>]</span> ls /hello-zone
+<span style=color:#719e07>[]</span>
+</code></pre></div><p>Get the data stored on the <code>/hello-zone</code> node:</p><div class=highlight><pre 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=color:#719e07>[</span>zk: 127.0.0.1:2181<span style=color:#719e07>(</span>CONNECTED<span style=color:#719e07>)</span> 22<span style=color:#719e07>]</span> get /hello-zone
+world
+</code></pre></div><h2 id=using-zookeeper-in-dubbo>Using Zookeeper in Dubbo</h2><p>Zookeeper is used for service registration discovery and configuration management in Dubbo, and the structure of data in Zookeeper is shown in the following figure:</p><p><img src=../../img/blog/dubbo-in-zk.jpg alt=dubbo-in-zk></p><p>First, all data related to Dubbo is organized under the root node of <code>/dubbo</code>.</p><p>The secondary directory is the service name like <code>com.foo.BarService</code [...]
+ String <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h4 id=2-server-implementation>2. Server: Implementation</h4><p>Implement the <code>GreetingService</code> interface and mark it as a service for Dubbo via <code>@Service</code>.</p><div class=highlight><pre 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=color:#268bd2>@Service</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>AnnotatedGreetingService</span> <span style=color:#268bd2>implements</span> GreetingService <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"hello, "</span> <span style=color:#719e07>+</span> name<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h4 id=3-server-assembly>3. Server: Assembly</h4><p>Define ProviderConfiguration to assemble Dubbo services.</p><div class=highlight><pre 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=color:#268bd2>@Configuration</span>
+<span style=color:#268bd2>@EnableDubbo</span><span style=color:#719e07>(</span>scanBasePackages <span style=color:#719e07>=</span> <span style=color:#2aa198>"com.alibaba.dubbo.samples.impl"</span><span style=color:#719e07>)</span>
+<span style=color:#268bd2>@PropertySource</span><span style=color:#719e07>(</span><span style=color:#2aa198>"classpath:/spring/dubbo-provider.properties"</span><span style=color:#719e07>)</span>
+<span style=color:#268bd2>static</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>ProviderConfiguration</span> <span style=color:#719e07>{}</span>
+</code></pre></div><p>Dubbo-provider.properties is an external configuration in a spring application, as follows:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>dubbo.application.name=demo-provider
+dubbo.registry.address=zookeeper://$DOCKER_HOST:2181
+dubbo.protocol.name=dubbo
+dubbo.protocol.port=20880
+</code></pre></div><p>Since zookeeper runs in a docker container, please be noted that:</p><ul><li>We assumes that Dubbo applications is running on the host machine (outside the docker container) in this document, and needs to replace the PATH of Zookeeper with the IP address of the Environment Variable <em>${DOCKER_HOST}</em>. Please find more detail in the official Docker documentation.</li><li>When the Dubbo application is a docker application, the container’s name is equivalent [...]
+ <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> Exception <span style=color:#719e07>{</span>
+ AnnotationConfigApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> AnnotationConfigApplicationContext<span style=color:#719e07>(</span>ProviderConfiguration<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+ context<span style=color:#719e07>.</span>start<span style=color:#719e07>();</span>
+ System<span style=color:#719e07>.</span>in<span style=color:#719e07>.</span>read<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>Start the <code>main</code> method of server, you will get the following output, which represents the success of the server’s startup, and the <code>GreetingService</code> service is registered on the ZookeeperRegistry:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh><span style=color:#719e07>[</span>03/08/18 10:50:33:033 CST<span style=color:#719e07>]</span [...]
+</code></pre></div><p>You could find the registration information of the service provider through the Zookeeper management terminal:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh>$ docker <span style=color:#b58900>exec</span> -it zookeeper bash
+bash-4.4# bin/zkCli.sh -server localhost:218
+Connecting to localhost:2181
+...
+Welcome to ZooKeeper!
+JLine support is enabled
+...
+<span style=color:#719e07>[</span>zk: localhost:2181<span style=color:#719e07>(</span>CONNECTED<span style=color:#719e07>)</span> 0<span style=color:#719e07>]</span> ls /dubbo/com.alibaba.dubbo.samples.api.GreetingService/providers
+<span style=color:#719e07>[</span>dubbo%3A%2F%2F192.168.99.1%3A20880%2Fcom.alibaba.dubbo.samples.api.GreetingService%3Fanyhost%3Dtrue%26application%3Ddemo-provider%26dubbo%3D2.6.2%26generic%3Dfalse%26interface%3Dcom.alibaba.dubbo.samples.api.GreetingService%26methods%3DsayHello%26pid%3D12938%26side%3Dprovider%26timestamp%3D1533264631849<span style=color:#719e07>]</span>
+</code></pre></div><p>You could find that the Dubbo services just registered its URL address at the <code>providers</code> node as follows:
+<em>dubbo://192.168.99.1:20880/com.alibaba.dubbo.samples.api.GreetingService?anyhost=true&application=demo-provider&dubbo=2.6.2&generic=false&interface=com.alibaba.dubbo.samples.api.GreetingService&methods=sayHello&pid=12938&side=provider×tamp=1533264631849</em></p><h4 id=5-client-reference-service>5. Client: Reference Service</h4><p>You could declare the reference service by @Reference, while it will generate a full call. The target address of the service could be queried by the Zo [...]
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>GreetingServiceConsumer</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>@Reference</span>
+ <span style=color:#268bd2>private</span> GreetingService greetingService<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>doSayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> greetingService<span style=color:#719e07>.</span>sayHello<span style=color:#719e07>(</span>name<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h4 id=6-client-assembling>6. Client: Assembling</h4><p>Define the ConsumerConfiguration to assemble Dubbo service.</p><div class=highlight><pre 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=color:#268bd2>@Configuration</span>
+<span style=color:#268bd2>@EnableDubbo</span><span style=color:#719e07>(</span>scanBasePackages <span style=color:#719e07>=</span> <span style=color:#2aa198>"com.alibaba.dubbo.samples.action"</span><span style=color:#719e07>)</span>
+<span style=color:#268bd2>@PropertySource</span><span style=color:#719e07>(</span><span style=color:#2aa198>"classpath:/spring/dubbo-consumer.properties"</span><span style=color:#719e07>)</span>
+<span style=color:#268bd2>@ComponentScan</span><span style=color:#719e07>(</span>value <span style=color:#719e07>=</span> <span style=color:#719e07>{</span><span style=color:#2aa198>"com.alibaba.dubbo.samples.action"</span><span style=color:#719e07>})</span>
+<span style=color:#268bd2>static</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>ConsumerConfiguration</span> <span style=color:#719e07>{}</span>
+</code></pre></div><p>“dubbo-consumer.properties” is a method of external configuration in a Spring application, as follows:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>dubbo.application.name=demo-consumer
+dubbo.registry.address=zookeeper://$DOCKER_HOST:2181
+dubbo.consumer.timeout=3000
+</code></pre></div><p>Same as <strong>3. Server: Assembling</strong>, You need to modify <em>$DOCKER_HOST</em> defined in <em>dubbo.registry.address</em> according to your own environment. You could find more instructions in step 3.</p><h4 id=7-client-initiating-a-remote-call>7. Client: Initiating A Remote Call</h4><p>Run <code>main</code> to initiate a remote call from a existed service provider. Dubbo first subscribes to the zookeeper service address and then selects one from the list [...]
+ <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:#719e07>{</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>ConsumerBootstrap</span> <span style=color:#719e07>{</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> IOException <span style=color:#719e07>{</span>
+ AnnotationConfigApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> AnnotationConfigApplicationContext<span style=color:#719e07>(</span>ConsumerConfiguration<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+ context<span style=color:#719e07>.</span>start<span style=color:#719e07>();</span>
+ GreetingServiceConsumer greetingServiceConsumer <span style=color:#719e07>=</span> context<span style=color:#719e07>.</span>getBean<span style=color:#719e07>(</span>GreetingServiceConsumer<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+ String hello <span style=color:#719e07>=</span> greetingServiceConsumer<span style=color:#719e07>.</span>doSayHello<span style=color:#719e07>(</span><span style=color:#2aa198>"zookeeper"</span><span style=color:#719e07>);</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"result: "</span> <span style=color:#719e07>+</span> hello<span style=color:#719e07>);</span>
+ System<span style=color:#719e07>.</span>in<span style=color:#719e07>.</span>read<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>The output are as follows:</p><div class=highlight><pre 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=color:#719e07>[</span>03/08/18 01:42:31:031 CST<span style=color:#719e07>]</span> main INFO zookeeper.ZookeeperRegistry: <span style=color:#719e07>[</span>DUBBO<span style=color:#719e07>]</span> Register: consumer://192.168.99.1/com.alibaba.dubbo.samples.api.GreetingServ [...]
+<span style=color:#719e07>[</span>03/08/18 01:42:31:031 CST<span style=color:#719e07>]</span> main INFO zookeeper.ZookeeperRegistry: <span style=color:#719e07>[</span>DUBBO<span style=color:#719e07>]</span> Subscribe: consumer://192.168.99.1/com.alibaba.dubbo.samples.api.GreetingService?application<span style=color:#719e07>=</span>demo-consumer&<span style=color:#268bd2>category</span><span style=color:#719e07>=</span>providers,configurators,routers&default.timeout<span style=c [...]
+...
+result: hello, zookeeper
+</code></pre></div><p>Description:</p><ol><li><strong>Register</strong>: consumer://192.168.99.1/…&<strong>category=consumers</strong>&: In Zookeeper, consumers could register their information and store it at the <code>consumers</code> node</li><li><strong>Subscribe</strong>: consumer://192.168.99.1/…&<strong>category=providers,configurators,routers</strong>&:Consumers subscribe <code>providers</code>, <code>configurators</code>, <code>routers</code> from Zookeepers. The <code [...]
+bash-4.4# bin/zkCli.sh -server localhost:218
+Connecting to localhost:2181
+...
+Welcome to ZooKeeper!
+JLine support is enabled
+...
+<span style=color:#719e07>[</span>zk: localhost:2181<span style=color:#719e07>(</span>CONNECTED<span style=color:#719e07>)</span> 4<span style=color:#719e07>]</span> ls /dubbo/com.alibaba.dubbo.samples.api.GreetingService/consumers
+<span style=color:#719e07>[</span>consumer%3A%2F%2F192.168.99.1%2Fcom.alibaba.dubbo.samples.api.GreetingService%3Fapplication%3Ddemo-consumer%26category%3Dconsumers%26check%3Dfalse%26default.timeout%3D3000%26dubbo%3D2.6.2%26interface%3Dcom.alibaba.dubbo.samples.api.GreetingService%26methods%3DsayHello%26pid%3D82406%26side%3Dconsumer%26timestamp%3D1533274951195<span style=color:#719e07>]</span>
+</code></pre></div><p>You could see that consumers of Dubbo’s servicehas registered its URL address at the <code>consumers</code> node:</p><p><em>consumer://192.168.99.1/com.alibaba.dubbo.samples.api.GreetingService?application=demo-consumer&category=providers,configurators,routers&default.timeout=3000&dubbo=2.6.2&interface=com.alibaba.dubbo.samples.api.GreetingService&methods=sayHello&pid=82406&side=consumer×tamp=1533274951195</em></p><h2 id=summary>Summary</h2><p>This docume [...]
\ No newline at end of file
diff --git a/blog/2018/08/07/your-first-dubbo-demo/index.html b/blog/2018/08/07/your-first-dubbo-demo/index.html
new file mode 100644
index 00000000000..6437b3e789a
--- /dev/null
+++ b/blog/2018/08/07/your-first-dubbo-demo/index.html
@@ -0,0 +1,173 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.78.2"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-fescar-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-fescar-to-ensure-consistency-between-dubbo-microservices/>Use Fescar in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180807your-first-dubbo-demo href=/blog/2018/08/07/your-first-dubbo-demo/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-101.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+t [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Your%20First%20Dubbo%20Demo" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#java-rmi-introduction>Java RMI Introduction</a><ul><li><a href=#java-rmi-work-flow>Java RMI Work Flow</a></li><li><a href=#java-rmi-concepts>Java RMI Concepts</a></li></ul></li><li><a href=#basic-concepts-of-dubbo>Basic Concepts of Dubbo</a></li><li><a href=#dubbo-applications-based-on-api>Dubbo Applications Based on API [...]
+</span><span style=color:#586e75></span>Hello stub <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>Hello<span style=color:#719e07>)</span> UnicastRemoteObject<span style=color:#719e07>.</span>exportObject<span style=color:#719e07>(</span>obj<span style=color:#719e07>,</span> 0<span style=color:#719e07>);</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span>Registry registry <span style=color:#719e07>=</span> LocateRegistry<span style=color:#719e07>.</span>createRegistry<span style=color:#719e07>(</span>1099<span style=color:#719e07>);</span> <span style=color:#586e75>// #3
+</span><span style=color:#586e75></span>registry<span style=color:#719e07>.</span>rebind<span style=color:#719e07>(</span><span style=color:#2aa198>"Hello"</span><span style=color:#719e07>,</span> stub<span style=color:#719e07>);</span> <span style=color:#586e75>// #4
+</span></code></pre></div><p>Notes:</p><ol><li><p>Initiate service object instance.</p></li><li><p>Create stub object to communicate with the server by UnicastRemoteObject.exportObject.</p></li><li><p>Create a local RMI registry service on port 1099 which is run on server. It can also be registered as an independent process.</p></li><li><p>Bind stub object into registry so the client can find the remote object by looking up Hello.</p></li></ol><h4 id=client-service-look-up>Client service [...]
+</span><span style=color:#586e75></span>Hello stub <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>Hello<span style=color:#719e07>)</span> registry<span style=color:#719e07>.</span>lookup<span style=color:#719e07>(</span><span style=color:#2aa198>"Hello"</span><span style=color:#719e07>);</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span>String response <span style=color:#719e07>=</span> stub<span style=color:#719e07>.</span>sayHello<span style=color:#719e07>();</span> <span style=color:#586e75>// #3
+</span></code></pre></div><p>Notes:</p><ol><li>Acquire registry service instances. In this case, there is no input parameters so it is assumed that the acquired instance is located on port 1099.</li><li>Look up the remote object named Hello in registry service.</li><li>Run a RMI invocation via acquired Stub object and get results.
+Understand the work flow and basic concepts of RMI is helpful to handle current framework of distributed service. It is recommended to refer to RMI official documents for further information[^1].</li></ol><h2 id=basic-concepts-of-dubbo>Basic Concepts of Dubbo</h2><p>The basic concepts of current framework of distributed service is similar to the one of RMI. They both use Java interface as service contract, register and look up by registry center and use agency to block the details of rem [...]
+ String <span style=color:#268bd2>sayHi</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>);</span> <span style=color:#586e75>// #1
+</span><span style=color:#586e75></span><span style=color:#719e07>}</span>
+</code></pre></div><p><strong>Notes</strong>:</p><ol><li>The codes define a simple service contract where there is only one function, sayHi, can be invoked. The type of input parameter and return value are both String.</li></ol><h3 id=provide-contract-implementation>Provide Contract Implementation</h3><div class=highlight><pre 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=color:#268bd2>public</sp [...]
+</span><span style=color:#586e75></span> <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayHi</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"hi, "</span> <span style=color:#719e07>+</span> name<span style=color:#719e07>;</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span> <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p><strong>Notes</strong>:</p><ol><li>Service providers need to implement the interface of service contract, GreetingsService.</li><li>This function simply returns a welcome message. For example, if the input value is <em>dubbo</em>,it will return <em>hi, dubbo</em>.</li></ol><h3 id=implement-dubbo-service-provider>Implement Dubbo Service Provider</h3><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code c [...]
+ <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> IOException <span style=color:#719e07>{</span>
+ ServiceConfig<span style=color:#719e07><</span>GreetingsService<span style=color:#719e07>></span> service <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ServiceConfig<span style=color:#719e07><>();</span> <span style=color:#586e75>// #1
+</span><span style=color:#586e75></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>"first-dubbo-provider"</span><span style=color:#719e07>));</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></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>"multicast://224.5.6.7:1234"</span><span style=color:#719e07>));</span> <span style=color:#586e75>// #3
+</span><span style=color:#586e75></span> service<span style=color:#719e07>.</span>setInterface<span style=color:#719e07>(</span>GreetingsService<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span> <span style=color:#586e75>// #4
+</span><span style=color:#586e75></span> service<span style=color:#719e07>.</span>setRef<span style=color:#719e07>(</span><span style=color:#719e07>new</span> GreetingsServiceImpl<span style=color:#719e07>());</span> <span style=color:#586e75>// #5
+</span><span style=color:#586e75></span> service<span style=color:#719e07>.</span>export<span style=color:#719e07>();</span> <span style=color:#586e75>// #6
+</span><span style=color:#586e75></span> System<span style=color:#719e07>.</span>in<span style=color:#719e07>.</span>read<span style=color:#719e07>();</span> <span style=color:#586e75>// #7
+</span><span style=color:#586e75></span> <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p><strong>Notes</strong>:</p><ol><li>Create an instance <em>ServiceConfig</em> with service interface type as generics parameters, which is <em>GreetingsService</em> in this example.</li><li>Generate an instance of <em>ApplicationConfig</em> and assemble it into <em>ServiceConfig</em>.</li><li>Generate an instance <em>RegistryConfig</em> and assemble it into <em>ServiceConfig</em>. Since the assembled way is applied here, the parameter should be <code>multicast://224. [...]
+ <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:#719e07>{</span>
+ ReferenceConfig<span style=color:#719e07><</span>GreetingsService<span style=color:#719e07>></span> reference <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ReferenceConfig<span style=color:#719e07><>();</span> <span style=color:#586e75>// #1
+</span><span style=color:#586e75></span> reference<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>"first-dubbo-client"</span><span style=color:#719e07>));</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span> reference<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>"multicast://224.5.6.7:1234"</span><span style=color:#719e07>));</span> <span style=color:#586e75>// #3
+</span><span style=color:#586e75></span> reference<span style=color:#719e07>.</span>setInterface<span style=color:#719e07>(</span>GreetingsService<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span> <span style=color:#586e75>// #4
+</span><span style=color:#586e75></span> GreetingsService greetingsService <span style=color:#719e07>=</span> reference<span style=color:#719e07>.</span>get<span style=color:#719e07>();</span> <span style=color:#586e75>// #5
+</span><span style=color:#586e75></span> String message <span style=color:#719e07>=</span> greetingsService<span style=color:#719e07>.</span>sayHi<span style=color:#719e07>(</span><span style=color:#2aa198>"dubbo"</span><span style=color:#719e07>);</span> <span style=color:#586e75>// #6
+</span><span style=color:#586e75></span> System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span>message<span style=color:#719e07>);</span> <span style=color:#586e75>// #7
+</span><span style=color:#586e75></span> <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p><strong>Notes</strong>:</p><ol><li>Create an instance of <em>ReferenceConfig</em> with service interface type as generics parameters, which is <em>GreetingsService</em> in this example.</li><li>Create an instance of <em>ApplicationConfig</em>, and assemble it into <em>ReferenceConfig</em>.</li><li>Generate an instance <em>RegistryConfig</em>, and assemble it into <em>ReferenceConfig</em>. Note that the address information here should be the same as the one of the se [...]
+$ <span style=color:#b58900>cd</span> dubbo-samples/java/dubbo-samples-api/
+$ mvn clean package
+INFO<span style=color:#719e07>]</span> Scanning <span style=color:#719e07>for</span> projects...
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span>
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Building dubbo-samples-api 1.0-SNAPSHOT
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span>
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> --- maven-clean-plugin:2.5:clean <span style=color:#719e07>(</span>default-clean<span style=color:#719e07>)</span> @ dubbo-samples-api ---
+...
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> BUILD SUCCESS
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Total time: 2.182 s
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Finished at: 2018-05-28T14:56:08+08:00
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Final Memory: 20M/353M
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+</code></pre></div><p>The build is finished when it shows <code>BUILD SUCCESS</code>. Then comes the running stage.</p><h4 id=run-the-server>Run the server</h4><p>Run the service provider by the following maven command lines:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash>$ mvn -Djava.net.preferIPv4Stack<span style=color:#719e07>=</span><span style=color:#b58900>true</span> -Dexec [...]
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Scanning <span style=color:#719e07>for</span> projects...
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span>
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Building dubbo-samples-api 1.0-SNAPSHOT
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span>
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> --- exec-maven-plugin:1.6.0:java <span style=color:#719e07>(</span>default-cli<span style=color:#719e07>)</span> @ dubbo-samples-api ---
+log4j:WARN No appenders could be found <span style=color:#719e07>for</span> logger <span style=color:#719e07>(</span>org.apache.dubbo.common.logger.LoggerFactory<span style=color:#719e07>)</span>.
+log4j:WARN Please initialize the log4j system properly.
+log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig <span style=color:#719e07>for</span> more info.
+first-dubbo-provider is running.
+</code></pre></div><p>When <em>first-dubbo-provider is running</em> appears, the service provider is ready to be called by the client.</p><h4 id=run-the-client>Run the client</h4><p>Run the service consumer by the following maven command lines:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash>$ mvn -Djava.net.preferIPv4Stack<span style=color:#719e07>=</span><span style=color:#b58900 [...]
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Scanning <span style=color:#719e07>for</span> projects...
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span>
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> Building dubbo-samples-api 1.0-SNAPSHOT
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> ------------------------------------------------------------------------
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span>
+<span style=color:#719e07>[</span>INFO<span style=color:#719e07>]</span> --- exec-maven-plugin:1.6.0:java <span style=color:#719e07>(</span>default-cli<span style=color:#719e07>)</span> @ dubbo-samples-api ---
+log4j:WARN No appenders could be found <span style=color:#719e07>for</span> logger <span style=color:#719e07>(</span>org.apache.dubbo.common.logger.LoggerFactory<span style=color:#719e07>)</span>.
+log4j:WARN Please initialize the log4j system properly.
+log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig <span style=color:#719e07>for</span> more info.
+hi, dubbo
+</code></pre></div><p><code>hi, dubbo</code> is the execution results from service provider.</p><h2 id=quick-creation-of-a-dubbo-application>Quick Creation of A Dubbo Application</h2><p>Dubbo also provides a public platform that can create a Dubbo application quickly based on Spring Boot. Visit <a href=http://start.dubbo.io>http://start.dubbo.io</a> and follow the figure below to create an example project:</p><p><img src=../../img/blog/dubbo-initializr.png alt="dubbo initializr"></p><p>< [...]
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoApplication</span> <span style=color:#719e07>{</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:#719e07>{</span>
+ <span style=color:#719e07>new</span> EmbeddedZooKeeper<span style=color:#719e07>(</span>2181<span style=color:#719e07>,</span> <span style=color:#cb4b16>false</span><span style=color:#719e07>).</span>start<span style=color:#719e07>();</span> <span style=color:#586e75>// #1
+</span><span style=color:#586e75></span> SpringApplication<span style=color:#719e07>.</span>run<span style=color:#719e07>(</span>DemoApplication<span style=color:#719e07>.</span>class<span style=color:#719e07>,</span> args<span style=color:#719e07>);</span> <span style=color:#586e75>// #2
+</span><span style=color:#586e75></span> <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p><strong>Notes</strong>:</p><ol><li>Launch embedded <em>ZooKeeper</em> on port <em>2181</em>.</li><li>Launch the context of <em>Spring Boot</em>.</li></ol><p>Run it directly in IDE and here are the results:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash>2018-05-28 16:59:38.072 INFO <span style=color:#2aa198>59943</span> --- <span style=color:#719e07>[</span> [...]
+
+ ████████▄ ███ █▄ ▀█████████▄ ▀█████████▄ ▄██████▄
+ ███ ▀███ ███ ███ ███ ███ ███ ███ ███ ███
+ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
+ ███ ███ ███ ███ ▄███▄▄▄██▀ ▄███▄▄▄██▀ ███ ███
+ ███ ███ ███ ███ ▀▀███▀▀▀██▄ ▀▀███▀▀▀██▄ ███ ███
+ ███ ███ ███ ███ ███ ██▄ ███ ██▄ ███ ███
+ ███ ▄███ ███ ███ ███ ███ ███ ███ ███ ███
+ ████████▀ ████████▀ ▄█████████▀ ▄█████████▀ ▀██████▀
+
+
+ :: Dubbo Spring Boot <span style=color:#719e07>(</span>v0.1.0<span style=color:#719e07>)</span> : https://github.com/dubbo/dubbo-spring-boot-project
+ :: Dubbo <span style=color:#719e07>(</span>v2.0.1<span style=color:#719e07>)</span> : https://github.com/alibaba/dubbo
+ :: Google group : http://groups.google.com/group/dubbo
+
+2018-05-28 16:59:38.079 INFO <span style=color:#2aa198>59943</span> --- <span style=color:#719e07>[</span> main<span style=color:#719e07>]</span> e.OverrideDubboConfigApplicationListener : Dubbo Config was overridden by externalized configuration <span style=color:#719e07>{</span>dubbo.application.name<span style=color:#719e07>=</span>dubbo-demo-server, dubbo.application.qosAcceptForeignIp<span style=color:#719e07>=</span>false, dubbo.application.qosEnable<span style=color:#71 [...]
+
+...
+
+2018-05-28 16:59:39.624 INFO <span style=color:#2aa198>59943</span> --- <span style=color:#719e07>[</span> main<span style=color:#719e07>]</span> com.example.demo.DemoApplication : Started DemoApplication in 1.746 seconds <span style=color:#719e07>(</span>JVM running <span style=color:#719e07>for</span> 2.963<span style=color:#719e07>)</span>
+</code></pre></div><p><strong>Notes</strong>:</p><ol><li>In the printouts, the configuration starting with <code>dubbo.</code> Is defined in <em>main/resources/application.properties</em>.</li></ol><h3 id=manage-service-by-telnet>Manage service by Telnet</h3><p>If <em>qos</em> is activated during generation, the service can be watched and managed by <em>telnet</em> or <em>nc</em>.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab- [...]
+Trying 127.0.0.1...
+Connected to localhost.
+Escape character is <span style=color:#2aa198>'^]'</span>.
+ ████████▄ ███ █▄ ▀█████████▄ ▀█████████▄ ▄██████▄
+ ███ ▀███ ███ ███ ███ ███ ███ ███ ███ ███
+ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
+ ███ ███ ███ ███ ▄███▄▄▄██▀ ▄███▄▄▄██▀ ███ ███
+ ███ ███ ███ ███ ▀▀███▀▀▀██▄ ▀▀███▀▀▀██▄ ███ ███
+ ███ ███ ███ ███ ███ ██▄ ███ ██▄ ███ ███
+ ███ ▄███ ███ ███ ███ ███ ███ ███ ███ ███
+ ████████▀ ████████▀ ▄█████████▀ ▄█████████▀ ▀██████▀
+
+
+dubbo>
+dubbo>ls
+As Provider side:
++------------------------------+---+
+| Provider Service Name |PUB|
++------------------------------+---+
+|com.example.HelloService:1.0.0| Y |
++------------------------------+---+
+As Consumer side:
++---------------------+---+
+|Consumer Service Name|NUM|
++---------------------+---+
+</code></pre></div><p>Currently, <em>qos</em> supports following command lines. For more information please refer to the official document. [^4]:</p><ul><li><em>ls</em>:List the information of client and server.</li><li><em>online</em>:Bring the service online.</li><li><em>offline</em>:Bring the service offline.</li><li><em>help</em>:View online help.</li></ul><h2 id=summary>Summary</h2><p>In this tutorial, we start with RMI and introduce the basic concepts in Java distributed invocation [...]
\ No newline at end of file
diff --git a/blog/2018/08/10/dubbos-load-balance/index.html b/blog/2018/08/10/dubbos-load-balance/index.html
new file mode 100644
index 00000000000..2d49620a5e8
--- /dev/null
+++ b/blog/2018/08/10/dubbos-load-balance/index.html
@@ -0,0 +1,129 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-loadbalance.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+ [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Dubbo&#39;s%20Load%20Balance" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#background>Background</a></li><li><a href=#concepts>Concepts</a></li><li><a href=#dubbos-internal-load-balancing-strategy>Dubbo’s Internal Load Balancing Strategy</a><ul><li><a href=#1-random-load-balancing>1. Random Load Balancing</a></li><li><a href=#2-round-robin-load-balancing>2. Round Robin Load Balancing</a>< [...]
+| | | | |
++-----------------------------------------------------------------------------------+
+1 10 30 50 80
+
+|-----A----|---------B----------|----------C---------|---------------D--------------|
+
+
+---------------------15
+
+-------------------------------------------37
+
+-----------------------------------------------------------54
+</code></pre></div><p>There are four areas in the above picture, and the lengths are the weights of A, B, C and D, respectively. Use <code>random.nextInt(10 + 20 + 20 + 30)</code> to randomly select one of the 80 numbers. Then determine which area the number is distributed in. For example, if random to 37, 37 is distributed in the C region, then select inboker C. 15 is in the B area, 54 is in the D area.</p><h4 id=random-load-balancing-source-code>Random load balancing Source code</h4><p [...]
+
+ private final Random random = new Random();
+
+ protected <T> Invoker<T> doSelect(List<Invoker<T>> invokers, URL url, Invocation invocation) {
+ int length = invokers.size(); // total invoker
+ int totalWeight = 0; // Sum of invokers' weights
+
+ // Determine if all the invokers have the same weight
+ // If the weights are the same, it is simple to generate an index directly from Random.
+ boolean sameWeight = true;
+ for (int i = 0; i < length; i++) {
+ int weight = getWeight(invokers.get(i), invocation);
+ totalWeight += weight; // Sum
+ if (sameWeight && i > 0 && weight != getWeight(invokers.get(i - 1), invocation)) {
+ sameWeight = false;
+ }
+ }
+
+ if (totalWeight > 0 && !sameWeight) {
+ // If not all of the invoker weights are the same, load balancer will randomly choose invoker based on its weight. The greater the weight, the greater the probability of being selected
+ int offset = random.nextInt(totalWeight);
+ for (int i = 0; i < length; i++) {
+ offset -= getWeight(invokers.get(i), invocation);
+ if (offset < 0) {
+ return invokers.get(i);
+ }
+ }
+ }
+ // If all invokers have the same weight
+ return invokers.get(random.nextInt(length));
+ }
+}
+</code></pre></div><h3 id=2-round-robin-load-balancing>2. Round Robin Load Balancing</h3><p>Round Robin Load Balancing, is to call all Providers in turn. As with random load balancing strategies, Round Robin Load Balancing policies also has a weighting concept. The Round Robin Load Balancing algorithm allows RPC calls to be allocated exactly as we set. Whether it is a small or large number of calls. However, there are also some shortcomings in the Round Robin Load Balancing algorithm. Th [...]
+ // if there is only one minimum value then return directly
+ return invokers.get(leastIndexs[0]);
+}
+</code></pre></div><p>If there are multiple Invokers with the minimum active number, plus the weights are not equal and the total weight is greater than 0, then generate a random weight ranging from 0 to totalWeight. Finally, the Invoker is selected based on the randomly generated weights.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>if (! sameWeight && totalWeig [...]
+ // if the weights are not equal and the toatl weight is greater than 0 then choose randomly according to total weight
+
+ int offsetWeight = random.nextInt(totalWeight);
+
+ // and determine which segment the random value falls on.
+
+ for (int i = 0; i < leastCount; i++) {
+ int leastIndex = leastIndexs[i];
+ offsetWeight -= getWeight(invokers.get(leastIndex), invocation);
+ if (offsetWeight <= 0)
+ return invokers.get(leastIndex);
+ }
+}
+</code></pre></div><h3 id=4-consistent-hash-algorithm>4. Consistent Hash Algorithm</h3><p>Use consistent hash algorithm to ensure that requests with same parameters are always sent to the same Provider. When a Provider crashes, requests originally sent to the Provider is spread evenly to other Providers based on the virtual node without causing drastic changes. The algorithm can be seen at: <a href=http://en.wikipedia.org/wiki/Consistent_hashing>http://en.wikipedia.org/wiki/Consistent_ha [...]
+</code></pre></div><p>By default, 160 virtual nodes are used. Configure if you would like to modify it:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><dubbo:parameter key="hash.nodes" value="320" />
+</code></pre></div><p>Consistent hash algorithms can be used in conjunction with caching mechanisms. For example, there is a service getUserInfo(String userId). After the hash algorithm is set, the same userId call is sent to the same Provider. This Provider can cache user data in memory, reducing the number of accesses to the database or distributed cache. If this part of the data is allowed to be inconsistent for some time, this approach can be considered. The number of dependencies an [...]
+</code></pre></div><p>All methods of the service use roundrobin load balancing.</p><h3 id=client-side-service-level>Client Side Service Level</h3><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><dubbo:reference interface="..." loadbalance="roundrobin" />
+</code></pre></div><p>All methods of the service use roundrobin load balancing.</p><h3 id=server-side-method-level>Server Side Method Level</h3><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><dubbo:service interface="...">
+ <dubbo:method name="hello" loadbalance="roundrobin"/>
+</dubbo:service>
+</code></pre></div><p>Only the hello method of the service uses roundrobin load balancing.</p><h3 id=client-side-method-level>Client Side Method Level</h3><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><dubbo:reference interface="...">
+ <dubbo:method name="hello" loadbalance="roundrobin"/>
+</dubbo:reference>
+</code></pre></div><p>Only the hello method of the service uses roundrobin load balancing.</p><p>Similar to other Dubbo configurations, multiple configurations are covered:</p><ol><li>The method level takes precedence, the interface level is next, and the global configuration comes last.</li><li>If the level is the same, the Consumer is given priority and the Provider is next</li></ol><p>Therefore, the priority of the above four configurations is:</p><ol><li>Client side method level conf [...]
+public interface LoadBalance {
+ @Adaptive("loadbalance")
+ <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) throws RpcException;
+}
+</code></pre></div><p>This is the interface of the SPI. The parameters of the select method are as follows:</p><ul><li>invokers: A list of all service Providers.</li><li>url: Some configuration information, such as interface name, check or not, serialization.</li><li>invocation: Information called by the RPC, including the method name, method parameter type, and method parameters. Here is a LoadBalance implemented by us. The implementation is very simple - Choose the first Invoker:</li>< [...]
+public class DemoLoadBalance implements LoadBalance {
+ @Override
+ public <T> Invoker<T> <span style=color:#719e07>select</span>(List<Invoker<T<span style=color:#719e07>>></span> invokers, URL url, Invocation invocation) throws RpcException {
+ System.out.<span style=color:#b58900>println</span>(<span style=color:#2aa198>"[DemoLoadBalance]Select the first invoker..."</span>);
+ <span style=color:#719e07>return</span> invokers.<span style=color:#268bd2>get</span>(<span style=color:#2aa198>0</span>);
+ }
+}
+</code></pre></div><ol start=2><li>Add a resource file</li></ol><p>Add a file:
+<code>src/main/resource/META-INF/dubbo/com.alibaba.dubbo.rpc.cluster.LoadBalance</code>
+This is a simple text file. The file contents are as follows:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>demo=my=com.demo.dubbo.DemoLoadBalance
+</code></pre></div><ol start=3><li>Configure to use custom LoadBalance</li></ol><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><dubbo:reference id="helloService" interface="com.demo.dubbo.api.IHelloService" loadbalance="demo" />
+</code></pre></div><p>Configure <code><loadbalance="demo"></code> in <code>dubbo:reference</code> at the Consumer side.</p><p>After 3 steps above, we wrote a custom LoadBalance and told Dubbo to use it. Start Dubbo and we can see that Dubbo has used a custom DemoLoadBalance.</p><ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5"><li><a href=/blog/2018/08/07/use-annotations-in-dubbo/ class="btn btn-primary"><span class=mr-1>←</span> Previous</a></li><a [...]
\ No newline at end of file
diff --git a/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/index.html b/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/index.html
new file mode 100644
index 00000000000..87140f3ba9f
--- /dev/null
+++ b/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/index.html
@@ -0,0 +1,120 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-basic-usage-dubbo-consumer-configuration.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+th [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=%20Dubbo%20Basic%20Usage%20-%20Dubbo%20Consumer%20Configuration" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#dubbo-consumer-configuration>Dubbo Consumer Configuration</a><ul><li><a href=#consumer-configuration-detailed>Consumer Configuration Detailed</a></li><li><a href=#consumer-calling-remote-service>Consumer Calling Remote Service</a></li></ul></li></ul></nav></div><main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role= [...]
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ Xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ Xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
+ Xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema /dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
+ <dubbo:application name="hello-world-app" />
+ <dubbo:registry address="multicast://224.5.6.7:1234" />
+ <dubbo:protocol name="dubbo" port="20880" />
+ <dubbo:reference id="demoServiceRemote" interface="com.alibaba.dubbo.demo.DemoService" />
+</beans>
+</code></pre></div><blockquote><p>For the supported configuration tags and corresponding configuration items, refer to the usage in the provider.</p></blockquote><blockquote><p>Next, focus on the configuration of <dubbo:reference/>.</p></blockquote><ul><li><dubbo:reference/> List of main attributes supported:</li></ul><table><thead><tr><th>Property Name</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td>service reference id, as java bean id, requires unique</td></tr><tr [...]
+Public class AnnotationConsumeService {
+
+ @com.alibaba.dubbo.config.annotation.Reference
+ Public AnnotateService annotateService;
+
+ // ...
+
+}
+
+</code></pre></div><p>The configuration in this way is the same as the previous configuration in xml.</p><blockquote><p>To specify the way dubbo scans the path, refer to the implementation of the provider in the previous section.</p></blockquote><h4 id=api-direct-trigger>api direct trigger</h4><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>Import com.alibaba.dubbo.rpc.config. [...]
+Import com.alibaba.dubbo.rpc.config.RegistryConfig;
+Import com.alibaba.dubbo.rpc.config.ConsumerConfig;
+Import com.alibaba.dubbo.rpc.config.ReferenceConfig;
+Import com.xxx.XxxService;
+// current application configuration
+
+ApplicationConfig application = new ApplicationConfig();
+application.setName("yyy");
+// Connect to the registry configuration
+RegistryConfig registry = new RegistryConfig();
+registry.setAddress("10.20.130.230:9090");
+registry.setUsername("aaa");
+registry.setPassword("bbb");
+
+// Note: ReferenceConfig is a heavy object that internally encapsulates the connection to the registry and the connection to the service provider.
+// reference remote service
+ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // This instance is heavy, encapsulates the connection to the registry and the connection to the provider, please cache it yourself, otherwise it may cause memory and connection leaks.
+
+reference.setApplication(application);
+reference.setRegistry(registry); // Multiple registries can use setRegistries()
+reference.setInterface(XxxService.class);
+reference.setVersion("1.0.0");
+
+// Use xxxService like local beans
+XxxService xxxService = reference.get();
+</code></pre></div><h6 id=methodspecial-settings>methodSpecial settings</h6><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>
+// Method level configuration
+List<MethodConfig> methods = new ArrayList<MethodConfig>();
+MethodConfig method = new MethodConfig();
+method.setName("createXxx");
+method.setTimeout(10000);
+method.setRetries(0);
+Methods.add(method);
+// reference remote service
+ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // This instance is heavy, encapsulates the connection to the registry and the connection to the provider, please cache it yourself, otherwise it may cause memory and connection leaks.
+...
+reference.setMethods(methods); // Set method level configuration
+</code></pre></div><h3 id=consumer-calling-remote-service>Consumer Calling Remote Service</h3><p>The above chapters are more from a configuration point of view, and then through a complete example, explain the complete use of dubbo consumer.</p><p>There is only one service UserReadService in this example, there is a method getUserById. Need to call a remote service through Dubbo. The specific steps are as follows:</p><ol><li>Create a project
+If there is already a project, you can ignore it. Create a spring boot project that can be created at <a href=https://start.spring.io/>https://start.spring.io/</a>.
+The provider of the service has been defined in the provider section.</li><li>Call the service</li></ol><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>@RestController
+Public class UserTestController{
+ @Autowired
+ Private UserReadService userReadService;
+ @RequestMapping("/user/getById")
+ Public String getUserById(Long id){
+ // just test
+ Return userReadService.getUserById(id).toString();
+ }
+}
+</code></pre></div><p>3.Dubbo configuration</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ Xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ Xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
+ Xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema /dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
+ <dubbo:application name="hello-world-app" />
+ <dubbo:registry address="multicast://224.5.6.7:1234" />
+ <dubbo:protocol name="dubbo" port="20880" />
+ <dubbo:reference id="userReadService" interface="com.package.UserReadService"check="false" />
+</beans>
+</code></pre></div><p>Other ways of configuring Dubbo can refer to the relevant configuration in the previous section, or use the integrated dubbo spring boot starter mode.</p><ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5"><li><a href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/ class="btn btn-primary"><span class=mr-1>←</span> Previous</a></li><a href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/ c [...]
\ No newline at end of file
diff --git a/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/index.html b/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/index.html
new file mode 100644
index 00000000000..b1b3f48e03e
--- /dev/null
+++ b/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/index.html
@@ -0,0 +1,157 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-basic-usage-dubbo-provider-configuration.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+th [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Dubbo%20Basic%20Usage%20--%20Dubbo%20Provider%20Configuration" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#dubbo-provider-configuration>Dubbo Provider Configuration</a><ul><li><a href=#provider-configuration-in-detail>Provider Configuration in Detail</a></li><li><a href=#provider-interface-and-implement>Provider Interface and Implement</a></li></ul></li></ul></nav></div><main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" r [...]
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
+ <dubbo:application name="hello-world-app" />
+ <dubbo:registry address="multicast://224.5.6.7:1234" />
+ <dubbo:protocol name="dubbo" port="20880" />
+ <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoServiceLocal" />
+ <dubbo:reference id="demoServiceRemote" interface="com.alibaba.dubbo.demo.DemoService" />
+</beans>
+</code></pre></div><p>In the example above,note the way to write dubbo schema:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
+ xmlns="http://www.springframework.org/schema/beans"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
+ http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
+</code></pre></div><h6 id=supported-configuration-tags>Supported Configuration Tags</h6><table><thead><tr><th>Tags</th><th>Application</th><th style=text-align:left>Describe</th></tr></thead><tbody><tr><td><dubbo:service/></td><td>Service Configuration</td><td style=text-align:left>Expose a service, define the meta information of the service. One service can use multiple protocols to expose and can be registered to multiple registry centers</td></tr><tr><td><dubbo:reference/></td>< [...]
+dubbo.application.name=dubbodemo-provider
+# registry center address
+dubbo.registry.address=zookeeper://localhost:2181
+# Example of broadcasting registry center
+#dubbo.registry.address=multicast://224.5.6.7:1234
+# address for calling protocol
+dubbo.protocol.name=dubbo
+dubbo.protocol.port=28080
+</code></pre></div><h6 id=mapping-rule>Mapping Rule</h6><p>Split the tag name and properties in XML configuration with dots, and multiple properties should be split into multiple lines</p><ul><li>For example: dubbo.application.name=foo equivalents to <dubbo:application name=“foo” /></li><li>For example: dubbo.registry.address=10.20.153.10:9090 equivalents to <dubbo:registry address=“10.20.153.10:9090” /></li></ul><p>If there are multiple configurations havin [...]
+
+@Service(timeout = 5000)
+public class AnnotateServiceImpl implements AnnotateService {
+ // ...
+}
+</code></pre></div><h6 id=javaconfig-configuration-public-module>Javaconfig Configuration Public Module</h6><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>@Configuration
+public class DubboConfiguration {
+
+ @Bean
+ public ApplicationConfig applicationConfig() {
+ ApplicationConfig applicationConfig = new ApplicationConfig();
+ applicationConfig.setName("provider-test");
+ return applicationConfig;
+ }
+
+ @Bean
+ public RegistryConfig registryConfig() {
+ RegistryConfig registryConfig = new RegistryConfig();
+ registryConfig.setAddress("zookeeper://127.0.0.1:2181");
+ registryConfig.setClient("curator");
+ return registryConfig;
+ }
+}
+</code></pre></div><p>The result of configuration using this method is the same as that of using xml.</p><h6 id=specify-the-dubbo-scan-path>Specify the Dubbo Scan Path</h6><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>@SpringBootApplication
+@DubboComponentScan(basePackages = "com.alibaba.dubbo.test.service.impl")
+public class ProviderTestApp {
+ // ...
+}
+</code></pre></div><p>or use the spring bean xml configuration:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><dubbo:annotation package="com.chanshuyi.service.impl" />
+</code></pre></div><h4 id=api-trigger-directly>API Trigger Directly</h4><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>import com.alibaba.dubbo.rpc.config.ApplicationConfig;
+import com.alibaba.dubbo.rpc.config.RegistryConfig;
+import com.alibaba.dubbo.rpc.config.ProviderConfig;
+import com.alibaba.dubbo.rpc.config.ServiceConfig;
+import com.xxx.XxxService;
+import com.xxx.XxxServiceImpl;
+
+// Service implementation
+XxxService xxxService = new XxxServiceImpl();
+
+// current application configuration
+ApplicationConfig application = new ApplicationConfig();
+application.setName("xxx");
+
+// connect to registry center configuration
+RegistryConfig registry = new RegistryConfig();
+registry.setAddress("10.20.130.230:9090");
+registry.setUsername("aaa");
+registry.setPassword("bbb");
+
+// service provider's protocol configuration
+ProtocolConfig protocol = new ProtocolConfig();
+protocol.setName("dubbo");
+protocol.setPort(12345);
+protocol.setThreads(200);
+
+// Note: ServiceConfig is a heavy object, which encapsulated the connection with registry center internally, and open the service port
+
+// Service provider exposes service configuration
+ServiceConfig<XxxService> service = new ServiceConfig<XxxService>(); // This instance is very heavy, which encapsulated the connection with registry center, please cache it by yourself, it might cause memory and connection leakage otherwise.
+service.setApplication(application);
+service.setRegistry(registry); // multiple registry centers can use setRegistries()
+service.setProtocol(protocol); // multiple protocols can use setProtocols()
+service.setInterface(XxxService.class);
+service.setRef(xxxService);
+service.setVersion("1.0.0");
+
+// exposure and register service
+service.export();
+</code></pre></div><p>Generally, this method is not recommended in spring applications. The reason can be checked by reading the source code on github, which would not be explained here.</p><h3 id=provider-interface-and-implement>Provider Interface and Implement</h3><p>The above chapters are described mainly from a configuration perspective, and lets explain the complete use of Dubbo provider by going through a complete example.</p><p>There is only one service UserReadService, and one me [...]
+This service need to be exposed to a remote service by Dubbo. Detail steps are shown below:</p><ol><li>Create Project
+Skip this step if there is already a project. Create a Spring Boot project, which can be created through <a href=https://start.spring.io/>https://start.spring.io/</a>.</li><li>Define Interface
+Define interface: UserReadService</li></ol><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>public interface UserReadService{
+ public User getUserById(Long userId);
+}
+</code></pre></div><p>Generally, this interface should be placed in an independent JAR file as a client package.
+Generally, the other services need to refer this client package if they want to consume this service(except for generalized call).
+3. Implement Interface
+Implement UserReadService, and deploy current implementation in the Provider’s application.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>public UserReadServiceImpl implements UserReadService{
+ public User getUserById(Long userId){
+ return xxx;
+ }
+}
+</code></pre></div><ol start=4><li>Dubbo Configuration</li></ol><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
+ <dubbo:application name="hello-world-app" />
+ <dubbo:registry address="multicast://224.5.6.7:1234" />
+ <dubbo:protocol name="dubbo" port="20880" />
+ <bean id="userReadService" class="com.package.UserReadServiceImpl"/>
+ <dubbo:service interface="com.package.UserReadService" ref="userReadService" />
+</beans>
+</code></pre></div><p>For the other modes of Dubbo configuration, please refer to the related configurations in the previous chapter, or use the integrated Dubbo Spring Boot starter method.</p><ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5"><li><a href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/ class="btn btn-primary"><span class=mr-1>←</span> Previous</a></li><a href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous [...]
\ No newline at end of file
diff --git a/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/index.html b/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/index.html
new file mode 100644
index 00000000000..aa386baa8bb
--- /dev/null
+++ b/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/index.html
@@ -0,0 +1,126 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-invoke.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+th [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Dubbo:%20Several%20ways%20about%20synchronous/asynchronous%20invoke" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><ul><li><a href=#synchronous-invoke>Synchronous invoke</a></li><li><a href=#asynchronous-invoke>Asynchronous invoke</a></li><li><a href=#parameters-callback>Parameters callback</a></li><li><a href=#event-notification>Event notification</a></li></ul></li></ul></nav></div><main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role= [...]
+ String <span style=color:#268bd2>goodbye</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h5 id=consumer-configuration>Consumer configuration</h5><div class=highlight><pre 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=color:#268bd2><dubbo:reference</span> id=<span style=color:#2aa198>"asyncService"</span> interface=<span style=color:#2aa198>"com.alibaba.dubbo.samples.async.api.AsyncService"</span><span style=color:#268bd2>></span>
+ <span style=color:#268bd2><dubbo:method</span> name=<span style=color:#2aa198>"goodbye"</span> async=<span style=color:#2aa198>"true"</span><span style=color:#268bd2>/></span>
+<span style=color:#268bd2></dubbo:reference></span>
+</code></pre></div><p>Notice that if we need an asynchronous revoke method, we must use <code><dubbo:method/></code> label to describe it.</p><h5 id=consumer-triggers-invocation>Consumer triggers invocation</h5><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java>AsyncService service <span style=color:#719e07>=</span> <span style=color:#719e07>...;</span>
+String result <span style=color:#719e07>=</span> service<span style=color:#719e07>.</span>goodbye<span style=color:#719e07>(</span><span style=color:#2aa198>"samples"</span><span style=color:#719e07>);</span><span style=color:#586e75>// returns NULL and DO NOT use!
+</span><span style=color:#586e75></span>Future<span style=color:#719e07><</span>String<span style=color:#719e07>></span> future <span style=color:#719e07>=</span> RpcContext<span style=color:#719e07>.</span>getContext<span style=color:#719e07>().</span>getFuture<span style=color:#719e07>();</span>
+<span style=color:#719e07>...</span> <span style=color:#586e75>// other service thread logic
+</span><span style=color:#586e75></span>result <span style=color:#719e07>=</span> future<span style=color:#719e07>.</span>get<span style=color:#719e07>();</span> <span style=color:#586e75>// could use get(timeout, unit) to configure timeout, when it needs to get the asynchronous result
+</span></code></pre></div><p>After Dubbo Consumer triggers invocation, it uses <code>RpcContext.getContext().getFuture()</code> to get the relative <code>Future</code> object, and then it could start executing other tasks. Anytime when we need results, <code>future.get(timeout)</code> is supposed to be called.</p><p>Under several special conditions, it could be set whether to wait for sending the request, to accelerate the return of invocation:</p><ul><li><code>sent="true"</code> Waiting [...]
+</code></pre></div><p>If you only want to be asynchronous, then omit the result thoroughly, <code>return="false"</code> could be set to reduce the creation and management cost of Future:</p><div class=highlight><pre 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=color:#268bd2><dubbo:method</span> name=<span style=color:#2aa198>"goodbye"</span> async=<span style=color:#2aa198>"true" [...]
+</code></pre></div><p>At this time,<code>RpcContext.getContext().getFuture()</code> will return <code>null</code>。</p><p>The complete sequence diagram of asynchronous invoke is as follow:</p><p><img src=/imgs/blog/dubbo-async.svg alt="Asynchronous invoke"></p><p>The sample locates at:https://github.com/dubbo/dubbo-samples/tree/master/dubbo-samples-async</p><h3 id=parameters-callback>Parameters callback</h3><p>The parameter Callback is somewhat similar to the local Callback mechanism, but [...]
+ <span style=color:#dc322f>void</span> <span style=color:#268bd2>addListener</span><span style=color:#719e07>(</span>String key<span style=color:#719e07>,</span> CallbackListener listener<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>CallbackListener</span> <span style=color:#719e07>{</span>
+ <span style=color:#dc322f>void</span> <span style=color:#268bd2>changed</span><span style=color:#719e07>(</span>String msg<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h5 id=service-implementation-of-provider>Service implementation of Provider</h5><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>CallbackServiceImpl</span> <span style=color:#268bd2>implements</span> CallbackService <span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>private</span> <span style=color:#268bd2>final</span> Map<span style=color:#719e07><</span>String<span style=color:#719e07>,</span> CallbackListener<span style=color:#719e07>></span> listeners <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ConcurrentHashMap<span style=color:#719e07><</span>String<span style=color:#719e07>,</span> CallbackListener<span style=color:#719e07>>();</span>
+
+ <span style=color:#268bd2>public</span> <span style=color:#268bd2>CallbackServiceImpl</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ Thread t <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> Thread<span style=color:#719e07>(</span><span style=color:#719e07>new</span> Runnable<span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>run</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>while</span> <span style=color:#719e07>(</span><span style=color:#cb4b16>true</span><span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>for</span> <span style=color:#719e07>(</span>Map<span style=color:#719e07>.</span>Entry<span style=color:#719e07><</span>String<span style=color:#719e07>,</span> CallbackListener<span style=color:#719e07>></span> entry <span style=color:#719e07>:</span> listeners<span style=color:#719e07>.</span>entrySet<span style=color:#719e07>())</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+ entry<span style=color:#719e07>.</span>getValue<span style=color:#719e07>().</span>changed<span style=color:#719e07>(</span>getChanged<span style=color:#719e07>(</span>entry<span style=color:#719e07>.</span>getKey<span style=color:#719e07>()));</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>
+ listeners<span style=color:#719e07>.</span>remove<span style=color:#719e07>(</span>entry<span style=color:#719e07>.</span>getKey<span style=color:#719e07>());</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ Thread<span style=color:#719e07>.</span>sleep<span style=color:#719e07>(</span>5000<span style=color:#719e07>);</span> <span style=color:#586e75>// timely trigger change event
+</span><span style=color:#586e75></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>
+ t<span style=color:#719e07>.</span>printStackTrace<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>});</span>
+ t<span style=color:#719e07>.</span>setDaemon<span style=color:#719e07>(</span><span style=color:#cb4b16>true</span><span style=color:#719e07>);</span>
+ t<span style=color:#719e07>.</span>start<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>addListener</span><span style=color:#719e07>(</span>String key<span style=color:#719e07>,</span> CallbackListener listener<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ listeners<span style=color:#719e07>.</span>put<span style=color:#719e07>(</span>key<span style=color:#719e07>,</span> listener<span style=color:#719e07>);</span>
+ listener<span style=color:#719e07>.</span>changed<span style=color:#719e07>(</span>getChanged<span style=color:#719e07>(</span>key<span style=color:#719e07>));</span> <span style=color:#586e75>// send notification for change
+</span><span style=color:#586e75></span> <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>private</span> String <span style=color:#268bd2>getChanged</span><span style=color:#719e07>(</span>String key<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"Changed: "</span> <span style=color:#719e07>+</span> <span style=color:#719e07>new</span> SimpleDateFormat<span style=color:#719e07>(</span><span style=color:#2aa198>"yyyy-MM-dd HH:mm:ss"</span><span style=color:#719e07>).</span>format<span style=color:#719e07>(</span><span style=color:#719e07>new</span> Date<span style=color:#719e07>());</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h5 id=service-exposure-of-provider>Service exposure of Provider</h5><div class=highlight><pre 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=color:#268bd2><bean</span> id=<span style=color:#2aa198>"callbackService"</span> class=<span style=color:#2aa198>"com.alibaba.dubbo.samples.callback.impl.CallbackServiceImpl"</span><span style=color:#268bd2>/></span>
+
+<span style=color:#268bd2><dubbo:service</span> interface=<span style=color:#2aa198>"com.alibaba.dubbo.samples.callback.api.CallbackService"</span> ref=<span style=color:#2aa198>"callbackService"</span> connections=<span style=color:#2aa198>"1"</span> callbacks=<span style=color:#2aa198>"1000"</span><span style=color:#268bd2>></span>
+ <span style=color:#268bd2><dubbo:method</span> name=<span style=color:#2aa198>"addListener"</span><span style=color:#268bd2>></span>
+ <span style=color:#268bd2><dubbo:argument</span> index=<span style=color:#2aa198>"1"</span> callback=<span style=color:#2aa198>"true"</span><span style=color:#268bd2>/></span>
+ <span style=color:#586e75><!--<dubbo:argument type="com.demo.CallbackListener" callback="true" />--></span>
+ <span style=color:#268bd2></dubbo:method></span>
+<span style=color:#268bd2></dubbo:service></span>
+</code></pre></div><p>Here,Provider needs to declare which parameter is the Callback parameter in the method.</p><h5 id=callback-interface-implementation-of-consumer>Callback interface implementation of Consumer</h5><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java>CallbackService callbackService <span style=color:#719e07>=</span> <span style=color:#719e07>...;</span>
+callbackService<span style=color:#719e07>.</span>addListener<span style=color:#719e07>(</span><span style=color:#2aa198>"foo.bar"</span><span style=color:#719e07>,</span> <span style=color:#719e07>new</span> CallbackListener<span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>changed</span><span style=color:#719e07>(</span>String msg<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"callback1:"</span> <span style=color:#719e07>+</span> msg<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>});</span>
+</code></pre></div><p>The implementation class of the Callback interface is on the Consumer, which automatically exports a Callback service when the method is called. Thus during Provider processing the call, if the parameter is determined as Callback, it will generate a proxy. Therefore, when the service implementation class calling the Callback method, it will be passed to the Consumer to execute the code.</p><p>The sample code above is located at:https://github.com/dubbo/dubbo-samples [...]
+
+<span style=color:#268bd2><dubbo:reference</span> id=<span style=color:#2aa198>"demoService"</span> check=<span style=color:#2aa198>"false"</span> interface=<span style=color:#2aa198>"com.alibaba.dubbo.samples.notify.api.DemoService"</span> version=<span style=color:#2aa198>"1.0.0"</span> group=<span style=color:#2aa198>"cn"</span><span style=color:#268bd2>></span>
+ <span style=color:#268bd2><dubbo:method</span> name=<span style=color:#2aa198>"sayHello"</span> onreturn=<span style=color:#2aa198>"demoCallback.onreturn"</span> onthrow=<span style=color:#2aa198>"demoCallback.onthrow"</span><span style=color:#268bd2>/></span>
+<span style=color:#268bd2></dubbo:reference></span>
+</code></pre></div><p>Among them,the code of NotifyImpl is as follow:</p><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>NotifyImpl</span> <span style=color:#268bd2>implements</span> Notify<span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>public</span> Map<span style=color:#719e07><</span>Integer<span style=color:#719e07>,</span> String<span style=color:#719e07>></span> ret <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> HashMap<span style=color:#719e07><</span>Integer<span style=color:#719e07>,</span> String<span style=color:#719e07>>();</span>
+
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>onreturn</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> id<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ ret<span style=color:#719e07>.</span>put<span style=color:#719e07>(</span>id<span style=color:#719e07>,</span> name<span style=color:#719e07>);</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"onreturn: "</span> <span style=color:#719e07>+</span> name<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>onthrow</span><span style=color:#719e07>(</span>Throwable ex<span style=color:#719e07>,</span> String name<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> id<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"onthrow: "</span> <span style=color:#719e07>+</span> name<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>Here we address that the parameter rules of three methods in the custom Notify interface are as follows:</p><ul><li><code>oninvoke</code> method’s parameters are the same as the calling method parameters;</li><li><code>onreturn</code> method’s first parameter is the returned value of calling method,and the others are the same as the calling method;</li><li><code>onthrow</code> method’s first parameter is an invoked exception,and the others are the [...]
\ No newline at end of file
diff --git a/blog/2018/08/14/generic-invoke-of-dubbo/index.html b/blog/2018/08/14/generic-invoke-of-dubbo/index.html
new file mode 100644
index 00000000000..d04757aefd1
--- /dev/null
+++ b/blog/2018/08/14/generic-invoke-of-dubbo/index.html
@@ -0,0 +1,130 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-generic-invoke.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+secti [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Generic%20invoke%20of%20Dubbo" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#generic-invoke-through-spring-xml-configuration>Generic invoke through Spring XML configuration</a></li><li><a href=#generic-invoke-through-api-programming>Generic invoke through API programming</a></li><li><a href=#the-case-where-parameters-or-return-values-are-pojos>The case where parameters or return values are POJOs< [...]
+instead of depending the interface jar package, the service call is initiated directly through the GenericService interface, and all POJOs in the parameters and return values are represented by a <code>Map</code>.
+Generic invoke does not require attention on the server and can be exposed as normal services.</p><p>Next, let’s take a look at how the consumer uses generic invoke for service call.</p><h2 id=generic-invoke-through-spring-xml-configuration>Generic invoke through Spring XML configuration</h2><p>Declare <code>generic="true"</code> in Spring configuration, such as</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code [...]
+</code></pre></div><p>Where you need to use it, you can call it by forcing a type cast to GenericService.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java>GenericService userService <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>GenericService<span style=color:#719e07>)</span> context<span style=color:#719e07>.</span>getBean<span style=color:#719e07>(</span><sp [...]
+<span style=color:#586e75>// primary param and return value
+</span><span style=color:#586e75></span>String name <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>String<span style=color:#719e07>)</span> userService<span style=color:#719e07>.</span>$invoke<span style=color:#719e07>(</span><span style=color:#2aa198>"delete"</span><span style=color:#719e07>,</span> <span style=color:#719e07>new</span> String<span style=color:#719e07>[]{</span><span style=color:#dc322f>int</span><span style=color:#719e07>.</span>class<span [...]
+System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span>name<span style=color:#719e07>);</span>
+</code></pre></div><p>Among them,</p><ol><li><p>The interface GenericService has only one method, named $invoke, which takes three arguments, a method name, an array of method parameter types, and an array of parameter values.</p></li><li><p>For arrays of method parameter types</p><p>i. If it is a basic type, such as int or long, use <code>int.class.getName()</code> to get its type;</p><p>ii. If it is a basic type array, such as int[], use <code>int[].class.getName()</code>;</p><p>iii. I [...]
+application<span style=color:#719e07>.</span>setName<span style=color:#719e07>(</span><span style=color:#2aa198>"api-generic-consumer"</span><span style=color:#719e07>);</span>
+
+RegistryConfig registry <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> RegistryConfig<span style=color:#719e07>();</span>
+registry<span style=color:#719e07>.</span>setAddress<span style=color:#719e07>(</span><span style=color:#2aa198>"zookeeper://127.0.0.1:2181"</span><span style=color:#719e07>);</span>
+
+application<span style=color:#719e07>.</span>setRegistry<span style=color:#719e07>(</span>registry<span style=color:#719e07>);</span>
+
+ReferenceConfig<span style=color:#719e07><</span>GenericService<span style=color:#719e07>></span> reference <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ReferenceConfig<span style=color:#719e07><</span>GenericService<span style=color:#719e07>>();</span>
+<span style=color:#586e75>// weak type interface name
+</span><span style=color:#586e75></span>reference<span style=color:#719e07>.</span>setInterface<span style=color:#719e07>(</span><span style=color:#2aa198>"com.alibaba.dubbo.samples.generic.api.IUserService"</span><span style=color:#719e07>);</span>
+<span style=color:#586e75>// declared as a generalized interface
+</span><span style=color:#586e75></span>reference<span style=color:#719e07>.</span>setGeneric<span style=color:#719e07>(</span><span style=color:#cb4b16>true</span><span style=color:#719e07>);</span>
+
+reference<span style=color:#719e07>.</span>setApplication<span style=color:#719e07>(</span>application<span style=color:#719e07>);</span>
+
+<span style=color:#586e75>// replace all interface references with com.alibaba.dubbo.rpc.service.GenericService
+</span><span style=color:#586e75></span>GenericService genericService <span style=color:#719e07>=</span> reference<span style=color:#719e07>.</span>get<span style=color:#719e07>();</span>
+
+String name <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>String<span style=color:#719e07>)</span> genericService<span style=color:#719e07>.</span>$invoke<span style=color:#719e07>(</span><span style=color:#2aa198>"delete"</span><span style=color:#719e07>,</span> <span style=color:#719e07>new</span> String<span style=color:#719e07>[]{</span><span style=color:#dc322f>int</span><span style=color:#719e07>.</span>class<span style=color:#719e07>.</span>getName<s [...]
+System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span>name<span style=color:#719e07>);</span>
+</code></pre></div><p>Through the API, you don’t need to configure the service in advance like XML. You can dynamically construct ReferenceConfig; the API is more common than XML.</p><h2 id=the-case-where-parameters-or-return-values-are-pojos>The case where parameters or return values are POJOs</h2><p>For example, the method signature is <code>User get(Params params)</code>, where <code>User</code> has two attributes, id and name, and <code>Params</code> has one attribute, query.</ [...]
+Map<span style=color:#719e07><</span>String<span style=color:#719e07>,</span> Object<span style=color:#719e07>></span> params <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> HashMap<span style=color:#719e07><</span>String<span style=color:#719e07>,</span> Object<span style=color:#719e07>>();</span>
+param<span style=color:#719e07>.</span>put<span style=color:#719e07>(</span><span style=color:#2aa198>"class"</span><span style=color:#719e07>,</span> <span style=color:#2aa198>"com.alibaba.dubbo.samples.generic.api.Params"</span><span style=color:#719e07>);</span>
+param<span style=color:#719e07>.</span>put<span style=color:#719e07>(</span><span style=color:#2aa198>"query"</span><span style=color:#719e07>,</span> <span style=color:#2aa198>"a=b"</span><span style=color:#719e07>);</span>
+Object user <span style=color:#719e07>=</span> userService<span style=color:#719e07>.</span>$invoke<span style=color:#719e07>(</span><span style=color:#2aa198>"get"</span><span style=color:#719e07>,</span> parameterTypes<span style=color:#719e07>,</span> <span style=color:#719e07>new</span> Object<span style=color:#719e07>[]{</span>param<span style=color:#719e07>});</span>
+System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"sample one result: "</span> <span style=color:#719e07>+</span> user<span style=color:#719e07>);</span>
+</code></pre></div><p>The output of the above code is:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>sample one result: {name=charles, id=1, class=com.alibaba.dubbo.samples.generic.api.User}
+</code></pre></div><p>Here, the Dubbo framework will automatically convert the return value from POJO to Map.
+It can be seen that the return value <code>user</code> is a HashMap, which stores three k/vs, name, id, and class.</p><h2 id=generic-interface-implementation>Generic interface implementation</h2><p>The implementation of the generic interface is mainly used when the server does not have an API interface. All POJOs in the parameters and return values are represented by Map, which is usually used for framework integration. For example, to implement a generic remote service Mock framework, a [...]
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> Object <span style=color:#268bd2>$invoke</span><span style=color:#719e07>(</span>String method<span style=color:#719e07>,</span> String<span style=color:#719e07>[]</span> parameterTypes<span style=color:#719e07>,</span> Object<span style=color:#719e07>[]</span> args<span style=color:#719e07>)</span> <span style=color:#268bd2>throws</span> GenericException <span style=color:#719e07>{</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>method<span style=color:#719e07>.</span>equals<span style=color:#719e07>(</span><span style=color:#2aa198>"hi"</span><span style=color:#719e07>))</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"hi, "</span> <span style=color:#719e07>+</span> args<span style=color:#719e07>[</span>0<span style=color:#719e07>];</span>
+ <span style=color:#719e07>}</span> <span style=color:#719e07>else</span> <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>method<span style=color:#719e07>.</span>equals<span style=color:#719e07>(</span><span style=color:#2aa198>"hello"</span><span style=color:#719e07>))</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"hello, "</span> <span style=color:#719e07>+</span> args<span style=color:#719e07>[</span>0<span style=color:#719e07>];</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"welcome"</span><span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h3 id=server-exposed-service>Server exposed service</h3><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java>ApplicationConfig application <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ApplicationConfig<span style=color:#719e07>();</span>
+application<span style=color:#719e07>.</span>setName<span style=color:#719e07>(</span><span style=color:#2aa198>"api-generic-provider"</span><span style=color:#719e07>);</span>
+
+RegistryConfig registry <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> RegistryConfig<span style=color:#719e07>();</span>
+registry<span style=color:#719e07>.</span>setAddress<span style=color:#719e07>(</span><span style=color:#2aa198>"zookeeper://127.0.0.1:2181"</span><span style=color:#719e07>);</span>
+
+application<span style=color:#719e07>.</span>setRegistry<span style=color:#719e07>(</span>registry<span style=color:#719e07>);</span>
+
+GenericService genericService <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> GenericServiceImpl<span style=color:#719e07>();</span>
+
+ServiceConfig<span style=color:#719e07><</span>GenericService<span style=color:#719e07>></span> service <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ServiceConfig<span style=color:#719e07><</span>GenericService<span style=color:#719e07>>();</span>
+service<span style=color:#719e07>.</span>setApplication<span style=color:#719e07>(</span>application<span style=color:#719e07>);</span>
+service<span style=color:#719e07>.</span>setInterface<span style=color:#719e07>(</span><span style=color:#2aa198>"com.alibaba.dubbo.samples.generic.api.HelloService"</span><span style=color:#719e07>);</span>
+service<span style=color:#719e07>.</span>setRef<span style=color:#719e07>(</span>genericService<span style=color:#719e07>);</span>
+service<span style=color:#719e07>.</span>export<span style=color:#719e07>();</span>
+
+ServiceConfig<span style=color:#719e07><</span>GenericService<span style=color:#719e07>></span> service2 <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ServiceConfig<span style=color:#719e07><</span>GenericService<span style=color:#719e07>>();</span>
+service2<span style=color:#719e07>.</span>setApplication<span style=color:#719e07>(</span>application<span style=color:#719e07>);</span>
+service2<span style=color:#719e07>.</span>setInterface<span style=color:#719e07>(</span><span style=color:#2aa198>"com.alibaba.dubbo.samples.generic.api.HiService"</span><span style=color:#719e07>);</span>
+service2<span style=color:#719e07>.</span>setRef<span style=color:#719e07>(</span>genericService<span style=color:#719e07>);</span>
+service2<span style=color:#719e07>.</span>export<span style=color:#719e07>();</span>
+</code></pre></div><p>Similarly, you can expose the service using XML configuration; in this case, the server does not depend on the two interfaces HiService and HelloService.</p><h3 id=service-invoke-on-the-consumer>Service invoke on the consumer</h3><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java>ApplicationConfig application <span style=color:#719e07>=</span> <span style=color:#719 [...]
+application<span style=color:#719e07>.</span>setName<span style=color:#719e07>(</span><span style=color:#2aa198>"api-generic-consumer"</span><span style=color:#719e07>);</span>
+
+RegistryConfig registry <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> RegistryConfig<span style=color:#719e07>();</span>
+registry<span style=color:#719e07>.</span>setAddress<span style=color:#719e07>(</span><span style=color:#2aa198>"zookeeper://127.0.0.1:2181"</span><span style=color:#719e07>);</span>
+
+application<span style=color:#719e07>.</span>setRegistry<span style=color:#719e07>(</span>registry<span style=color:#719e07>);</span>
+
+ReferenceConfig<span style=color:#719e07><</span>GenericService<span style=color:#719e07>></span> reference <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ReferenceConfig<span style=color:#719e07><</span>GenericService<span style=color:#719e07>>();</span>
+<span style=color:#586e75>// weak type interface name
+</span><span style=color:#586e75></span>reference<span style=color:#719e07>.</span>setInterface<span style=color:#719e07>(</span>HiService<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+reference<span style=color:#719e07>.</span>setApplication<span style=color:#719e07>(</span>application<span style=color:#719e07>);</span>
+
+HiService hiService <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>HiService<span style=color:#719e07>)</span> reference<span style=color:#719e07>.</span>get<span style=color:#719e07>();</span>
+System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span>hiService<span style=color:#719e07>.</span>hi<span style=color:#719e07>(</span><span style=color:#2aa198>"dubbo"</span><span style=color:#719e07>));</span>
+
+ReferenceConfig<span style=color:#719e07><</span>GenericService<span style=color:#719e07>></span> reference2 <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ReferenceConfig<span style=color:#719e07><</span>GenericService<span style=color:#719e07>>();</span>
+<span style=color:#586e75>// weak type interface name
+</span><span style=color:#586e75></span>reference2<span style=color:#719e07>.</span>setInterface<span style=color:#719e07>(</span>HelloService<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+reference2<span style=color:#719e07>.</span>setApplication<span style=color:#719e07>(</span>application<span style=color:#719e07>);</span>
+
+HelloService helloService <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>HelloService<span style=color:#719e07>)</span> reference2<span style=color:#719e07>.</span>get<span style=color:#719e07>();</span>
+System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span>helloService<span style=color:#719e07>.</span>hello<span style=color:#719e07>(</span><span style=color:#2aa198>"community"</span><span style=color:#719e07>));</span>
+</code></pre></div><p>Similarly, the consumer can also reference the service using an XML configuration and then make the call. Here you can see that the calling method is a normal service call, not a generic call. Of course, it is also possible to use generic calls.</p><p>So far, a simple service Mock platform has been successfully launched!</p><h2 id=others>Others</h2><ul><li>The generic invoke and generic interface implementations introduced in this article are all based on the native [...]
\ No newline at end of file
diff --git a/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/index.html b/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/index.html
new file mode 100644
index 00000000000..a87cc597b66
--- /dev/null
+++ b/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/index.html
@@ -0,0 +1,148 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo2-js.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+t [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Implementation%20of%20cross-language%20calls%20by%20Dubbo2.js" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#cross-language-calls-for-micro-service>Cross-language calls for micro service</a></li><li><a href=#cross-language-calls-by-a-common-protocol>Cross-language calls by a common protocol</a><ul><li><a href=#springmvc>SpringMVC</a></li><li><a href=#we-support-some-common-protocols>We support some common protocols</a></li><li> [...]
+<span style=color:#268bd2><dubbo:protocol</span> name=<span style=color:#2aa198>"jsonrpc"</span> port=<span style=color:#2aa198>"8080"</span> <span style=color:#268bd2>/></span>
+</code></pre></div><h3 id=customized-protocols-for-cross-language-support>Customized Protocols for Cross-language Support</h3><p>The so-called protocol of the microservice framework can be simply interpreted as: message format and serialization scheme. Generally, the service governance framework would provide numbers of protocol configuration items for users to choose from. In addition to the above two common protocols,there exists some other customized protocols like the dubbo protocol, [...]
+ String <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>);</span>
+ String <span style=color:#268bd2>echo</span><span style=color:#719e07>()</span> <span style=color:#719e07>;</span>
+ <span style=color:#dc322f>void</span> <span style=color:#268bd2>test</span><span style=color:#719e07>();</span>
+ UserResponse <span style=color:#268bd2>getUserInfo</span><span style=color:#719e07>(</span>UserRequest request<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>Then we implement the interface:</p><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoProviderImpl</span> <span style=color:#268bd2>implements</span> DemoProvider <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"["</span> <span style=color:#719e07>+</span> <span style=color:#719e07>new</span> SimpleDateFormat<span style=color:#719e07>(</span><span style=color:#2aa198>"HH:mm:ss"</span><span style=color:#719e07>).</span>format<span style=color:#719e07>(</span><span style=color:#719e07>new</span> Date<span style=color:#719e07>())</s [...]
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"Hello "</span> <span style=color:#719e07>+</span> name <span style=color:#719e07>+</span> <span style=color:#2aa198>", response form provider: "</span> <span style=color:#719e07>+</span> RpcContext<span style=color:#719e07>.</span>getContext<span style=color:#719e07>().</span>getLocalAddress<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>echo</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"receive...."</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"pang"</span><span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>test</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"test"</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> UserResponse <span style=color:#268bd2>getUserInfo</span><span style=color:#719e07>(</span>UserRequest request<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span>request<span style=color:#719e07>);</span>
+ UserResponse response <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> UserResponse<span style=color:#719e07>();</span>
+ response<span style=color:#719e07>.</span>setStatus<span style=color:#719e07>(</span><span style=color:#2aa198>"ok"</span><span style=color:#719e07>);</span>
+ Map<span style=color:#719e07><</span>String<span style=color:#719e07>,</span> String<span style=color:#719e07>></span> map <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> HashMap<span style=color:#719e07><</span>String<span style=color:#719e07>,</span> String<span style=color:#719e07>>();</span>
+ map<span style=color:#719e07>.</span>put<span style=color:#719e07>(</span><span style=color:#2aa198>"id"</span><span style=color:#719e07>,</span> <span style=color:#2aa198>"1"</span><span style=color:#719e07>);</span>
+ map<span style=color:#719e07>.</span>put<span style=color:#719e07>(</span><span style=color:#2aa198>"name"</span><span style=color:#719e07>,</span> <span style=color:#2aa198>"test"</span><span style=color:#719e07>);</span>
+ response<span style=color:#719e07>.</span>setInfo<span style=color:#719e07>(</span>map<span style=color:#719e07>);</span>
+ <span style=color:#719e07>return</span> response<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>After that,<span data-type=color style=color:#24292e> we expose the dubbo service with xml files:</span></p><div class=highlight><pre 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=color:#719e07><?xml version="1.0" encoding="UTF-8"?></span>
+<span style=color:#268bd2><beans</span> xmlns:xsi=<span style=color:#2aa198>"http://www.w3.org/2001/XMLSchema-instance"</span>
+ xmlns:dubbo=<span style=color:#2aa198>"http://code.alibabatech.com/schema/dubbo"</span>
+ xmlns=<span style=color:#2aa198>"http://www.springframework.org/schema/beans"</span>
+ xsi:schemaLocation=<span style=color:#2aa198>"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+</span><span style=color:#2aa198> http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"</span><span style=color:#268bd2>></span>
+
+ <span style=color:#586e75><!-- dubbo provider info, used to compute dependency --></span>
+ <span style=color:#268bd2><dubbo:application</span> name=<span style=color:#2aa198>"demo-provider"</span><span style=color:#268bd2>/></span>
+
+ <span style=color:#268bd2><dubbo:registry</span> protocol=<span style=color:#2aa198>"zookeeper"</span> address=<span style=color:#2aa198>"localhost:2181"</span><span style=color:#268bd2>/></span>
+
+ <span style=color:#586e75><!-- dubbo protocol, used to expose service at port 20880 --></span>
+ <span style=color:#268bd2><dubbo:protocol</span> name=<span style=color:#2aa198>"dubbo"</span> port=<span style=color:#2aa198>"20880"</span><span style=color:#268bd2>/></span>
+
+ <span style=color:#586e75><!-- realize a service as a local bean --></span>
+ <span style=color:#268bd2><bean</span> id=<span style=color:#2aa198>"demoProvider"</span> class=<span style=color:#2aa198>"com.alibaba.dubbo.demo.provider.DemoProviderImpl"</span><span style=color:#268bd2>/></span>
+
+ <span style=color:#586e75><!-- claim for service interfaces to expose --></span>
+ <span style=color:#268bd2><dubbo:service</span> interface=<span style=color:#2aa198>"com.alibaba.dubbo.demo.DemoProvider"</span> ref=<span style=color:#2aa198>"demoProvider"</span> version=<span style=color:#2aa198>"1.0.0"</span><span style=color:#268bd2>/></span>
+
+<span style=color:#268bd2></beans></span>
+</code></pre></div><p>After we implemented all the configurations on server side, initiate an object initiater to register a dubbo service locally:</p><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>Provider</span> <span style=color:#719e07>{</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> Exception <span style=color:#719e07>{</span>
+ ClassPathXmlApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ClassPathXmlApplicationContext<span style=color:#719e07>(</span><span style=color:#719e07>new</span> String<span style=color:#719e07>[]{</span><span style=color:#2aa198>"META-INF/spring/dubbo-demo-provider.xml"</span><span style=color:#719e07>});</span>
+ context<span style=color:#719e07>.</span>start<span style=color:#719e07>();</span>
+ System<span style=color:#719e07>.</span>in<span style=color:#719e07>.</span>read<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h3 id=2-implement-dubbo-client-side-for-nodejs>2. Implement dubbo client-side for nodejs</h3><p>Install dubbo2.js using npm:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh>npm install dubbo2.js --save
+</code></pre></div><p>Configure dubboConfig.ts:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-typescript data-lang=typescript><span style=color:#268bd2>import</span> { Dubbo, java, TDubboCallResult } <span style=color:#268bd2>from</span> <span style=color:#2aa198>'dubbo2.js'</span>
+
+<span style=color:#268bd2>const</span> dubbo <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> Dubbo({
+ application<span style=color:#719e07>:</span> {name<span style=color:#719e07>:</span> <span style=color:#2aa198>'demo-provider'</span>},
+ register<span style=color:#719e07>:</span> <span style=color:#2aa198>'localhost:2181'</span>,
+ dubboVersion<span style=color:#719e07>:</span> <span style=color:#2aa198>'2.0.0'</span>,
+ interfaces<span style=color:#719e07>:</span> [
+ <span style=color:#2aa198>'com.alibaba.dubbo.demo.DemoProvider'</span>,
+ ],
+});
+
+<span style=color:#268bd2>interface</span> IDemoService {
+ sayHello(name: <span style=color:#dc322f>string</span>)<span style=color:#719e07>:</span> TDubboCallResult<<span style=color:#268bd2>string</span>>;
+}
+
+<span style=color:#268bd2>export</span> <span style=color:#268bd2>const</span> demoService <span style=color:#719e07>=</span> dubbo.proxyService<<span style=color:#268bd2>IDemoService</span>>({
+ dubboInterface<span style=color:#719e07>:</span> <span style=color:#2aa198>'com.alibaba.dubbo.demo.DemoProvider'</span>,
+ version<span style=color:#719e07>:</span> <span style=color:#2aa198>'1.0.0'</span>,
+ methods<span style=color:#719e07>:</span> {
+ sayHello(name: <span style=color:#dc322f>string</span>) {
+ <span style=color:#719e07>return</span> [java.<span style=color:#b58900>String</span>(name)];
+ },
+
+ echo() {},
+
+ test() {},
+
+ getUserInfo() {
+ <span style=color:#719e07>return</span> [
+ java.combine(<span style=color:#2aa198>'com.alibaba.dubbo.demo.UserRequest'</span>, {
+ id: <span style=color:#dc322f>1</span>,
+ name<span style=color:#719e07>:</span> <span style=color:#2aa198>'nodejs'</span>,
+ email<span style=color:#719e07>:</span> <span style=color:#2aa198>'node@qianmi.com'</span>,
+ }),
+ ];
+ },
+ },
+});
+</code></pre></div><blockquote><p>Using typescript brings better coding experience.</p></blockquote><p>Implement caller class main.ts:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-typescript data-lang=typescript><span style=color:#268bd2>import</span> {demoService} <span style=color:#268bd2>from</span> <span style=color:#2aa198>'./dubboConfig'</span>
+
+demoService.sayHello(<span style=color:#2aa198>'kirito'</span>).then(({res,err})<span style=color:#719e07>=></span>{
+ console.log(res)
+});
+</code></pre></div><h3 id=3-call-maints>3. Call main.ts:</h3><p>Run nodejs client in Debug mode:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh><span style=color:#268bd2>DEBUG</span><span style=color:#719e07>=</span>dubbo* ts-node main.ts
+</code></pre></div><p>Checkout running results:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh>Hello kirito, response form provider: 172.19.6.151:20880
+</code></pre></div><p>Congratulations!</p><h2 id=features>Features</h2><ul><li>Support zookeeper as register center</li><li>Support TCP Dubbo Native protocol</li><li>Support directly Dubbo connection</li><li>Support link tracing</li><li>Generate dubbo interface Automatically</li></ul><h2 id=more-details>More details</h2><p>The sample code in this article is available here, <a href=https://github.com/dubbo/dubbo2.js>https://github.com/dubbo/dubbo2.js</a>.
+If you don't know much about the dubbo protocol and want to understand how it works, the project provides a sub-moudle: java-socket-consumer, which is implemented in a process-oriented approach, realizing a process of sending dubbo protocal message with native socket and making function calls, and then get response.</p><ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5"><li><a href=/blog/2018/08/14/generic-invoke-of-dubbo/ class="btn btn-primary"><span c [...]
\ No newline at end of file
diff --git a/blog/2018/08/14/manipulating-services-dynamically-via-qos/index.html b/blog/2018/08/14/manipulating-services-dynamically-via-qos/index.html
new file mode 100644
index 00000000000..9fcaeb10a7c
--- /dev/null
+++ b/blog/2018/08/14/manipulating-services-dynamically-via-qos/index.html
@@ -0,0 +1,148 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/introduction-to-dubbo-qos.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+ [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Manipulating%20Services%20Dynamically%20via%20QoS" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#mechanism-of-qos>Mechanism of QoS</a><ul><li><a href=#qos-commands>QoS Commands:</a></li><li><a href=#qos-parameters>QoS' Parameters</a></li></ul></li></ul></nav></div><main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role=main><a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href=/blog/news/index.xm [...]
+Trying 127.0.0.1...
+Connected to localhost.
+Escape character is <span style=color:#2aa198>'^]'</span>.
+ ????????? ??? ?? ??????????? ??????????? ????????
+ ??? ???? ??? ??? ??? ??? ??? ??? ??? ???
+ ??? ??? ??? ??? ??? ??? ??? ??? ??? ???
+ ??? ??? ??? ??? ?????????? ?????????? ??? ???
+ ??? ??? ??? ??? ??????????? ??????????? ??? ???
+ ??? ??? ??? ??? ??? ??? ??? ??? ??? ???
+ ??? ???? ??? ??? ??? ??? ??? ??? ??? ???
+ ????????? ????????? ??????????? ??????????? ????????
+
+
+dubbo>
+</code></pre></div><p>A <code>dubbo></code> prompt would show up once you connect to server. Now input <code>help</code>:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh>dubbo>help
++---------+----------------------------------------------------------------------------------+
+| <span style=color:#b58900>help</span> | <span style=color:#b58900>help</span> <span style=color:#b58900>command</span> |
++---------+----------------------------------------------------------------------------------+
+| ls | ls service |
++---------+----------------------------------------------------------------------------------+
+| offline | offline dubbo |
++---------+----------------------------------------------------------------------------------+
+| online | online dubbo |
++---------+----------------------------------------------------------------------------------+
+| quit | quit telnet console |
++---------+----------------------------------------------------------------------------------+
+
+dubbo>
+</code></pre></div><p>This command lists all available commands with explanations.</p><p>You can also use <code>help</code> to a specific command to read examples of that command.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh>dubbo>help online
++--------------+----------------------------------------------------------------------------------+
+| COMMAND NAME | online |
++--------------+----------------------------------------------------------------------------------+
+| EXAMPLE | online dubbo |
+| | online xx.xx.xxx.service |
++--------------+----------------------------------------------------------------------------------+
+</code></pre></div><p>Use <code>ls</code> to check services' status:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh>dubbo>ls
+As Provider side:
++------------------------------------------+---+
+| Provider Service Name |PUB|
++------------------------------------------+---+
+|org.apache.dubbo.demo.provider.DemoService| Y |
++------------------------------------------+---+
+As Consumer side:
++---------------------+---+
+|Consumer Service Name|NUM|
++---------------------+---+
+</code></pre></div><p>There is a service named <code>org.apache.dubbo.demo.provider.DemoService</code> in the provider side. <code>PUB=Y</code> in the second columns means that the service has been published to the registration center, waiting to be called by the consumer side.</p><p>Assuming that we need to withdraw a service dynamically, we can use <code>offline</code> command:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-s [...]
+OK
+</code></pre></div><p>You can see that the command responds with <code>OK</code>. Check the services' status using <code>ls</code>:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh>dubbo>ls
+As Provider side:
++------------------------------------------+---+
+| Provider Service Name |PUB|
++------------------------------------------+---+
+|org.apache.dubbo.demo.provider.DemoService| N |
++------------------------------------------+---+
+As Consumer side:
++---------------------+---+
+|Consumer Service Name|NUM|
++---------------------+---+
+</code></pre></div><p>You can see that <code>PUB</code> of <code>org.apache.dubbo.demo.provider.DemoService</code> has been set to <code>N</code>.</p><p>Quit the current telnet session using <code>quit</code>:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh>dubbo>quit
+BYE!
+Connection closed by foreign host.
+</code></pre></div><h4 id=access-qos-via-http>Access QoS via HTTP</h4><p>In the example above we performed an offline action to <code>org.apache.dubbo.demo.provider.DemoService</code>. Now we are going to demonstrate how to register the service above via HTTP.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh>$ curl -i http://localhost:22222/online?service<span style=color:#719e07>=</spa [...]
+HTTP/1.1 <span style=color:#2aa198>200</span> OK
+Content-Type: text/plain
+Content-Length: <span style=color:#2aa198>2</span>
+
+OK%
+</code></pre></div><blockquote><p>Beware of the parameters of online action. They need to be provided in the form of <code>key=value</code>. However, <code>key</code> would be ignored actually.</p></blockquote><p>The action responds with <code>OK</code>. Now use <code>ls</code> to check providers' status at the current moment.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback [...]
+HTTP/1.1 200 OK
+Content-Type: text/plain
+Content-Length: 365
+
+As Provider side:
++------------------------------------------+---+
+| Provider Service Name |PUB|
++------------------------------------------+---+
+|org.apache.dubbo.demo.provider.DemoService| Y |
++------------------------------------------+---+
+As Consumer side:
++---------------------+---+
+|Consumer Service Name|NUM|
++---------------------+---+
+</code></pre></div><p>You can see that the service’s <code>PUB</code> status has been changed to <code>Y</code>.</p><h3 id=qos-parameters>QoS' Parameters</h3><p>You can use parameters that QoS provides to config its startup. These parameters include:</p><table><thead><tr><th>Parameter</th><th>Explanation</th><th>Default</th></tr></thead><tbody><tr><td>qosEnable</td><td>Activate QoS or not</td><td>true</td></tr><tr><td>qosPort</td><td>The port QoS would bind to</td><td>22222</td></t [...]
+-Ddubbo.application.qos.port=33333
+-Ddubbo.application.qos.accept.foreign.ip=false
+</code></pre></div><h4 id=dubboproperties><code>Dubbo.properties</code></h4><p>Create a <code>dubbo.properties</code> file in this directory <code>src/main/resources</code> in your project, and copy the following codes into it:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>dubbo.application.qos.enable=true
+dubbo.application.qos.port=33333
+dubbo.application.qos.accept.foreign.ip=false
+</code></pre></div><h4 id=xml>XML</h4><p>If you are going to config using XML, you can try this:</p><div class=highlight><pre 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=color:#719e07><?xml version="1.0" encoding="UTF-8"?></span>
+<span style=color:#268bd2><beans</span> xmlns=<span style=color:#2aa198>"http://www.springframework.org/schema/beans"</span>
+ xmlns:xsi=<span style=color:#2aa198>"http://www.w3.org/2001/XMLSchema-instance"</span>
+ xmlns:dubbo=<span style=color:#2aa198>"http://dubbo.apache.org/schema/dubbo"</span>
+ xsi:schemaLocation=<span style=color:#2aa198>"http://www.springframework.org/schema/beans
+</span><span style=color:#2aa198> http://www.springframework.org/schema/beans/spring-beans.xsd
+</span><span style=color:#2aa198> http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"</span><span style=color:#268bd2>></span>
+ <span style=color:#268bd2><dubbo:application</span> name=<span style=color:#2aa198>"demo-provider"</span><span style=color:#268bd2>></span>
+ <span style=color:#268bd2><dubbo:parameter</span> key=<span style=color:#2aa198>"qos.enable"</span> value=<span style=color:#2aa198>"true"</span><span style=color:#268bd2>/></span>
+ <span style=color:#268bd2><dubbo:parameter</span> key=<span style=color:#2aa198>"qos.accept.foreign.ip"</span> value=<span style=color:#2aa198>"false"</span><span style=color:#268bd2>/></span>
+ <span style=color:#268bd2><dubbo:parameter</span> key=<span style=color:#2aa198>"qos.port"</span> value=<span style=color:#2aa198>"33333"</span><span style=color:#268bd2>/></span>
+ <span style=color:#268bd2></dubbo:application></span>
+ <span style=color:#268bd2><dubbo:registry</span> address=<span style=color:#2aa198>"multicast://224.5.6.7:1234"</span><span style=color:#268bd2>/></span>
+ <span style=color:#268bd2><dubbo:protocol</span> name=<span style=color:#2aa198>"dubbo"</span> port=<span style=color:#2aa198>"20880"</span><span style=color:#268bd2>/></span>
+ <span style=color:#268bd2><dubbo:service</span> interface=<span style=color:#2aa198>"org.apache.dubbo.demo.provider.DemoService"</span> ref=<span style=color:#2aa198>"demoService"</span><span style=color:#268bd2>/></span>
+ <span style=color:#268bd2><bean</span> id=<span style=color:#2aa198>"demoService"</span> class=<span style=color:#2aa198>"org.apache.dubbo.demo.provider.DemoServiceImpl"</span><span style=color:#268bd2>/></span>
+<span style=color:#268bd2></beans></span>
+</code></pre></div><h4 id=spring-boot-auto-configuration><code>spring-boot</code> auto configuration</h4><p>If you are developing a spring-boot application, you can configure in <code>application.properties</code> or <code>application.yml</code>:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>dubbo.application.qosEnable=true
+dubbo.application.qosPort=33333
+dubbo.application.qosAcceptForeignIp=false
+</code></pre></div><ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5"><li><a href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/ class="btn btn-primary"><span class=mr-1>←</span> Previous</a></li><a href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/ class="btn btn-primary">Next <span class=ml-1>→</span></a></li></ul></div></main></div></div><footer class="bg-dark py-5 row d-print-none"><div class="conta [...]
\ No newline at end of file
diff --git a/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/index.html b/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/index.html
new file mode 100644
index 00000000000..9e186d8acd0
--- /dev/null
+++ b/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/index.html
@@ -0,0 +1,148 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/spring-boot-dubbo-start-stop-analysis.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22fron [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Source%20code%20analysis%20of%20spring-boot+Dubbo%20App%20start%20and%20stop" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#introduction>Introduction</a></li><li><a href=#the-analysis-of-dubboconsumer-startup>The analysis of DubboConsumer startup</a></li><li><a href=#the-analysis-of-dubboconsumer-exit>The analysis of DubboConsumer exit</a></li><li><a href=#summary>Summary</a></li><li><a href=#problems>Problems</a><ul><li><a href=#notice>Notic [...]
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DubboConsumerDemo</span> <span style=color:#719e07>{</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:#719e07>{</span>
+ SpringApplication<span style=color:#719e07>.</span>run<span style=color:#719e07>(</span>DubboConsumerDemo<span style=color:#719e07>.</span>class<span style=color:#719e07>,</span>args<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+
+<span style=color:#719e07>}</span>
+</code></pre></div><p>In fact, to answer this question, we need to abstract it first, that is, under what circumstances will a JVM process exit?</p><p>Take Java 8 as an example. By referring to the JVM language specification[1], there is a clear description in Section 12.8:</p><blockquote><p>A program terminates all its activity and <em>exits</em> when one of two things happens:</p><ul><li>All the threads that are not daemon threads terminate.</li><li>Some thread invokes the <code>exit</ [...]
+<span style=color:#2aa198>"container-0"</span> <span style=color:#586e75>#37 prio=5 os_prio=31 tid=0x00007fbe312f5800 nid=0x7103 waiting on condition [0x0000700010144000]</span>
+<span style=color:#2aa198>"container-1"</span> <span style=color:#586e75>#49 prio=5 os_prio=31 tid=0x00007fbe3117f800 nid=0x7b03 waiting on condition [0x0000700010859000]</span>
+<span style=color:#2aa198>"DestroyJavaVM"</span> <span style=color:#586e75>#83 prio=5 os_prio=31 tid=0x00007fbe30011000 nid=0x2703 waiting on condition [0x0000000000000000]</span>
+<span style=color:#2aa198>"VM Thread"</span> <span style=color:#268bd2>os_prio</span><span style=color:#719e07>=</span><span style=color:#2aa198>31</span> <span style=color:#268bd2>tid</span><span style=color:#719e07>=</span>0x00007fbe3005e800 <span style=color:#268bd2>nid</span><span style=color:#719e07>=</span>0x3703 runnable
+<span style=color:#2aa198>"GC Thread#0"</span> <span style=color:#268bd2>os_prio</span><span style=color:#719e07>=</span><span style=color:#2aa198>31</span> <span style=color:#268bd2>tid</span><span style=color:#719e07>=</span>0x00007fbe30013800 <span style=color:#268bd2>nid</span><span style=color:#719e07>=</span>0x5403 runnable
+<span style=color:#2aa198>"GC Thread#1"</span> <span style=color:#268bd2>os_prio</span><span style=color:#719e07>=</span><span style=color:#2aa198>31</span> <span style=color:#268bd2>tid</span><span style=color:#719e07>=</span>0x00007fbe30021000 <span style=color:#268bd2>nid</span><span style=color:#719e07>=</span>0x5303 runnable
+<span style=color:#2aa198>"GC Thread#2"</span> <span style=color:#268bd2>os_prio</span><span style=color:#719e07>=</span><span style=color:#2aa198>31</span> <span style=color:#268bd2>tid</span><span style=color:#719e07>=</span>0x00007fbe30021800 <span style=color:#268bd2>nid</span><span style=color:#719e07>=</span>0x2d03 runnable
+<span style=color:#2aa198>"GC Thread#3"</span> <span style=color:#268bd2>os_prio</span><span style=color:#719e07>=</span><span style=color:#2aa198>31</span> <span style=color:#268bd2>tid</span><span style=color:#719e07>=</span>0x00007fbe30022000 <span style=color:#268bd2>nid</span><span style=color:#719e07>=</span>0x2f03 runnable
+<span style=color:#2aa198>"G1 Main Marker"</span> <span style=color:#268bd2>os_prio</span><span style=color:#719e07>=</span><span style=color:#2aa198>31</span> <span style=color:#268bd2>tid</span><span style=color:#719e07>=</span>0x00007fbe30040800 <span style=color:#268bd2>nid</span><span style=color:#719e07>=</span>0x5203 runnable
+<span style=color:#2aa198>"G1 Conc#0"</span> <span style=color:#268bd2>os_prio</span><span style=color:#719e07>=</span><span style=color:#2aa198>31</span> <span style=color:#268bd2>tid</span><span style=color:#719e07>=</span>0x00007fbe30041000 <span style=color:#268bd2>nid</span><span style=color:#719e07>=</span>0x4f03 runnable
+<span style=color:#2aa198>"G1 Refine#0"</span> <span style=color:#268bd2>os_prio</span><span style=color:#719e07>=</span><span style=color:#2aa198>31</span> <span style=color:#268bd2>tid</span><span style=color:#719e07>=</span>0x00007fbe31044800 <span style=color:#268bd2>nid</span><span style=color:#719e07>=</span>0x4e03 runnable
+<span style=color:#2aa198>"G1 Refine#1"</span> <span style=color:#268bd2>os_prio</span><span style=color:#719e07>=</span><span style=color:#2aa198>31</span> <span style=color:#268bd2>tid</span><span style=color:#719e07>=</span>0x00007fbe31045800 <span style=color:#268bd2>nid</span><span style=color:#719e07>=</span>0x4d03 runnable
+<span style=color:#2aa198>"G1 Refine#2"</span> <span style=color:#268bd2>os_prio</span><span style=color:#719e07>=</span><span style=color:#2aa198>31</span> <span style=color:#268bd2>tid</span><span style=color:#719e07>=</span>0x00007fbe31046000 <span style=color:#268bd2>nid</span><span style=color:#719e07>=</span>0x4c03 runnable
+<span style=color:#2aa198>"G1 Refine#3"</span> <span style=color:#268bd2>os_prio</span><span style=color:#719e07>=</span><span style=color:#2aa198>31</span> <span style=color:#268bd2>tid</span><span style=color:#719e07>=</span>0x00007fbe31047000 <span style=color:#268bd2>nid</span><span style=color:#719e07>=</span>0x4b03 runnable
+<span style=color:#2aa198>"G1 Young RemSet Sampling"</span> <span style=color:#268bd2>os_prio</span><span style=color:#719e07>=</span><span style=color:#2aa198>31</span> <span style=color:#268bd2>tid</span><span style=color:#719e07>=</span>0x00007fbe31047800 <span style=color:#268bd2>nid</span><span style=color:#719e07>=</span>0x3603 runnable
+<span style=color:#2aa198>"VM Periodic Task Thread"</span> <span style=color:#268bd2>os_prio</span><span style=color:#719e07>=</span><span style=color:#2aa198>31</span> <span style=color:#268bd2>tid</span><span style=color:#719e07>=</span>0x00007fbe31129000 <span style=color:#268bd2>nid</span><span style=color:#719e07>=</span>0x6703 waiting on condition
+
+</code></pre></div><blockquote><p>We can find all the thread digests by <code>grep tid</code> here, and find the line that doesn’t contain the daemon keyword by <code>grep -v</code> command.</p></blockquote><p>We can get some information from the above results:</p><ul><li>There are two “suspicious” threads : <code>container-0</code>, <code>container-1</code>. They are non-daemon thread in wait state.</li><li>There are alse some threads about GC, and threads that start w [...]
+ Thread awaitThread <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> Thread<span style=color:#719e07>(</span><span style=color:#2aa198>"container-"</span> <span style=color:#719e07>+</span> <span style=color:#719e07>(</span>containerCounter<span style=color:#719e07>.</span>get<span style=color:#719e07>()))</span> <span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>run</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ TomcatEmbeddedServletContainer<span style=color:#719e07>.</span>this<span style=color:#719e07>.</span>tomcat<span style=color:#719e07>.</span>getServer<span style=color:#719e07>().</span>await<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#719e07>};</span>
+ awaitThread<span style=color:#719e07>.</span>setContextClassLoader<span style=color:#719e07>(</span>getClass<span style=color:#719e07>().</span>getClassLoader<span style=color:#719e07>());</span>
+ awaitThread<span style=color:#719e07>.</span>setDaemon<span style=color:#719e07>(</span><span style=color:#cb4b16>false</span><span style=color:#719e07>);</span>
+ awaitThread<span style=color:#719e07>.</span>start<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+</code></pre></div><p>Let’s add a breakpoint in this method, and focus on the call stack:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-plain data-lang=plain>initialize:115, TomcatEmbeddedServletContainer (org.springframework.boot.context.embedded.tomcat)
+<init>:84, TomcatEmbeddedServletContainer (org.springframework.boot.context.embedded.tomcat)
+getTomcatEmbeddedServletContainer:554, TomcatEmbeddedServletContainerFactory (org.springframework.boot.context.embedded.tomcat)
+getEmbeddedServletContainer:179, TomcatEmbeddedServletContainerFactory (org.springframework.boot.context.embedded.tomcat)
+createEmbeddedServletContainer:164, EmbeddedWebApplicationContext (org.springframework.boot.context.embedded)
+onRefresh:134, EmbeddedWebApplicationContext (org.springframework.boot.context.embedded)
+refresh:537, AbstractApplicationContext (org.springframework.context.support)
+refresh:122, EmbeddedWebApplicationContext (org.springframework.boot.context.embedded)
+refresh:693, SpringApplication (org.springframework.boot)
+refreshContext:360, SpringApplication (org.springframework.boot)
+run:303, SpringApplication (org.springframework.boot)
+run:1118, SpringApplication (org.springframework.boot)
+run:1107, SpringApplication (org.springframework.boot)
+main:35, DubboConsumerDemo (com.alibaba.boot.dubbo.demo.consumer.bootstrap)
+</code></pre></div><p>It can be seen that during the startup process of the Spring-boot application, the above method is executed since the execution of Tomcat exposes the HTTP service by default. Also, all threads started by Tomcat are daemon threads by default, such as the Acceptor of the listening request, threads in working threads, etc. Thus the JVM will also exit after the startup is complete in there is no extra control here. Therefore, it is necessary to explicitly start a thread [...]
+ <span style=color:#586e75>// ...
+</span><span style=color:#586e75></span> <span style=color:#719e07>if</span><span style=color:#719e07>(</span> port<span style=color:#719e07>==-</span>1 <span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+ awaitThread <span style=color:#719e07>=</span> Thread<span style=color:#719e07>.</span>currentThread<span style=color:#719e07>();</span>
+ <span style=color:#719e07>while</span><span style=color:#719e07>(!</span>stopAwait<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+ Thread<span style=color:#719e07>.</span>sleep<span style=color:#719e07>(</span> 10000 <span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span> <span style=color:#719e07>catch</span><span style=color:#719e07>(</span> InterruptedException ex <span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#586e75>// continue and check the flag
+</span><span style=color:#586e75></span> <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span> <span style=color:#719e07>finally</span> <span style=color:#719e07>{</span>
+ awaitThread <span style=color:#719e07>=</span> <span style=color:#cb4b16>null</span><span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>return</span><span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#586e75>// ...
+</span><span style=color:#586e75></span> <span style=color:#719e07>}</span>
+</code></pre></div><p>In the await method, the current thread checks the variable <code>stopAwait</code> every 10 seconds in a while loop. It is a <code>volatile</code> variable that is used to ensure that the current thread can see the change immediately after the variable being modified by another thread. If there is no change, it will stay in the loop. This is the reason why the thread does not exit, which is also the reason that the entire Spring-boot application doesn’t exit.< [...]
+stopInternal:819<span style=color:#719e07>,</span> StandardServer <span style=color:#719e07>(</span>org<span style=color:#719e07>.</span>apache<span style=color:#719e07>.</span>catalina<span style=color:#719e07>.</span>core<span style=color:#719e07>)</span>
+stop:226<span style=color:#719e07>,</span> LifecycleBase <span style=color:#719e07>(</span>org<span style=color:#719e07>.</span>apache<span style=color:#719e07>.</span>catalina<span style=color:#719e07>.</span>util<span style=color:#719e07>)</span>
+stop:377<span style=color:#719e07>,</span> Tomcat <span style=color:#719e07>(</span>org<span style=color:#719e07>.</span>apache<span style=color:#719e07>.</span>catalina<span style=color:#719e07>.</span>startup<span style=color:#719e07>)</span>
+stopTomcat:241<span style=color:#719e07>,</span> TomcatEmbeddedServletContainer <span style=color:#719e07>(</span>org<span style=color:#719e07>.</span>springframework<span style=color:#719e07>.</span>boot<span style=color:#719e07>.</span>context<span style=color:#719e07>.</span>embedded<span style=color:#719e07>.</span>tomcat<span style=color:#719e07>)</span>
+stop:295<span style=color:#719e07>,</span> TomcatEmbeddedServletContainer <span style=color:#719e07>(</span>org<span style=color:#719e07>.</span>springframework<span style=color:#719e07>.</span>boot<span style=color:#719e07>.</span>context<span style=color:#719e07>.</span>embedded<span style=color:#719e07>.</span>tomcat<span style=color:#719e07>)</span>
+stopAndReleaseEmbeddedServletContainer:306<span style=color:#719e07>,</span> EmbeddedWebApplicationContext <span style=color:#719e07>(</span>org<span style=color:#719e07>.</span>springframework<span style=color:#719e07>.</span>boot<span style=color:#719e07>.</span>context<span style=color:#719e07>.</span>embedded<span style=color:#719e07>)</span>
+onClose:155<span style=color:#719e07>,</span> EmbeddedWebApplicationContext <span style=color:#719e07>(</span>org<span style=color:#719e07>.</span>springframework<span style=color:#719e07>.</span>boot<span style=color:#719e07>.</span>context<span style=color:#719e07>.</span>embedded<span style=color:#719e07>)</span>
+doClose:1014<span style=color:#719e07>,</span> AbstractApplicationContext <span style=color:#719e07>(</span>org<span style=color:#719e07>.</span>springframework<span style=color:#719e07>.</span>context<span style=color:#719e07>.</span>support<span style=color:#719e07>)</span>
+run:929<span style=color:#719e07>,</span> AbstractApplicationContext$2 <span style=color:#719e07>(</span>org<span style=color:#719e07>.</span>springframework<span style=color:#719e07>.</span>context<span style=color:#719e07>.</span>support<span style=color:#719e07>)</span>
+</code></pre></div><p>Through source code analysis, it was executed by Spring’s registered <code>ShutdownHook</code>.</p><div class=highlight><pre 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=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>registerShutdownHook</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span><span style=color:#719e07>this</span><span style=color:#719e07>.</span>shutdownHook <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span><span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#586e75>// No shutdown hook registered yet.
+</span><span style=color:#586e75></span> <span style=color:#719e07>this</span><span style=color:#719e07>.</span>shutdownHook <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> Thread<span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>run</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>synchronized</span> <span style=color:#719e07>(</span>startupShutdownMonitor<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ doClose<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>};</span>
+ Runtime<span style=color:#719e07>.</span>getRuntime<span style=color:#719e07>().</span>addShutdownHook<span style=color:#719e07>(</span><span style=color:#719e07>this</span><span style=color:#719e07>.</span>shutdownHook<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+</code></pre></div><p>By reffering the Java API documentation[2], we found that ShutdownHook will be executed under the following two cases.</p><blockquote><p>The Java virtual machine <em>shuts down</em> in response to two kinds of events:</p><ul><li>The program <em>exits</em> normally, when the last non-daemon thread exits or when the <code>exit</code> (equivalently, <a href=https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#exit-int-><code>System.exit</code></a>) method is [...]
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>test</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>new</span> Thread<span style=color:#719e07>(</span><span style=color:#719e07>new</span> Runnable<span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>run</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+ Thread<span style=color:#719e07>.</span>sleep<span style=color:#719e07>(</span>1000000<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span> <span style=color:#719e07>catch</span> <span style=color:#719e07>(</span>InterruptedException e<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ e<span style=color:#719e07>.</span>printStackTrace<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}).</span>start<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+</code></pre></div><p>[1] <a href=https://docs.oracle.com/javase/specs/jls/se8/html/jls-12.html#jls-12.8>https://docs.oracle.com/javase/specs/jls/se8/html/jls-12.html#jls-12.8</a></p><p>[2] <a href=https://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#addShutdownHook>https://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#addShutdownHook</a></p><ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5"><li><a href=/blog/2018/08/14/implementa [...]
\ No newline at end of file
diff --git a/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/index.html b/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/index.html
new file mode 100644
index 00000000000..1533cd610cd
--- /dev/null
+++ b/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/index.html
@@ -0,0 +1,38 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-meetup-chengdu.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+secti [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=The%20fourth%20Dubbo%20meetup%20has%20been%20held%20in%20Chengdu" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#the-depth-of-the-user-communication>The depth of the user communication</a></li><li><a href=#meetup-activity-information>Meetup activity information</a></li><li><a href=#the-registration-information>The registration information</a></li></ul></nav></div><main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role=main><a c [...]
\ No newline at end of file
diff --git a/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/index.html b/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/index.html
new file mode 100644
index 00000000000..5919a86f20b
--- /dev/null
+++ b/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/index.html
@@ -0,0 +1,250 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-new-async.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=How%20to%20implement%20a%20fully%20asynchronous%20calls%20chain%20based%20on%20Dubbo" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#asynchronous-mode-before-version-26x>Asynchronous mode before version 2.6.x</a></li><li><a href=#enhancement-based-on-completablefuture-in-version-270>Enhancement based on CompletableFuture in version 2.7.0</a></li><li><a href=#example-1completablefuture-interface>example 1:CompletableFuture interface</a></li><li><a href [...]
+ String <span style=color:#268bd2>findFoo</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><div class=highlight><pre 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=color:#268bd2><dubbo:reference</span> id=<span style=color:#2aa198>"fooService"</span> interface=<span style=color:#2aa198>"com.alibaba.foo.FooService"</span><span style=color:#268bd2>></span>
+ <span style=color:#268bd2><dubbo:method</span> name=<span style=color:#2aa198>"findFoo"</span> async=<span style=color:#2aa198>"true"</span> <span style=color:#268bd2>/></span>
+<span style=color:#268bd2></dubbo:reference></span>
+</code></pre></div><ol start=2><li>Obtain Future object through RpcContext.</li></ol><div class=highlight><pre 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=color:#586e75>// this call will return null immediately
+</span><span style=color:#586e75></span>fooService<span style=color:#719e07>.</span>findFoo<span style=color:#719e07>(</span>fooId<span style=color:#719e07>);</span>
+<span style=color:#586e75>// Obtain the Future instance. When the result is returned, Future instance will be notified and the result will be set to Future instance.
+</span><span style=color:#586e75></span>Future<span style=color:#719e07><</span>Foo<span style=color:#719e07>></span> fooFuture <span style=color:#719e07>=</span> RpcContext<span style=color:#719e07>.</span>getContext<span style=color:#719e07>().</span>getFuture<span style=color:#719e07>();</span>
+fooFuture<span style=color:#719e07>.</span>get<span style=color:#719e07>();</span>
+</code></pre></div><p>or</p><div class=highlight><pre 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=color:#586e75>// this call will return null immediately
+</span><span style=color:#586e75></span>fooService<span style=color:#719e07>.</span>findFoo<span style=color:#719e07>(</span>fooId<span style=color:#719e07>);</span>
+<span style=color:#586e75>// get Dubbo's built-in ResponseFuture, and set the callback
+</span><span style=color:#586e75></span>ResponseFuture future <span style=color:#719e07>=</span> <span style=color:#719e07>((</span>FutureAdapter<span style=color:#719e07>)</span>RpcContext<span style=color:#719e07>.</span>getContext<span style=color:#719e07>().</span>getFuture<span style=color:#719e07>()).</span>getFuture<span style=color:#719e07>();</span>
+future<span style=color:#719e07>.</span>setCallback<span style=color:#719e07>(</span><span style=color:#719e07>new</span> ResponseCallback<span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>done</span><span style=color:#719e07>(</span>Object response<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>print<span style=color:#719e07>(</span>response<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>caught</span><span style=color:#719e07>(</span>Throwable exception<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ exception<span style=color:#719e07>.</span>printStackTrace<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>});</span>
+</code></pre></div><p>From this simple example, we can see there are some inconveniences in use:</p><ol><li>The synchronization interface of findFoo cannot directly return a Future object representing the asynchronous result, which is further obtained through RpcContext.</li><li>Future object can only be obtained from get method that will block until getting the result.</li><li>Callback can be set by getting the built-in ResponseFuture interface. However, the API to obtain ResponseFuture [...]
+ CompletableFuture<span style=color:#719e07><</span>String<span style=color:#719e07>></span> <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div></li><li><p>If you don’t want to define the return value of the interface as a Future object, or if there is a defined synchronization interface, you can additionally define an asynchronous interface and provide a method to return a Future object.</p><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268b [...]
+ CompletableFuture<span style=color:#719e07><</span>String<span style=color:#719e07>></span> <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><div class=highlight><pre 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=color:#268bd2>@AsyncFor</span><span style=color:#719e07>(</span>AsyncService<span style=color:#719e07>.</span>class<span style=color:#719e07>)</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>GrettingServiceAsync</span> <span style=color:#268bd2>extends</span> GreetingsService <span style=color:#719e07>{</span>
+ CompletableFuture<span style=color:#719e07><</span>String<span style=color:#719e07>></span> <span style=color:#268bd2>sayHiAsync</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>In this way, Provider can only implement the sayHi method. The Consumer can get a Future instance by directly calling sayHiAsync, and Dubbo framework will convert it to a call to the sayHi method on the Provider side automatically.</p><p>Providing an asynchronous method definition for each synchronization method can be inconvenient. Further, using <a href=https://github.com/dubbo/dubbo-async-processor>Annotation Processor implementation</a> in the Dubbo ecosystem ca [...]
+ String <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>AsyncServiceImpl</span> <span style=color:#268bd2>implements</span> AsyncService <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>final</span> AsyncContext asyncContext <span style=color:#719e07>=</span> RpcContext<span style=color:#719e07>.</span>startAsync<span style=color:#719e07>();</span>
+ <span style=color:#719e07>new</span> Thread<span style=color:#719e07>(()</span> <span style=color:#719e07>-></span> <span style=color:#719e07>{</span>
+ asyncContext<span style=color:#719e07>.</span>write<span style=color:#719e07>(</span><span style=color:#2aa198>"Hello "</span> <span style=color:#719e07>+</span> name <span style=color:#719e07>+</span> <span style=color:#2aa198>", response from provider."</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>}).</span>start<span style=color:#719e07>();</span>
+ <span style=color:#719e07>return</span> <span style=color:#cb4b16>null</span><span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>At the beginning of the method body, it starts asynchronization by running <code>RpcContext.startAsync()</code> , and it starts a new thread to execute the business logic asynchronously. After the time-consuming operation is completed, the result is written back by <code>asyncContext.write</code>.</p></li><li><p>RpcContext returns CompletableFuture directly.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-s [...]
+</code></pre></div></li></ol><p>All of the above enhancements are based on the compatibility with existing asynchronous programming, so asynchronous programs written based on 2.6.x versions can be successfully compiled without any modification.</p><p>Next, let’s illustrate how to implement a fully asynchronous Dubbo service call chain through a few examples.</p><h2 id=example-1completablefuture-interface>example 1:CompletableFuture interface</h2><p>CompletableFuture interface can b [...]
+ CompletableFuture<span style=color:#719e07><</span>String<span style=color:#719e07>></span> <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>Note that the return type of this interface is <code>CompletableFuture<String></code>.</p></li><li><p>Provider Side</p><ul><li><p>Implementation</p><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>AsyncServiceImpl</span> <span style=color:#268bd2>implements< [...]
+ <span style=color:#268bd2>public</span> CompletableFuture<span style=color:#719e07><</span>String<span style=color:#719e07>></span> <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> CompletableFuture<span style=color:#719e07>.</span>supplyAsync<span style=color:#719e07>(()</span> <span style=color:#719e07>-></span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+ Thread<span style=color:#719e07>.</span>sleep<span style=color:#719e07>(</span>5000<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span> <span style=color:#719e07>catch</span> <span style=color:#719e07>(</span>InterruptedException e<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ e<span style=color:#719e07>.</span>printStackTrace<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"async response from provider."</span><span style=color:#719e07>;</span>
+ <span style=color:#719e07>});</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>We can see that the business code is switched to be executed in the new thread by supplyAsync, so the Provider side is asynchronous.</p></li><li><p>Config</p><div class=highlight><pre 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=color:#268bd2><bean</span> id=<span style=color:#2aa198>"asyncService"</span> class=<span style=color:#2aa198>"com.alibaba.dubbo.sampl [...]
+<span style=color:#268bd2><dubbo:service</span> interface=<span style=color:#2aa198>"com.alibaba.dubbo.samples.async.api.AsyncService"</span> ref=<span style=color:#2aa198>"asyncService"</span><span style=color:#268bd2>/></span>
+</code></pre></div><p>The Config is the same as the original interface.</p></li></ul></li><li><p>Consumer Side</p><ul><li>Config</li></ul><div class=highlight><pre 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=color:#268bd2><dubbo:reference</span> id=<span style=color:#2aa198>"asyncService"</span> timeout=<span style=color:#2aa198>"10000"</span> interface=<span style=color:#2aa19 [...]
+</code></pre></div><p>The Config is the same as the original interface.</p><ul><li>Call remote service</li></ul><div class=highlight><pre 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=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>[]</sp [...]
+ ClassPathXmlApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ClassPathXmlApplicationContext<span style=color:#719e07>(</span><span style=color:#719e07>new</span> String<span style=color:#719e07>[]{</span><span style=color:#2aa198>"META-INF/spring/async-consumer.xml"</span><span style=color:#719e07>});</span>
+ context<span style=color:#719e07>.</span>start<span style=color:#719e07>();</span>
+ <span style=color:#268bd2>final</span> AsyncService asyncService <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>AsyncService<span style=color:#719e07>)</span> context<span style=color:#719e07>.</span>getBean<span style=color:#719e07>(</span><span style=color:#2aa198>"asyncService"</span><span style=color:#719e07>);</span>
+
+ CompletableFuture<span style=color:#719e07><</span>String<span style=color:#719e07>></span> future <span style=color:#719e07>=</span> asyncService<span style=color:#719e07>.</span>sayHello<span style=color:#719e07>(</span><span style=color:#2aa198>"async call request"</span><span style=color:#719e07>);</span>
+ future<span style=color:#719e07>.</span>whenComplete<span style=color:#719e07>((</span>v<span style=color:#719e07>,</span> t<span style=color:#719e07>)</span> <span style=color:#719e07>-></span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>t <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span><span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ t<span style=color:#719e07>.</span>printStackTrace<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span> <span style=color:#719e07>else</span> <span style=color:#719e07>{</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"Response: "</span> <span style=color:#719e07>+</span> v<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>});</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"Executed before response return."</span><span style=color:#719e07>);</span>
+ System<span style=color:#719e07>.</span>in<span style=color:#719e07>.</span>read<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+</code></pre></div><p><code>CompletableFuture<String> future = asyncService.sayHello("async call request");</code>It is convenient to return the Future instance, which implements the asynchronous service call on the Consumer side.</p></li></ol><h2 id=example-2synchronous-interface-uses-annotation-processor>Example 2:Synchronous interface uses Annotation Processor</h2><p>This example demonstrates how to implement the Consumer-side asynchronous service call using the Annotation Processo [...]
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>GreetingsService</span> <span style=color:#719e07>{</span>
+ String <span style=color:#268bd2>sayHi</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>This is a generic definition of the Dubbo service interface. Note that add the @DubboAsync annotation when using Annotation Processor.</p><div class=highlight><pre 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=color:#268bd2><dependency></span>
+ <span style=color:#268bd2><groupId></span>com.alibaba<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>dubbo-async-processer<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>1.0.0-SNAPSHOT<span style=color:#268bd2></version></span>
+<span style=color:#268bd2></dependency></span>
+<span style=color:#268bd2><plugin></span>
+ <span style=color:#268bd2><groupId></span>org.apache.maven.plugins<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>maven-compiler-plugin<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>3.7.0<span style=color:#268bd2></version></span>
+ <span style=color:#268bd2><configuration></span>
+ <span style=color:#268bd2><source></span>1.8<span style=color:#268bd2></source></span>
+ <span style=color:#268bd2><target></span>1.8<span style=color:#268bd2></target></span>
+ <span style=color:#268bd2><annotationProcessorPaths></span>
+ <span style=color:#268bd2><path></span>
+ <span style=color:#268bd2><groupId></span>com.alibaba<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>dubbo-async-processer<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>1.0.0-SNAPSHOT<span style=color:#268bd2></version></span>
+ <span style=color:#268bd2></path></span>
+ <span style=color:#268bd2></annotationProcessorPaths></span>
+ <span style=color:#268bd2></configuration></span>
+<span style=color:#268bd2></plugin></span>
+</code></pre></div><p>The above config is the Maven dependency that imports dubbo-async-processer processor. Developers who define interfaces (providing APIs) usually add the above dependencies to the project, so that when doing API packaging, the following interface definitions will be automatically generated in APIs:</p><div class=highlight><pre 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=col [...]
+</span><span style=color:#586e75>* Generated by dubbo-async-processer
+</span><span style=color:#586e75>*/</span>
+<span style=color:#719e07>package</span> com.alibaba.dubbo.samples.api<span style=color:#719e07>;</span>
+<span style=color:#719e07>import</span> java.util.concurrent.CompletableFuture<span style=color:#719e07>;</span>
+<span style=color:#268bd2>@javax.annotation.Generated</span><span style=color:#719e07>(</span><span style=color:#2aa198>"com.alibaba.dubbo.async.processor.AsyncAnnotationProcessor"</span><span style=color:#719e07>)</span>
+<span style=color:#268bd2>@org.apache.dubbo.common.config.AsyncFor</span><span style=color:#719e07>(</span>com<span style=color:#719e07>.</span>alibaba<span style=color:#719e07>.</span>dubbo<span style=color:#719e07>.</span>samples<span style=color:#719e07>.</span>api<span style=color:#719e07>.</span>GreetingsService<span style=color:#719e07>.</span>class<span style=color:#719e07>)</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>GreetingsServiceAsync</span> <span style=color:#268bd2>extends</span> GreetingsService <span style=color:#719e07>{</span>
+CompletableFuture<span style=color:#719e07><</span>java<span style=color:#719e07>.</span>lang<span style=color:#719e07>.</span>String<span style=color:#719e07>></span> <span style=color:#268bd2>sayHiAsync</span><span style=color:#719e07>(</span>java<span style=color:#719e07>.</span>lang<span style=color:#719e07>.</span>String name<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div></li><li><p>Provider side</p><ul><li>Config</li></ul><div class=highlight><pre 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=color:#268bd2><bean</span> id=<span style=color:#2aa198>"greetingsService"</span> class=<span style=color:#2aa198>"com.alibaba.dubbo.samples.async.impl.GreetingsServiceImpl"</span><span style=color:#268bd2>/></span>
+<span style=color:#268bd2><dubbo:service</span> interface=<span style=color:#2aa198>"com.alibaba.dubbo.samples.api.GreetingsService"</span> ref=<span style=color:#2aa198>"greetingsService"</span><span style=color:#268bd2>/></span>
+</code></pre></div><ul><li>Service implementation</li></ul><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>GreetingsServiceImpl</span> <span style=color:#268bd2>implements</span> GreetingsService <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayHi</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"hi, "</span> <span style=color:#719e07>+</span> name<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div></li><li><p>Consumer side</p><ul><li>Config</li></ul><div class=highlight><pre 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=color:#268bd2><dubbo:reference</span> id=<span style=color:#2aa198>"greetingsService"</span> interface=<span style=color:#2aa198>"com.alibaba.dubbo.samples.api.GreetingsServiceAsync"</span><span style=color:#268bd2>/></span>
+</code></pre></div><p>Note that the service interface uses <strong>GreetingsServiceAsync</strong></p><ul><li>Service call</li></ul><div class=highlight><pre 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=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= [...]
+ ClassPathXmlApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ClassPathXmlApplicationContext<span style=color:#719e07>(</span><span style=color:#719e07>new</span> String<span style=color:#719e07>[]{</span><span style=color:#2aa198>"META-INF/spring/async-consumer.xml"</span><span style=color:#719e07>});</span>
+ context<span style=color:#719e07>.</span>start<span style=color:#719e07>();</span>
+
+ GreetingsServiceAsync greetingsService <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>GreetingsServiceAsync<span style=color:#719e07>)</span> context<span style=color:#719e07>.</span>getBean<span style=color:#719e07>(</span><span style=color:#2aa198>"greetingsService"</span><span style=color:#719e07>);</span>
+ CompletableFuture<span style=color:#719e07><</span>String<span style=color:#719e07>></span> future <span style=color:#719e07>=</span> greetingsService<span style=color:#719e07>.</span>sayHiAsync<span style=color:#719e07>(</span><span style=color:#2aa198>"async call reqeust"</span><span style=color:#719e07>);</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"async call ret :"</span> <span style=color:#719e07>+</span> future<span style=color:#719e07>.</span>get<span style=color:#719e07>());</span>
+
+ System<span style=color:#719e07>.</span>in<span style=color:#719e07>.</span>read<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+</code></pre></div><p>In this way, we can use <code>CompletableFuture<String> future = greetingsService.sayHiAsync("async call reqeust");</code> directly,and return CompletableFuture.</p></li></ol><h2 id=example-3use-asynccontext>Example 3:Use AsyncContext</h2><p>This example demonstrates how to implement the Provider-side asynchronous execution through AsyncContext based on the original synchronous interface. Code link <a href=https://github.com/apache/dubbo-samples/tree/master/dubbo [...]
+ String <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div></li><li><p>Provider side</p><ul><li>Config</li></ul><div class=highlight><pre 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=color:#268bd2><bean</span> id=<span style=color:#2aa198>"asyncService"</span> class=<span style=color:#2aa198>"com.alibaba.dubbo.samples.async.impl.AsyncServiceImpl"</span><span style=color:#268bd2>/></span>
+<span style=color:#268bd2><dubbo:service</span> async=<span style=color:#2aa198>"true"</span> interface=<span style=color:#2aa198>"com.alibaba.dubbo.samples.async.api.AsyncService"</span> ref=<span style=color:#2aa198>"asyncService"</span><span style=color:#268bd2>/></span>
+</code></pre></div><p>Note that adding <code>async="true"</code> indicates that this is a service that starts the Provider-side execution asynchronously.</p><ul><li>Asynchronous execution implementation</li></ul><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>AsyncServiceImpl</span [...]
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>final</span> AsyncContext asyncContext <span style=color:#719e07>=</span> RpcContext<span style=color:#719e07>.</span>startAsync<span style=color:#719e07>();</span>
+ <span style=color:#719e07>new</span> Thread<span style=color:#719e07>(()</span> <span style=color:#719e07>-></span> <span style=color:#719e07>{</span>
+ asyncContext<span style=color:#719e07>.</span>signalContextSwitch<span style=color:#719e07>();</span>
+ <span style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+ Thread<span style=color:#719e07>.</span>sleep<span style=color:#719e07>(</span>500<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span> <span style=color:#719e07>catch</span> <span style=color:#719e07>(</span>InterruptedException e<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ e<span style=color:#719e07>.</span>printStackTrace<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+ asyncContext<span style=color:#719e07>.</span>write<span style=color:#719e07>(</span><span style=color:#2aa198>"Hello "</span> <span style=color:#719e07>+</span> name <span style=color:#719e07>+</span> <span style=color:#2aa198>", response from provider."</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>}).</span>start<span style=color:#719e07>();</span>
+ <span style=color:#719e07>return</span> <span style=color:#cb4b16>null</span><span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div></li><li><p>Consumer side</p><ul><li>Config</li></ul><div class=highlight><pre 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=color:#268bd2><dubbo:reference</span> id=<span style=color:#2aa198>"asyncService"</span> interface=<span style=color:#2aa198>"com.alibaba.dubbo.samples.async.api.AsyncService"</span><span style=color:#268bd2>/></span>
+</code></pre></div><ul><li>Service call</li></ul><div class=highlight><pre 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=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:# [...]
+ ClassPathXmlApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ClassPathXmlApplicationContext<span style=color:#719e07>(</span><span style=color:#719e07>new</span> String<span style=color:#719e07>[]{</span><span style=color:#2aa198>"META-INF/spring/async-consumer.xml"</span><span style=color:#719e07>});</span>
+ context<span style=color:#719e07>.</span>start<span style=color:#719e07>();</span>
+
+ AsyncService asyncService <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>AsyncService<span style=color:#719e07>)</span> context<span style=color:#719e07>.</span>getBean<span style=color:#719e07>(</span><span style=color:#2aa198>"asyncService"</span><span style=color:#719e07>);</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span>asyncService<span style=color:#719e07>.</span>sayHello<span style=color:#719e07>(</span><span style=color:#2aa198>"async call request"</span><span style=color:#719e07>));</span>
+
+ System<span style=color:#719e07>.</span>in<span style=color:#719e07>.</span>read<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+</code></pre></div></li></ol><h2 id=new-problems-resulted-from-asynchronization>New problems resulted from asynchronization</h2><h3 id=filter-chain>Filter Chain</h3><p>The following is a complete Filter chain for a normal Dubbo call.</p><p>After using the asynchronous call, since the asynchronous result is executed separately in the asynchronous thread, the Result passed through the second half of the Filter chain is null, and the real result cannot be processed by the Filter chain when [...]
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>AsyncPostprocessFilter</span> <span style=color:#268bd2>extends</span> AbstractPostProcessFilter <span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> Result <span style=color:#268bd2>invoke</span><span style=color:#719e07>(</span>Invoker<span style=color:#719e07><?></span> invoker<span style=color:#719e07>,</span> Invocation invocation<span style=color:#719e07>)</span> <span style=color:#268bd2>throws</span> RpcException <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> postProcessResult<span style=color:#719e07>(</span>invoker<span style=color:#719e07>.</span>invoke<span style=color:#719e07>(</span>invocation<span style=color:#719e07>),</span> invoker<span style=color:#719e07>,</span> invocation<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>protected</span> Result <span style=color:#268bd2>doPostProcess</span><span style=color:#719e07>(</span>Result result<span style=color:#719e07>,</span> Invoker<span style=color:#719e07><?></span> invoker<span style=color:#719e07>,</span> Invocation invocation<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"Filter get the return value: "</span> <span style=color:#719e07>+</span> result<span style=color:#719e07>.</span>getValue<span style=color:#719e07>());</span>
+ <span style=color:#719e07>return</span> result<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h3 id=context-passing>Context passing</h3><p>Currently, the context we are considering mainly refers to the data stored in the RpcContext. In most scenarios, the user needs to complete the passing of the Context before switching the service thread.</p><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>c [...]
+ <span style=color:#586e75>// Save the context of the current thread
+</span><span style=color:#586e75></span> RpcContext context <span style=color:#719e07>=</span> RpcContext<span style=color:#719e07>.</span>getContext<span style=color:#719e07>();</span>
+ <span style=color:#268bd2>public</span> CompletableFuture<span style=color:#719e07><</span>String<span style=color:#719e07>></span> <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>return</span> CompletableFuture<span style=color:#719e07>.</span>supplyAsync<span style=color:#719e07>(()</span> <span style=color:#719e07>-></span> <span style=color:#719e07>{</span>
+ <span style=color:#586e75>// Set context into new thread
+</span><span style=color:#586e75></span> RpcContext<span style=color:#719e07>.</span>setContext<span style=color:#719e07>(</span>context<span style=color:#719e07>);</span>
+ <span style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+ Thread<span style=color:#719e07>.</span>sleep<span style=color:#719e07>(</span>5000<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span> <span style=color:#719e07>catch</span> <span style=color:#719e07>(</span>InterruptedException e<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ e<span style=color:#719e07>.</span>printStackTrace<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"async response from provider."</span><span style=color:#719e07>;</span>
+ <span style=color:#719e07>});</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>However, AsyncContext also provides the signalContextSwitch() method for a convenient Context switch.</p><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>AsyncServiceImpl</span> <span style=color:#268bd2>implements</span> AsyncService <span style=color:#719e07> [...]
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>final</span> AsyncContext asyncContext <span style=color:#719e07>=</span> RpcContext<span style=color:#719e07>.</span>startAsync<span style=color:#719e07>();</span>
+ <span style=color:#719e07>new</span> Thread<span style=color:#719e07>(()</span> <span style=color:#719e07>-></span> <span style=color:#719e07>{</span>
+ asyncContext<span style=color:#719e07>.</span>signalContextSwitch<span style=color:#719e07>();</span>
+ <span style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+ Thread<span style=color:#719e07>.</span>sleep<span style=color:#719e07>(</span>500<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span> <span style=color:#719e07>catch</span> <span style=color:#719e07>(</span>InterruptedException e<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ e<span style=color:#719e07>.</span>printStackTrace<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+ asyncContext<span style=color:#719e07>.</span>write<span style=color:#719e07>(</span><span style=color:#2aa198>"Hello "</span> <span style=color:#719e07>+</span> name <span style=color:#719e07>+</span> <span style=color:#2aa198>", response from provider."</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>}).</span>start<span style=color:#719e07>();</span>
+ <span style=color:#719e07>return</span> <span style=color:#cb4b16>null</span><span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5"><li><a href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/ class="btn btn-primary"><span class=mr-1>←</span> Previous</a></li><a href=/blog/2018/09/02/how-to-prepare-an-apache-release/ class="btn btn-primary">Next <span class=ml-1>→</span></a></li></ul></div></main></div></div><footer class="bg-dark py-5 row d-print-none"><div class="container-fluid mx-sm-5"><div c [...]
\ No newline at end of file
diff --git a/blog/2018/09/02/how-to-prepare-an-apache-release/index.html b/blog/2018/09/02/how-to-prepare-an-apache-release/index.html
new file mode 100644
index 00000000000..3702f5887fa
--- /dev/null
+++ b/blog/2018/09/02/how-to-prepare-an-apache-release/index.html
@@ -0,0 +1,283 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/prepare-an-apache-release.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+ [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=How%20to%20prepare%20an%20Apache%20Release" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#understanding-the-apache-release-cycle>Understanding the Apache Release Cycle</a></li><li><a href=#preparation-of-local-building-environment>Preparation of Local Building Environment</a></li><li><a href=#pack--upload>Pack & Upload</a><ul><li><a href=#note>Note</a></li></ul></li><li><a href=#prepare-apache-release>Prepare [...]
+$ gpg --version <span style=color:#586e75>#check version,should be 2.x</span>
+</code></pre></div></li><li><p>Generate the key with GPG</p><ul><li>Generate the key according to the prompt</li></ul><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell>$ gpg2 --full-gen-key
+gpg <span style=color:#719e07>(</span>GnuPG<span style=color:#719e07>)</span> 2.0.12; Copyright <span style=color:#719e07>(</span>C<span style=color:#719e07>)</span> <span style=color:#2aa198>2009</span> Free Software Foundation, Inc.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Please <span style=color:#719e07>select</span> what kind of key you want:
+ <span style=color:#719e07>(</span>1<span style=color:#719e07>)</span> RSA and RSA <span style=color:#719e07>(</span>default<span style=color:#719e07>)</span>
+ <span style=color:#719e07>(</span>2<span style=color:#719e07>)</span> DSA and Elgamal
+ <span style=color:#719e07>(</span>3<span style=color:#719e07>)</span> DSA <span style=color:#719e07>(</span>sign only<span style=color:#719e07>)</span>
+ <span style=color:#719e07>(</span>4<span style=color:#719e07>)</span> RSA <span style=color:#719e07>(</span>sign only<span style=color:#719e07>)</span>
+Your selection? <span style=color:#2aa198>1</span>
+RSA keys may be between <span style=color:#2aa198>1024</span> and <span style=color:#2aa198>4096</span> bits long.
+What keysize <span style=color:#719e07>do</span> you want? <span style=color:#719e07>(</span>2048<span style=color:#719e07>)</span> <span style=color:#2aa198>4096</span>
+Requested keysize is <span style=color:#2aa198>4096</span> bits
+Please specify how long the key should be valid.
+ <span style=color:#268bd2>0</span> <span style=color:#719e07>=</span> key does not expire
+ <n> <span style=color:#719e07>=</span> key expires in n days
+ <n>w <span style=color:#719e07>=</span> key expires in n weeks
+ <n>m <span style=color:#719e07>=</span> key expires in n months
+ <n>y <span style=color:#719e07>=</span> key expires in n years
+Key is valid <span style=color:#719e07>for</span>? <span style=color:#719e07>(</span>0<span style=color:#719e07>)</span>
+Key does not expire at all
+Is this correct? <span style=color:#719e07>(</span>y/N<span style=color:#719e07>)</span> y
+
+GnuPG needs to construct a user ID to identify your key.
+
+Real name: Robert Burrell Donkin
+Email address: rdonkin@apache.org
+Comment: CODE SIGNING KEY
+You selected this USER-ID:
+ <span style=color:#2aa198>"Robert Burrell Donkin (CODE SIGNING KEY) <rdonkin@apache.org>"</span>
+
+Change <span style=color:#719e07>(</span>N<span style=color:#719e07>)</span>ame, <span style=color:#719e07>(</span>C<span style=color:#719e07>)</span>omment, <span style=color:#719e07>(</span>E<span style=color:#719e07>)</span>mail or <span style=color:#719e07>(</span>O<span style=color:#719e07>)</span>kay/<span style=color:#719e07>(</span>Q<span style=color:#719e07>)</span>uit? O
+You need a Passphrase to protect your secret key. <span style=color:#586e75># enter the password, which will be used frequently when packaging.</span>
+</code></pre></div><ul><li>View key id</li></ul><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh>$ gpg --list-keys
+pub rsa4096/28681CB1 2018-04-26 <span style=color:#586e75># 28681CB1 is the key id</span>
+uid <span style=color:#719e07>[</span>ultimate<span style=color:#719e07>]</span> liujun <span style=color:#719e07>(</span>apache-dubbo<span style=color:#719e07>)</span> <liujun@apache.org>
+sub rsa4096/D3D6984B 2018-04-26
+
+<span style=color:#586e75>########### Note: Different diaplay for different version.</span>
+$ gpg --list-keys
+pub rsa4096 2018-11-12 <span style=color:#719e07>[</span>SC<span style=color:#719e07>]</span>
+ 63AAE9838F4A303E40BAF5FEA3A1CA7A5D4A3981 <span style=color:#586e75># Last 8 character(5D4A3981) as key id,it will be used when send public key to keyserver</span>
+uid <span style=color:#719e07>[</span> 绝对 <span style=color:#719e07>]</span> Victory Cao <span style=color:#719e07>(</span>CODE SIGNING KEY<span style=color:#719e07>)</span> <victory@apache.org>
+sub rsa4096 2018-11-12 <span style=color:#719e07>[</span>E<span style=color:#719e07>]</span>
+
+
+<span style=color:#586e75># send public key to keyserver via key id </span>
+$ gpg --keyserver pgpkeys.mit.edu --send-key 28681CB1
+<span style=color:#586e75># Here pgpkeys.mit.edu is a random selection of keyserver. Any key server from the list https://sks-keyservers.net/status/ is acceptable because they are automatically synchronized.</span>
+</code></pre></div><ul><li>If there are multiple public keys,you can set the default key</li></ul><p>~/.gnupg/gpg.conf</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback># If you have more than 1 secret key in your keyring, you may want to
+# uncomment the following option and set your preferred keyid.
+
+default-key 28681CB1
+</code></pre></div><ul><li>If there are multiple public keys, you can also delete unuseful key:</li></ul><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh><span style=color:#586e75>### Delete the private key first, then delete the public key.</span>
+
+$ gpg --yes --delete-secret-keys shenglicao2@gmail.com <span style=color:#586e75>### indicate email address </span>
+
+$ gpg --delete-keys 1808C6444C781C0AEA0AAD4C4D6A8007D20DB8A4
+
+</code></pre></div></li><li><p>Set up Apache central repository.</p><ul><li>The parent pom of Dubbo project is apache pom</li></ul><div class=highlight><pre 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=color:#268bd2><parent></span>
+<span style=color:#268bd2><groupId></span>org.apache<span style=color:#268bd2></groupId></span>
+<span style=color:#268bd2><artifactId></span>apache<span style=color:#268bd2></artifactId></span>
+<span style=color:#268bd2><version></span>19<span style=color:#268bd2></version></span>
+<span style=color:#268bd2></parent></span>
+</code></pre></div><ul><li><p>Add the following contents to .m2/settings.xml</p><p>Enter the passwords after
+encrypting by <a href=http://maven.apache.org/guides/mini/guide-encryption.html>maven-encryption-plugin</a></p></li></ul><div class=highlight><pre 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=color:#268bd2><settings></span>
+...
+ <span style=color:#268bd2><servers></span>
+ <span style=color:#586e75><!-- To publish a snapshot of some part of Maven --></span>
+ <span style=color:#268bd2><server></span>
+ <span style=color:#268bd2><id></span>apache.snapshots.https<span style=color:#268bd2></id></span>
+ <span style=color:#268bd2><username></span> <span style=color:#586e75><!-- YOUR APACHE LDAP USERNAME --></span> <span style=color:#268bd2></username></span>
+ <span style=color:#268bd2><password></span> <span style=color:#586e75><!-- YOUR APACHE LDAP PASSWORD (encrypted) --></span> <span style=color:#268bd2></password></span>
+ <span style=color:#268bd2></server></span>
+ <span style=color:#586e75><!-- To stage a release of some part of Maven --></span>
+ <span style=color:#268bd2><server></span>
+ <span style=color:#268bd2><id></span>apache.releases.https<span style=color:#268bd2></id></span>
+ <span style=color:#268bd2><username></span> <span style=color:#586e75><!-- YOUR APACHE LDAP USERNAME --></span> <span style=color:#268bd2></username></span>
+ <span style=color:#268bd2><password></span> <span style=color:#586e75><!-- YOUR APACHE LDAP PASSWORD (encrypted) --></span> <span style=color:#268bd2></password></span>
+ <span style=color:#268bd2></server></span>
+ ...
+ <span style=color:#586e75><!-- gpg passphrase used when generate key --></span>
+ <span style=color:#268bd2><server></span>
+ <span style=color:#268bd2><id></span>gpg.passphrase<span style=color:#268bd2></id></span>
+ <span style=color:#268bd2><passphrase></span><span style=color:#586e75><!-- yourKeyPassword --></span><span style=color:#268bd2></passphrase></span>
+ <span style=color:#268bd2></server></span>
+ <span style=color:#268bd2></servers></span>
+<span style=color:#268bd2></settings></span>
+</code></pre></div></li></ol><h2 id=pack--upload>Pack & Upload</h2><ol><li><p>Pull the new branch from the master branch as the release branch. If you want to release the ${release_version} version now, pull the new branch ${release_version}-release from 2.6.x. Then the
+modifications and taggings related to ${release_version} Release Candidates are applied to ${release_version}-release branch, and is merged into the master branch after the final release.</p></li><li><p>First of all, verify that the maven component packing, source packing, signature, etc are working properly on the ${release_version}-release branch.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shel [...]
+$ mvn deploy
+</code></pre></div></li></ol><p>This push the snapshot package to the maven central repository.</p><ol start=3><li><p>Release with maven-release-plugin</p><ul><li>verify with dryRun</li></ul><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell>$ mvn release:prepare -Prelease -Darguments<span style=color:#719e07>=</span><span style=color:#2aa198>"-Dmaven.test.skip=true"</span> -Da [...]
+</code></pre></div><ul><li>After verification, run release:prepare</li></ul><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell>$ mvn release:clean
+$ mvn release:prepare -Prelease -Darguments<span style=color:#719e07>=</span><span style=color:#2aa198>"-Dmaven.test.skip=true"</span> -DautoVersionSubmodules<span style=color:#719e07>=</span><span style=color:#b58900>true</span> -Dusername<span style=color:#719e07>=</span>YOUR GITHUB ID -DpushChanges<span style=color:#719e07>=</span><span style=color:#b58900>false</span>
+</code></pre></div><blockquote><p>If you are promted to input password for pushing to GitHub (basically including adding new commits and tags), do not input your login password of GitHub. Use <code>Personal access tokens</code> instead. You can go to <a href=https://github.com/settings/profile,>https://github.com/settings/profile,</a> click <code>Developer settings</code> -> <code>Personal access tokens</code>, and generate a new token if not. Please refer to this <a href=https://help.gi [...]
+you need to choose the release artifactId, next artifactId and the release tag, the default tag is dubbo-parent-xxxx, you need to change it to dubbo-xxxx</p></blockquote><p>After executing the above commands, you will find that:</p><ol><li>source-release.zip and bin-release.zip are generated under dubbo-distribution directory, please unzip it and check the file structure</li><li><code>-DpushChanges=false</code> tells maven not to push the commits and tags to the remote repostiroy. If not [...]
+</code></pre></div><p>Maven will download the source code from the tag you just pushed, compile it, and deploy to remote maven repsoitry in staging state.</p></li></ol><h3 id=note>Note</h3><blockquote><p>When you deploy the package into repository, it will be interrupted for network. So you must restart to desploy.<br>The problem is that missing package occurred many times at deploying. So you should check the quantity of package, especially parent package.</p></blockquote><h2 id=prepare [...]
+</code></pre></div><p>Assume that the local directory is <code>~/apache/incubator/dubbo</code></p></li><li><p>The current release version is ${release_version}, new directory</p><div class=highlight><pre 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=color:#b58900>cd</span> ~/apache/incubator/dubbo <span style=color:#586e75># dubbo svn root directory</span>
+$ mkdir <span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>
+</code></pre></div></li><li><p>Add public key to <a href=https://dist.apache.org/repos/dist/dev/incubator/dubbo/KEYS>KEYS</a> file if you are the first time to be a release manager. KEYS is mainly used to allow people who participate in the voting to be imported locally to verify the correctness of the sign.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell>$ gpg -a --export your_k [...]
+</code></pre></div><p>For more information on how to get your key id, please refer to this <a href=https://help.github.com/articles/generating-a-new-gpg-key/>guide</a></p></li><li><p>Copy the source.zip package from the Dubbo root directory to the svn local repository dubbo/${release_version}</p></li><li><p>Generate sha512 sign</p><p>For source-release.zip</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=langua [...]
+</code></pre></div><p>For bin-release.zip</p><p>Please add <code>-b</code> paramter when generating sha512 for bin-release.zip, which indicates it is a binary file.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell>$ shasum -b -a <span style=color:#2aa198>512</span> apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2a [...]
+</code></pre></div><p>You should generate something like this:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>b8f13d1df6d6c9a1facc72fafc00b2d22bea1e600517c507467d8fca2f776a7a3877101742da53114bfa629ca5b941eb4d9ef989de43f0833e2a794e7ccf5c8a *apache-dubbo-spring-boot-project-2.7.0-bin-release.zip
+</code></pre></div><p>Note there is a <code>*</code> sign before the file name.</p></li><li><p>If the binary release is accompanied with the source release. Run the following command in the dubbo-distribution module:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell>$ mvn install
+</code></pre></div><p>Go to target directory, copy bin-release.zip and bin-release.zip.asc to svn local repository dubbo/${release_version}, and refer to step 6 to generate sha512 sign.</p></li><li><p>Commit to Apache svn</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell>$ svn status
+$ svn commit -m <span style=color:#2aa198>'prepare for ${release_version} RC1'</span>
+</code></pre></div></li></ol><h2 id=verify-release-candidates>Verify Release Candidates</h2><p><strong>A full check list can be found <a href=https://wiki.apache.org/incubator/IncubatorReleaseChecklist>here</a></strong></p><p>The verification link includes but is not limited to the following contents and forms:</p><h3 id=check-signatures-and-hashes-are-good>Check signatures and hashes are good</h3><h4 id=check-the-sha512-sum>check the sha512 sum</h4><div class=highlight><pre style=color: [...]
+$ shasum -c apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-bin-release.zip.sha512
+</code></pre></div><h4 id=check-the-gpg-signarure>check the gpg signarure</h4><p>If it’s your first time verify a release candidte, you should import public keys first.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh> $ curl https://dist.apache.org/repos/dist/dev/incubator/dubbo/KEYS >> KEYS <span style=color:#586e75># download public keys to local directory</span>
+ $ gpg --import KEYS <span style=color:#586e75># import keys</span>
+ $ gpg —edit-key liujun
+ > trust <span style=color:#586e75># type trust command</span>
+</code></pre></div><p>Now, you can verify signature with command</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh>gpg --verify apache-dubbo-2.6.3-source-release.zip.asc apache-dubbo-2.6.3-source-release.zip
+gpg --verify apache-dubbo-2.6.3-bin-release.zip.asc apache-dubbo-2.6.3-bin-release.zip
+</code></pre></div><h3 id=check-source-release-file-content>Check source release file content</h3><p>Unzip apache-dubbo-${release_version}-source-release.zip to the default directory and check the following:</p><ul><li>Directory with ‘incubating’ in name
+<code>apache-dubbo-${release_version}-source-release</code></li><li>DISCLAIMER exists</li><li>LICENSE and NOTICE exists and contents are good</li><li>All files and no binary files exist</li><li>All files has standard ASF License header</li><li>Can compile from source</li><li>All unit tests can pass<div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh>mvn clean <span style=color:#b58900>test</sp [...]
+<span style=color:#586e75># you can also open rat and style plugin to check if every file meets requirements.</span>
+mvn clean <span style=color:#b58900>test</span> -Drat.skip<span style=color:#719e07>=</span><span style=color:#b58900>false</span> -Dcheckstyle.skip<span style=color:#719e07>=</span><span style=color:#b58900>false</span>
+</code></pre></div></li><li>Release candidates match with corresponding tags, you can find tag link and hash in vote email.<ul><li>check the version number in pom.xml are the same</li><li>check there are no extra files or directories in the source package, for example, no empty directories or useless log files.<br><code>diff -r rc_dir tag_dir</code></li><li>check the top n tag commits, dive into the related files and check if the source package has the same changes</li></ul></li></ul><h3 [...]
+
+This is a call for vote to release Apache Dubbo (Incubating) version 2.6.2.
+
+The release candidates:
+https://dist.apache.org/repos/dist/dev/incubator/dubbo/2.6.2/
+
+Git tag for the release:
+https://github.com/apache/dubbo/tree/dubbo-2.6.2
+
+Hash for the release tag:
+afab04c53edab38d52275d2a198ea1aff7a4f41e
+
+Release Notes:
+https://github.com/apache/dubbo/releases/tag/untagged-4775c0a22c60fca55118
+
+The artifacts have been signed with Key : 28681CB1, which can be found in the keys file:
+https://dist.apache.org/repos/dist/dev/incubator/dubbo/KEYS
+
+The vote will be open for at least 72 hours or until necessary number of votes are reached.
+
+Please vote accordingly:
+
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+Thanks,
+The Apache Dubbo (Incubating) Team
+</code></pre></div><p>The mail template for Apache Incubator vote:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text>Hello all,
+
+This is a call for vote to release Apache Dubbo (Incubating) version 2.6.4.
+
+The Apache Dubbo community has voted on and approved a proposal to release
+Apache Dubbo (Incubating) version 2.6.4.
+
+We now kindly request the Incubator PMC members review and vote on this
+incubator release.
+
+Apache Dubbo™ is a high-performance, java based, open source
+RPC framework. Dubbo offers three key functionalities, which include
+interface based remote call, fault tolerance & load balancing, and
+automatic service registration & discovery.
+
+Dubbo community vote and result thread:
+https://lists.apache.org/thread.html/8d5c39eece6288beed2e22ca976350728c571d2a9cef1c9a9e56a409@%3Cdev.dubbo.apache.org%3E
+A minor issue also can be found in the above thread.
+
+The release candidates (RC1):
+https://dist.apache.org/repos/dist/dev/incubator/dubbo/2.6.4
+
+Git tag for the release (RC1):
+https://github.com/apache/dubbo/tree/dubbo-2.6.4
+
+Hash for the release tag:
+88037747a3b69d3225c73f6fbcda36ebd8435887
+
+Release Notes:
+*https://github.com/apache/dubbo/blob/dubbo-2.6.4/CHANGES.md
+<https://github.com/apache/dubbo/blob/dubbo-2.6.4/CHANGES.md>*
+
+The artifacts have been signed with Key : 7955FB6D1DD21CF7, which can be
+found in the keys file:
+https://dist.apache.org/repos/dist/dev/incubator/dubbo/KEYS
+
+Look at here for how to verify this release candidate:
+https://github.com/apache/dubbo-website/blob/asf-site/blog/en-us/prepare-an-apache-release.md#prepare-apache-release
+
+The vote will be open for at least 72 hours or until necessary number of
+votes are reached.
+
+Please vote accordingly:
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+Thanks,
+The Apache Dubbo (Incubating) Team
+</code></pre></div><p>The mail template to announce the vote result:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text>We’ve received 3 +1 binding votes and one +1 non-binding vote:
+
++1 binding, Ian Luo
++1 binding, Huxing Zhang
++1 binding, Jun Liu
+
++1 non-binding, Jerrick
+
+I will create a new vote thread in Apache community now.
+
+Best regards,
+The Apache Dubbo (Incubating) Team
+</code></pre></div><h2 id=official-release>Official Release</h2><p>When the release vote has passed,</p><ol><li>Add the release files to <a href=https://dist.apache.org/repos/dist/release/incubator/dubbo>official release directory</a></li><li>Remove the release files in <a href=https://dist.apache.org/repos/dist/dev/incubator/dubbo>dev directory</a></li><li>Remove the the release file for the previous release under <a href=https://dist.apache.org/repos/dist/release/incubator/dubbo/>offic [...]
+The mail template to announce release:</li></ol><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text>Hello Community,
+
+The Apache Dubbo team is pleased to announce that the
+2.6.6 has just been released.
+
+Apache Dubbo™ is a high-performance, java based, open source
+RPC framework. Dubbo offers three key functionalities, which include
+interface based remote call, fault tolerance & load balancing, and
+automatic service registration & discovery.
+
+Both the source release[1] and the maven binary release[2] are available
+now, you can also find the detailed release notes in here[3].
+
+
+If you have any usage questions, or have problems when upgrading or find
+any problems about enhancements included in this release, please don’t
+hesitate to let us know by sending feedback to this mailing list or filing
+an issue on GitHub[4].
+
+
+
+=====
+*Disclaimer*
+
+Apache Dubbo is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet [...]
+
+
+[1] http://dubbo.apache.org/en-us/blog/download.html
+[2] http://central.maven.org/maven2/com/alibaba/dubbo
+[3] https://github.com/apache/dubbo/releases
+[4] https://github.com/apache/dubbo/issues
+
+</code></pre></div><h2 id=complete-maven-convenient-binary-release>Complete Maven Convenient Binary release</h2><p><strong><a href=https://repository.apache.org/>repository.apache.org</a> The permissions of the nexus repository have been applied, see <a href=https://issues.apache.org/jira/browse/INFRA-16451>jira</a>。</strong></p><p>To release the maven artifacts, go to <a href=https://repository.apache.org>repository.apache.org</a>, and choose the staging repository, click the release bu [...]
+</code></pre></div><ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5"><li><a href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/ class="btn btn-primary"><span class=mr-1>←</span> Previous</a></li><a href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/ class="btn btn-primary">Next <span class=ml-1>→</span></a></li></ul></div></main></div></div><footer class="bg-dark py-5 row d-print-none"><div class="container-fluid [...]
\ No newline at end of file
diff --git a/blog/2018/09/30/integrate-dubbo-with-kubernetes/index.html b/blog/2018/09/30/integrate-dubbo-with-kubernetes/index.html
new file mode 100644
index 00000000000..4506a854f7f
--- /dev/null
+++ b/blog/2018/09/30/integrate-dubbo-with-kubernetes/index.html
@@ -0,0 +1,52 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-k8s.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+t [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Integrate%20Dubbo%20with%20Kubernetes" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role=main><a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href=/blog/news/index.xml target=_blank>RSS <i class="fa fa-rss ml-2"></i></a><div class=td-content><h1>Integrate Dubbo with Kubernetes</h1><div class=lead>This article will try to register Dubbo service to Kubernetes and integ [...]
+Dubbo’s consumer directly discovers the corresponding service endpoints of Kubernetes during service discovery procedure, thereby reusing Dubbo’s existing microservice channel capabilities.The benefit is that there is no need to rely on any third-party soft-loaded registry and it can be seamlessly integrated into the multi-tenant security system of Kubernetes. Reference demo : <a href=https://github.com/dubbo/dubbo-Kubernetes>https://github.com/dubbo/dubbo-ubernetes</a></p><h [...]
+<img src=https://img.alicdn.com/tfs/TB1m.tEtrorBKNjSZFjXXc_SpXa-1892-870.png alt=img></p></li><li><p>Click Manage enter the repository details page. Click Build in images service panel, construct the demo into image and publish it to the specified repository. As shown below.
+<img src=https://img.alicdn.com/tfs/TB1oYqvtcIrBKNjSZK9XXagoVXa-1872-888.png alt=img></p></li><li><p>Switch to Enterprise Distributed Application Services (EDAS) products panel, visit Resource Management -> Clusters. Create Kubernetes cluster and bind ECS. As shown below.
+<img src=https://img.alicdn.com/tfs/TB1b1p2trZnBKNjSZFKXXcGOVXa-1858-833.png alt=img></p></li><li><p>Application Management -> Create application, type Kubernetes application and specify the image in the container registry . As shown below.
+<img src=https://img.alicdn.com/tfs/TB1_YywtDCWBKNjSZFtXXaC3FXa-1737-588.png alt=img></p><p><img src=https://img.alicdn.com/tfs/TB18uzTtdcnBKNjSZR0XXcFqFXa-1820-861.png alt></p></li><li><p>After creation , then deploy applications. As shown below.
+<img src=https://img.alicdn.com/tfs/TB1fEpEtrorBKNjSZFjXXc_SpXa-1846-783.png alt></p></li></ol><ul><li><p>The supplementary application name cannot have uppercase letters, all lowercase, otherwise there is a problem of deployment failure.</p></li><li><p>When creating an app, after selecting the image, the next button cannot be clicked and you need to click Choose to continue.</p></li><li><p>EDAS has two independent Kubernetes services, one based on Alibaba Cloud’s container service [...]
+ <span style=color:#268bd2>"kind"</span>: <span style=color:#2aa198>"Pod"</span>,
+ <span style=color:#268bd2>"namespace"</span>: <span style=color:#2aa198>"lzumwsrddf831iwarhehd14zh2-default"</span>,
+ <span style=color:#268bd2>"name"</span>: <span style=color:#2aa198>"dubbo-k8s-demo-610694273-jq238"</span>,
+ <span style=color:#268bd2>"uid"</span>: <span style=color:#2aa198>"12892e67-8bc8-11e8-b96a-00163e02c37b"</span>,
+ <span style=color:#268bd2>"apiVersion"</span>: <span style=color:#2aa198>"v1"</span>,
+ <span style=color:#268bd2>"resourceVersion"</span>: <span style=color:#2aa198>"850282769"</span>
+}, <span style=color:#2aa198>"reason"</span>: <span style=color:#2aa198>"FailedSync"</span>, <span style=color:#2aa198>"message"</span>: <span style=color:#2aa198>"Error syncing pod"</span>, "
+</code></pre></div><ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5"><li><a href=/blog/2018/09/02/how-to-prepare-an-apache-release/ class="btn btn-primary"><span class=mr-1>←</span> Previous</a></li><a href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/ class="btn btn-primary">Next <span class=ml-1>→</span></a></li></ul></div></main></div></div><footer class="bg-dark py-5 row d-print-none"><div class="container-fluid mx-sm-5"><div class=row><div [...]
\ No newline at end of file
diff --git a/blog/2018/10/05/introduction-to-the-dubbo-protocol/index.html b/blog/2018/10/05/introduction-to-the-dubbo-protocol/index.html
new file mode 100644
index 00000000000..1f670341ae0
--- /dev/null
+++ b/blog/2018/10/05/introduction-to-the-dubbo-protocol/index.html
@@ -0,0 +1,61 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-protocol.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+ [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Introduction%20to%20the%20Dubbo%20protocol" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#the-concept-of-the-protocol>The concept of the protocol</a><ul><li><a href=#what-is-the-protocol>What is the protocol</a></li><li><a href=#the-definition-of-codec>The definition of <code>Codec</code></a></li></ul></li><li><a href=#common-protocol-mode>Common protocol mode</a><ul><li><a href=#fixed-length-protocol>Fixed-l [...]
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>Codec2</span> <span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>@Adaptive</span><span style=color:#719e07>({</span>Constants<span style=color:#719e07>.</span>CODEC_KEY<span style=color:#719e07>})</span>
+ <span style=color:#dc322f>void</span> <span style=color:#268bd2>encode</span><span style=color:#719e07>(</span>Channel channel<span style=color:#719e07>,</span> ChannelBuffer buffer<span style=color:#719e07>,</span> Object message<span style=color:#719e07>)</span> <span style=color:#268bd2>throws</span> IOException<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>@Adaptive</span><span style=color:#719e07>({</span>Constants<span style=color:#719e07>.</span>CODEC_KEY<span style=color:#719e07>})</span>
+ Object <span style=color:#268bd2>decode</span><span style=color:#719e07>(</span>Channel channel<span style=color:#719e07>,</span> ChannelBuffer buffer<span style=color:#719e07>)</span> <span style=color:#268bd2>throws</span> IOException<span style=color:#719e07>;</span>
+
+
+ <span style=color:#268bd2>enum</span> DecodeResult <span style=color:#719e07>{</span>
+ NEED_MORE_INPUT<span style=color:#719e07>,</span> SKIP_SOME_INPUT
+ <span style=color:#719e07>}</span>
+
+<span style=color:#719e07>}</span>
+</code></pre></div><p><code>Codec</code> works on a protocol, <code>encode</code> method means to encode the communication object to the <code>ByteBufferWrapper</code>, and <code>decode</code> method decodes the <code>ChannelBuffer</code> read from the network into <code>Object</code>, which is the communication object.</p><h2 id=common-protocol-mode>Common protocol mode</h2><p>Protocols in application layer have three general forms: fixed-length protocol, special delimiter protocol and [...]
+|fixed-length |
++————————————————+
+|variable content|
++————————————————+
+</code></pre></div><blockquote><p>Refer to Netty’s <code>LengthFieldBasedFrameDecoder</code></p></blockquote><p>The Dubbo protocol is actually a variable length protocol, which is covered in more detail in later chapters.</p><h2 id=the-dubbo-protocol>The Dubbo protocol</h2><h3 id=overview-to-the-dubbo-protocol>Overview to the Dubbo protocol</h3><p>The Dubbo framework defines a proprietary RPC protocol in which the specific content of the request and response protocols is presented [...]
+Service name bytes (line break)
+...
+</code></pre></div><h2 id=advantages-and-disadvantages-about-the-dubbo-protocol>Advantages and disadvantages about the Dubbo protocol</h2><h3 id=advantages>Advantages</h3><ul><li>The protocol is designed to be very compact. The data type can be represented by 1 bit will not be represented by a byte, such as a boolean type identifier.</li><li>The request header is the same as response header, and the specific content is assembled to the variable part through the serializer, and it is simp [...]
\ No newline at end of file
diff --git a/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/index.html b/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/index.html
new file mode 100644
index 00000000000..10761ee7a39
--- /dev/null
+++ b/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/index.html
@@ -0,0 +1,343 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-registry-nacos-integration.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+mat [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Dubbo%20Integrates%20with%20Nacos%20to%20Become%20a%20Registry" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#preparation-works>Preparation Works</a></li><li><a href=#get-started-quickly>Get Started Quickly</a></li><li><a href=#increase-maven-dependency>Increase Maven Dependency</a></li><li><a href=#configure-the-registry>Configure the Registry</a></li><li><a href=#dubbo-spring-externalization-configuration>Dubbo Spring External [...]
+
+ ...
+
+ <span style=color:#586e75><!-- Dubbo Nacos registry dependency --></span>
+ <span style=color:#268bd2><dependency></span>
+ <span style=color:#268bd2><groupId></span>org.apache<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>dubbo-registry-nacos<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>0.0.2<span style=color:#268bd2></version></span>
+ <span style=color:#268bd2></dependency></span>
+
+ <span style=color:#586e75><!-- Keep latest Nacos client version --></span>
+ <span style=color:#268bd2><dependency></span>
+ <span style=color:#268bd2><groupId></span>org.apache.nacos<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>nacos-client<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>[0.6.1,)<span style=color:#268bd2></version></span>
+ <span style=color:#268bd2></dependency></span>
+
+ <span style=color:#586e75><!-- Dubbo dependency --></span>
+ <span style=color:#268bd2><dependency></span>
+ <span style=color:#268bd2><groupId></span>org.apache<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>dubbo<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>2.6.5<span style=color:#268bd2></version></span>
+ <span style=color:#268bd2></dependency></span>
+
+ <span style=color:#586e75><!-- Alibaba Spring Context extension --></span>
+ <span style=color:#268bd2><dependency></span>
+ <span style=color:#268bd2><groupId></span>org.apache.spring<span style=color:#268bd2></groupId></span>
+ <span style=color:#268bd2><artifactId></span>spring-context-support<span style=color:#268bd2></artifactId></span>
+ <span style=color:#268bd2><version></span>1.0.2<span style=color:#268bd2></version></span>
+ <span style=color:#268bd2></dependency></span>
+
+ ...
+
+<span style=color:#268bd2></dependencies></span>
+</code></pre></div><p>When you add dubbo-registry-nacos to your project, you don’t need to programmatically implement the service discovery and registration logic, the actual implementation is provided by the third-party package, and then to configure the Naocs registry.</p><h2 id=configure-the-registry>Configure the Registry</h2><p>Assuming your Dubbo application is assembled by the Spring Framework, there are two configuration options: Dubbo Spring externalization configuration a [...]
+dubbo.application.name = your-dubbo-application
+
+## Zookeeper registry address
+dubbo.registry.address = zookeeper://10.20.153.10:2181
+...
+</code></pre></div><p>Assuming your Nacos Server is also running on server 10.20.153.10 and using the default Nacos service port 8848, you can simply adjust the dubbo.registry.address property as follows:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback>## 其他属性保持不变
+
+## Nacos registry address
+dubbo.registry.address = nacos://10.20.153.10:8848
+...
+</code></pre></div><p>Subsequently, restart your Dubbo application, and Dubbo’s service delivery and consumption information can be displayed in the Nacos console:</p><p><img src=/imgs/blog/dubbo-registry-nacos-1.png alt=image-20181213103845976></p><p>As shown in the figure, the service name prefixed with providers: is the meta-information for the service provider, and consumers: represents the meta-information of the service consumer. Click “Details” to view service st [...]
+<span style=color:#268bd2><beans</span> xmlns=<span style=color:#2aa198>"http://www.springframework.org/schema/beans"</span>
+ xmlns:xsi=<span style=color:#2aa198>"http://www.w3.org/2001/XMLSchema-instance"</span>
+ xmlns:dubbo=<span style=color:#2aa198>"http://dubbo.apache.org/schema/dubbo"</span>
+ xsi:schemaLocation=<span style=color:#2aa198>"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"</span><span style=color:#268bd2>></span>
+
+ <span style=color:#586e75><!-- Provider application information for dependency calculation --></span>
+ <span style=color:#268bd2><dubbo:application</span> name=<span style=color:#2aa198>"dubbo-provider-xml-demo"</span> <span style=color:#268bd2>/></span>
+
+ <span style=color:#586e75><!-- Using the Zookeeper registry Zookeeper --></span>
+ <span style=color:#268bd2><dubbo:registry</span> address=<span style=color:#2aa198>"zookeeper://10.20.153.10:2181"</span> <span style=color:#268bd2>/></span>
+ ...
+<span style=color:#268bd2></beans></span>
+</code></pre></div><p>Similar to the Dubbo Spring externalization configuration, simply adjust the address property configuration:</p><div class=highlight><pre 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=color:#719e07><?xml version="1.0" encoding="UTF-8"?></span>
+<span style=color:#268bd2><beans</span> xmlns=<span style=color:#2aa198>"http://www.springframework.org/schema/beans"</span>
+ xmlns:xsi=<span style=color:#2aa198>"http://www.w3.org/2001/XMLSchema-instance"</span>
+ xmlns:dubbo=<span style=color:#2aa198>"http://dubbo.apache.org/schema/dubbo"</span>
+ xsi:schemaLocation=<span style=color:#2aa198>"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"</span><span style=color:#268bd2>></span>
+
+ <span style=color:#586e75><!-- Provider application information for dependency calculation--></span>
+ <span style=color:#268bd2><dubbo:application</span> name=<span style=color:#2aa198>"dubbo-provider-xml-demo"</span> <span style=color:#268bd2>/></span>
+
+ <span style=color:#586e75><!-- Using the Nacos registry --></span>
+ <span style=color:#268bd2><dubbo:registry</span> address=<span style=color:#2aa198>"nacos://10.20.153.10:8848"</span> <span style=color:#268bd2>/></span>
+ ...
+<span style=color:#268bd2></beans></span>
+</code></pre></div><p>Once you restart the Dubbo application, you can also see that the registration meta-information for both service providers and consumers is presented in the Nacos console:</p><p><img src=/imgs/blog/dubbo-registry-nacos-3.png alt=image-20181213113049185></p><p>Do you absolutely configure or switch Nacos registry super Easy? If you want to get more or unclear, refer to the complete example below.</p><h2 id=complete-example>Complete Example</h2><p>The metadata in the a [...]
+
+<span style=color:#586e75>/**
+</span><span style=color:#586e75> * DemoService
+</span><span style=color:#586e75> *
+</span><span style=color:#586e75> * @since 2.7.4
+</span><span style=color:#586e75> */</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>DemoService</span> <span style=color:#719e07>{</span>
+
+ String <span style=color:#268bd2>sayName</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>);</span>
+
+<span style=color:#719e07>}</span>
+</code></pre></div><p>Provide implementation classes for the above interfaces:</p><div class=highlight><pre 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=color:#719e07>package</span> org.apache.dubbo.demo.service<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> org.apache.dubbo.config.annotation.Service<span style=color:#719e07>;</span>
+<span style=color:#719e07>import</span> org.apache.dubbo.rpc.RpcContext<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> org.springframework.beans.factory.annotation.Value<span style=color:#719e07>;</span>
+
+<span style=color:#586e75>/**
+</span><span style=color:#586e75> * Default {@link DemoService}
+</span><span style=color:#586e75> *
+</span><span style=color:#586e75> * @since 2.7.4
+</span><span style=color:#586e75> */</span>
+<span style=color:#268bd2>@Service</span><span style=color:#719e07>(</span>version <span style=color:#719e07>=</span> <span style=color:#2aa198>"${demo.service.version}"</span><span style=color:#719e07>)</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DefaultService</span> <span style=color:#268bd2>implements</span> DemoService <span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>@Value</span><span style=color:#719e07>(</span><span style=color:#2aa198>"${demo.service.name}"</span><span style=color:#719e07>)</span>
+ <span style=color:#268bd2>private</span> String serviceName<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayName</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ RpcContext rpcContext <span style=color:#719e07>=</span> RpcContext<span style=color:#719e07>.</span>getContext<span style=color:#719e07>();</span>
+ <span style=color:#719e07>return</span> String<span style=color:#719e07>.</span>format<span style=color:#719e07>(</span><span style=color:#2aa198>"Service [name :%s , port : %d] %s(\"%s\") : Hello,%s"</span><span style=color:#719e07>,</span>
+ serviceName<span style=color:#719e07>,</span>
+ rpcContext<span style=color:#719e07>.</span>getLocalPort<span style=color:#719e07>(),</span>
+ rpcContext<span style=color:#719e07>.</span>getMethodName<span style=color:#719e07>(),</span>
+ name<span style=color:#719e07>,</span>
+ name<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>Once the interface and implementation are ready, the annotation-driven and XML configuration-driven implementations will be used below.</p><h2 id=spring-annotation-driven-example>Spring Annotation-driven Example</h2><p>Dubbo 2.7.4 reconstructs the Spring annotation-driven programming model.</p><h3 id=service-provider-annotation-driven-implementation>Service Provider Annotation-driven Implementation</h3><ul><li>Define property source of Dubbo provider externalization [...]
+dubbo.application.name = dubbo-provider-demo
+
+## Nacos registry address
+dubbo.registry.address = nacos://127.0.0.1:8848
+
+## Dubbo Protocol
+dubbo.protocol.name = dubbo
+dubbo.protocol.port = -1
+
+# Provider @Service version
+demo.service.version=1.0.0
+demo.service.name = demoService
+</code></pre></div><ul><li>Implement service provider bootstrap - DemoServiceProviderBootstrap</li></ul><div class=highlight><pre 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=color:#719e07>package</span> org.apache.dubbo.demo.provider<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> org.apache.dubbo.config.spring.context.annotation.EnableDubbo<span style=color:#719e07>;</span>
+<span style=color:#719e07>import</span> org.apache.dubbo.demo.service.DemoService<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> org.springframework.context.annotation.AnnotationConfigApplicationContext<span style=color:#719e07>;</span>
+<span style=color:#719e07>import</span> org.springframework.context.annotation.PropertySource<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> java.io.IOException<span style=color:#719e07>;</span>
+
+<span style=color:#586e75>/**
+</span><span style=color:#586e75> * {@link DemoService} provider demo
+</span><span style=color:#586e75> */</span>
+<span style=color:#268bd2>@EnableDubbo</span><span style=color:#719e07>(</span>scanBasePackages <span style=color:#719e07>=</span> <span style=color:#2aa198>"org.apache.dubbo.demo.service"</span><span style=color:#719e07>)</span>
+<span style=color:#268bd2>@PropertySource</span><span style=color:#719e07>(</span>value <span style=color:#719e07>=</span> <span style=color:#2aa198>"classpath:/provider-config.properties"</span><span style=color:#719e07>)</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoServiceProviderBootstrap</span> <span style=color:#719e07>{</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> IOException <span style=color:#719e07>{</span>
+ AnnotationConfigApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> AnnotationConfigApplicationContext<span style=color:#719e07>();</span>
+ context<span style=color:#719e07>.</span>register<span style=color:#719e07>(</span>DemoServiceProviderBootstrap<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+ context<span style=color:#719e07>.</span>refresh<span style=color:#719e07>();</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"DemoService provider is starting..."</span><span style=color:#719e07>);</span>
+ System<span style=color:#719e07>.</span>in<span style=color:#719e07>.</span>read<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+
+</code></pre></div><p>Wherein, the annotation @EnableDubbo activates the Dubbo annotation-driven and externalization configuration, its scanBasePackages property scans the specified Java package, exposes all service interface implementation classes labeled @Service as Spring Bean, and then exports the Dubbo service.</p><p>@PropertySource is the standard import property configuration resource annotation introduced by Spring Framework 3.1, which provides externalization configuration for D [...]
+dubbo.application.name = dubbo-consumer-demo
+
+## Nacos registry address
+dubbo.registry.address = nacos://127.0.0.1:8848
+
+# @Reference version
+demo.service.version= 1.0.0
+</code></pre></div><p>Similarly, the dubbo.registry.address property points to the Nacos registry, through which metadata about other Dubbo services is obtained.</p><ul><li>Implement service consumer bootstrap class - DemoServiceConsumerBootstrap</li></ul><div class=highlight><pre 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=color:#719e07>package</span> org.apache.dubbo.demo.consumer<span style= [...]
+
+<span style=color:#719e07>import</span> org.apache.dubbo.config.annotation.Reference<span style=color:#719e07>;</span>
+<span style=color:#719e07>import</span> org.apache.dubbo.config.spring.context.annotation.EnableDubbo<span style=color:#719e07>;</span>
+<span style=color:#719e07>import</span> org.apache.dubbo.demo.service.DemoService<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> org.springframework.context.annotation.AnnotationConfigApplicationContext<span style=color:#719e07>;</span>
+<span style=color:#719e07>import</span> org.springframework.context.annotation.PropertySource<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> javax.annotation.PostConstruct<span style=color:#719e07>;</span>
+<span style=color:#719e07>import</span> java.io.IOException<span style=color:#719e07>;</span>
+
+<span style=color:#586e75>/**
+</span><span style=color:#586e75> * {@link DemoService} consumer demo
+</span><span style=color:#586e75> */</span>
+<span style=color:#268bd2>@EnableDubbo</span>
+<span style=color:#268bd2>@PropertySource</span><span style=color:#719e07>(</span>value <span style=color:#719e07>=</span> <span style=color:#2aa198>"classpath:/consumer-config.properties"</span><span style=color:#719e07>)</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoServiceConsumerBootstrap</span> <span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>@Reference</span><span style=color:#719e07>(</span>version <span style=color:#719e07>=</span> <span style=color:#2aa198>"${demo.service.version}"</span><span style=color:#719e07>)</span>
+ <span style=color:#268bd2>private</span> DemoService demoService<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>@PostConstruct</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>init</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>for</span> <span style=color:#719e07>(</span><span style=color:#dc322f>int</span> i <span style=color:#719e07>=</span> 0<span style=color:#719e07>;</span> i <span style=color:#719e07><</span> 10<span style=color:#719e07>;</span> i<span style=color:#719e07>++)</span> <span style=color:#719e07>{</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span>demoService<span style=color:#719e07>.</span>sayName<span style=color:#719e07>(</span><span style=color:#2aa198>"小马哥(mercyblitz)"</span><span style=color:#719e07>));</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</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> IOException <span style=color:#719e07>{</span>
+ AnnotationConfigApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> AnnotationConfigApplicationContext<span style=color:#719e07>();</span>
+ context<span style=color:#719e07>.</span>register<span style=color:#719e07>(</span>DemoServiceConsumerBootstrap<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+ context<span style=color:#719e07>.</span>refresh<span style=color:#719e07>();</span>
+ context<span style=color:#719e07>.</span>close<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+
+</code></pre></div><p>Similarly, the @EnableDubbo annotation activates the Dubbo annotation-driven and externalization configuration, although it currently belongs to the service consumer and does not require the Java package name to scan the service implementation labeled @Service.</p><p>@Reference is a dependency injection annotation for Dubbo remote services that requires service provider and consumer contract interface, version, and group information. In the current service consumpti [...]
+Service [name :demoService , port : 20881] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :demoService , port : 20880] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :demoService , port : 20880] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :demoService , port : 20881] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :demoService , port : 20881] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :demoService , port : 20880] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :demoService , port : 20880] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :demoService , port : 20881] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :demoService , port : 20881] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+</code></pre></div><p>Run correctly and the service consumer uses a load balancing strategy to allocate ten RPC calls equally to two Dubbo service provider instances.</p><h3 id=spring-xml-configuration-driven-example>Spring XML Configuration-driven Example</h3><p>Spring XML configuration-driven is the programming model of traditional Spring assembly components.</p><h4 id=service-provider-xml-configuration-driven>Service Provider XML Configuration-driven</h4><p>Define the service provider [...]
+<span style=color:#268bd2><beans</span> xmlns=<span style=color:#2aa198>"http://www.springframework.org/schema/beans"</span>
+ xmlns:xsi=<span style=color:#2aa198>"http://www.w3.org/2001/XMLSchema-instance"</span>
+ xmlns:dubbo=<span style=color:#2aa198>"http://dubbo.apache.org/schema/dubbo"</span>
+ xsi:schemaLocation=<span style=color:#2aa198>"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"</span><span style=color:#268bd2>></span>
+
+ <span style=color:#586e75><!--
+</span><span style=color:#586e75>
+</span><span style=color:#586e75>Provider application information for dependency calculation
+</span><span style=color:#586e75> --></span>
+ <span style=color:#268bd2><dubbo:application</span> name=<span style=color:#2aa198>"dubbo-provider-xml-demo"</span><span style=color:#268bd2>/></span>
+
+ <span style=color:#586e75><!-- Using the Nacos registry --></span>
+ <span style=color:#268bd2><dubbo:registry</span> address=<span style=color:#2aa198>"nacos://127.0.0.1:8848"</span><span style=color:#268bd2>/></span>
+
+ <span style=color:#586e75><!-- Using Dubbo protocol to expose services on random ports --></span>
+ <span style=color:#268bd2><dubbo:protocol</span> name=<span style=color:#2aa198>"dubbo"</span> port=<span style=color:#2aa198>"-1"</span><span style=color:#268bd2>/></span>
+
+ <span style=color:#586e75><!-- Declare the service interface to be exposed --></span>
+ <span style=color:#268bd2><dubbo:service</span> interface=<span style=color:#2aa198>"org.apache.dubbo.demo.service.DemoService"</span> ref=<span style=color:#2aa198>"demoService"</span> version=<span style=color:#2aa198>"2.0.0"</span><span style=color:#268bd2>/></span>
+
+ <span style=color:#586e75><!-- Implement services like local beans --></span>
+ <span style=color:#268bd2><bean</span> id=<span style=color:#2aa198>"demoService"</span> class=<span style=color:#2aa198>"org.apache.dubbo.demo.service.DefaultService"</span><span style=color:#268bd2>/></span>
+<span style=color:#268bd2></beans></span>
+</code></pre></div><ul><li>Implement service provider bootstrap class - DemoServiceProviderBootstrap</li></ul><div class=highlight><pre 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=color:#719e07>package</span> org.apache.dubbo.demo.provider<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> org.apache.dubbo.demo.service.DemoService<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> org.springframework.context.support.ClassPathXmlApplicationContext<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> java.io.IOException<span style=color:#719e07>;</span>
+
+<span style=color:#586e75>/**
+</span><span style=color:#586e75> * {@link DemoService} provider demo XML bootstrap
+</span><span style=color:#586e75> */</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoServiceProviderXmlBootstrap</span> <span style=color:#719e07>{</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> IOException <span style=color:#719e07>{</span>
+ ClassPathXmlApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ClassPathXmlApplicationContext<span style=color:#719e07>();</span>
+ context<span style=color:#719e07>.</span>setConfigLocation<span style=color:#719e07>(</span><span style=color:#2aa198>"/META-INF/spring/dubbo-provider-context.xml"</span><span style=color:#719e07>);</span>
+ context<span style=color:#719e07>.</span>refresh<span style=color:#719e07>();</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"DemoService provider (XML) is starting..."</span><span style=color:#719e07>);</span>
+ System<span style=color:#719e07>.</span>in<span style=color:#719e07>.</span>read<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h4 id=service-consumer-xml-configuration-driven>Service Consumer XML Configuration-driven</h4><p>Define the consumer provider XML context configuration file - /META-INF/spring/dubbo- consumer-context.xml</p><div class=highlight><pre 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=color:#719e07><?xml version="1.0" encoding="UTF-8"?></span>
+<span style=color:#268bd2><beans</span> xmlns=<span style=color:#2aa198>"http://www.springframework.org/schema/beans"</span>
+ xmlns:xsi=<span style=color:#2aa198>"http://www.w3.org/2001/XMLSchema-instance"</span>
+ xmlns:dubbo=<span style=color:#2aa198>"http://dubbo.apache.org/schema/dubbo"</span>
+ xsi:schemaLocation=<span style=color:#2aa198>"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"</span><span style=color:#268bd2>></span>
+
+ <span style=color:#586e75><!--
+</span><span style=color:#586e75>
+</span><span style=color:#586e75>Provider application information for dependency calculation
+</span><span style=color:#586e75> --></span>
+ <span style=color:#268bd2><dubbo:application</span> name=<span style=color:#2aa198>"dubbo-consumer-xml-demo"</span><span style=color:#268bd2>/></span>
+
+ <span style=color:#586e75><!-- Using the Nacos registry--></span>
+ <span style=color:#268bd2><dubbo:registry</span> address=<span style=color:#2aa198>"nacos://127.0.0.1:8848"</span><span style=color:#268bd2>/></span>
+
+ <span style=color:#586e75><!-- Reference service interface --></span>
+ <span style=color:#268bd2><dubbo:reference</span> id=<span style=color:#2aa198>"demoService"</span> interface=<span style=color:#2aa198>"org.apache.dubbo.demo.service.DemoService"</span> version=<span style=color:#2aa198>"2.0.0"</span><span style=color:#268bd2>/></span>
+
+<span style=color:#268bd2></beans></span>
+</code></pre></div><ul><li>Implement service consumer bootstrap class - DemoServiceConsumerBootstrap</li></ul><div class=highlight><pre 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=color:#719e07>package</span> org.apache.dubbo.demo.consumer<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> org.apache.dubbo.demo.service.DemoService<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> org.springframework.context.support.ClassPathXmlApplicationContext<span style=color:#719e07>;</span>
+
+<span style=color:#719e07>import</span> java.io.IOException<span style=color:#719e07>;</span>
+
+<span style=color:#586e75>/**
+</span><span style=color:#586e75> * {@link DemoService} consumer demo XML bootstrap
+</span><span style=color:#586e75> */</span>
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoServiceConsumerXmlBootstrap</span> <span style=color:#719e07>{</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> IOException <span style=color:#719e07>{</span>
+ ClassPathXmlApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ClassPathXmlApplicationContext<span style=color:#719e07>();</span>
+ context<span style=color:#719e07>.</span>setConfigLocation<span style=color:#719e07>(</span><span style=color:#2aa198>"/META-INF/spring/dubbo-consumer-context.xml"</span><span style=color:#719e07>);</span>
+ context<span style=color:#719e07>.</span>refresh<span style=color:#719e07>();</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"DemoService consumer (XML) is starting..."</span><span style=color:#719e07>);</span>
+ DemoService demoService <span style=color:#719e07>=</span> context<span style=color:#719e07>.</span>getBean<span style=color:#719e07>(</span><span style=color:#2aa198>"demoService"</span><span style=color:#719e07>,</span> DemoService<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+ <span style=color:#719e07>for</span> <span style=color:#719e07>(</span><span style=color:#dc322f>int</span> i <span style=color:#719e07>=</span> 0<span style=color:#719e07>;</span> i <span style=color:#719e07><</span> 10<span style=color:#719e07>;</span> i<span style=color:#719e07>++)</span> <span style=color:#719e07>{</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span>demoService<span style=color:#719e07>.</span>sayName<span style=color:#719e07>(</span><span style=color:#2aa198>"小马哥(mercyblitz)"</span><span style=color:#719e07>));</span>
+ <span style=color:#719e07>}</span>
+ context<span style=color:#719e07>.</span>close<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h4 id=run-xml-configuration-driven-example>Run XML Configuration-driven Example</h4><p>As such, start two DemoServiceProviderXmlBootstrap bootstraps and observe the changes in the Nacos registry service provider:</p><p><img src=/imgs/blog/dubbo-registry-nacos-5.png alt=image-20181213125527201></p><p>The service version driven by the XML configuration is 2.0.0, so the registration service is correct.</p><p>Run the service consumer bootstrap DemoServiceConsumerXmlBootst [...]
+Service [name :null , port : 20882] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :null , port : 20883] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :null , port : 20882] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :null , port : 20882] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :null , port : 20883] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :null , port : 20882] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :null , port : 20883] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :null , port : 20883] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+Service [name :null , port : 20883] sayName("小马哥(mercyblitz)") : Hello,小马哥(mercyblitz)
+</code></pre></div><p>As a result, both operation and load balancing are normal due to the property demo.service.name has not been added to the current example, the “name” information is output as null. For more information, please refer to: <a href=https://github.com/apache/dubbo/tree/master/dubbo-registry/dubbo-registry-nacos>https://github.com/apache/dubbo/tree/master/dubbo-registry/dubbo-registry-nacos</a>.</p><p>If you’re interested in or fond of open source projec [...]
\ No newline at end of file
diff --git a/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/index.html b/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/index.html
new file mode 100644
index 00000000000..78b058de610
--- /dev/null
+++ b/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/index.html
@@ -0,0 +1,38 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-meetup-hangzhou.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+sect [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=The%20fifth%20Dubbo%20meetup%20has%20been%20held%20in%20Hangzhou" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role=main><a class="btn btn-lg -bg-orange td-rss-button d-none d-lg-block" href=/blog/news/index.xml target=_blank>RSS <i class="fa fa-rss ml-2"></i></a><div class=td-content><h1>The fifth Dubbo meetup has been held in Hangzhou</h1><div class=lead>The fifth Dubbo meetup has been held in Hangzhou</div> [...]
\ No newline at end of file
diff --git a/blog/2019/01/17/how-to-use-fescar-to-ensure-consistency-between-dubbo-microservices/index.html b/blog/2019/01/17/how-to-use-fescar-to-ensure-consistency-between-dubbo-microservices/index.html
new file mode 100644
index 00000000000..47f3cb6f324
--- /dev/null
+++ b/blog/2019/01/17/how-to-use-fescar-to-ensure-consistency-between-dubbo-microservices/index.html
@@ -0,0 +1,164 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.79.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20190117how-to-use-fescar-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-fescar-to-ensure-consistency-between-dubbo-microservices/>Use Fescar in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-fescar.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+th [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=How%20to%20use%20Fescar%20to%20ensure%20consistency%20between%20Dubbo%20Microservices" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#use-case>Use case</a><ul><li><a href=#architecture>Architecture</a></li><li><a href=#storageservice>StorageService</a></li><li><a href=#orderservice>OrderService</a></li><li><a href=#accountservice>AccountService</a></li><li><a href=#main-business-logic>Main business logic</a></li></ul></li><li><a href=#distributed-trans [...]
+
+ <span style=color:#586e75>/**
+</span><span style=color:#586e75> * deduct storage count
+</span><span style=color:#586e75> */</span>
+ <span style=color:#dc322f>void</span> <span style=color:#268bd2>deduct</span><span style=color:#719e07>(</span>String commodityCode<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> count<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h3 id=orderservice>OrderService</h3><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>OrderService</span> <span style=color:#719e07>{</span>
+
+ <span style=color:#586e75>/**
+</span><span style=color:#586e75> * create order
+</span><span style=color:#586e75> */</span>
+ Order <span style=color:#268bd2>create</span><span style=color:#719e07>(</span>String userId<span style=color:#719e07>,</span> String commodityCode<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> orderCount<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h3 id=accountservice>AccountService</h3><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>AccountService</span> <span style=color:#719e07>{</span>
+
+ <span style=color:#586e75>/**
+</span><span style=color:#586e75> * debit balance of user's account
+</span><span style=color:#586e75> */</span>
+ <span style=color:#dc322f>void</span> <span style=color:#268bd2>debit</span><span style=color:#719e07>(</span>String userId<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> money<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h3 id=main-business-logic>Main business logic</h3><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>BusinessServiceImpl</span> <span style=color:#268bd2>implements</span> BusinessService <span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>private</span> StorageService storageService<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>private</span> OrderService orderService<span style=color:#719e07>;</span>
+
+ <span style=color:#586e75>/**
+</span><span style=color:#586e75> * purchase
+</span><span style=color:#586e75> */</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>purchase</span><span style=color:#719e07>(</span>String userId<span style=color:#719e07>,</span> String commodityCode<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> orderCount<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+
+ storageService<span style=color:#719e07>.</span>deduct<span style=color:#719e07>(</span>commodityCode<span style=color:#719e07>,</span> orderCount<span style=color:#719e07>);</span>
+
+ orderService<span style=color:#719e07>.</span>create<span style=color:#719e07>(</span>userId<span style=color:#719e07>,</span> commodityCode<span style=color:#719e07>,</span> orderCount<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>StorageServiceImpl</span> <span style=color:#268bd2>implements</span> StorageService <span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>private</span> StorageDAO storageDAO<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>deduct</span><span style=color:#719e07>(</span>String commodityCode<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> count<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ Storage storage <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> Storage<span style=color:#719e07>();</span>
+ storage<span style=color:#719e07>.</span>setCount<span style=color:#719e07>(</span>count<span style=color:#719e07>);</span>
+ storage<span style=color:#719e07>.</span>setCommodityCode<span style=color:#719e07>(</span>commodityCode<span style=color:#719e07>);</span>
+ storageDAO<span style=color:#719e07>.</span>update<span style=color:#719e07>(</span>storage<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>OrderServiceImpl</span> <span style=color:#268bd2>implements</span> OrderService <span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>private</span> OrderDAO orderDAO<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>private</span> AccountService accountService<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>public</span> Order <span style=color:#268bd2>create</span><span style=color:#719e07>(</span>String userId<span style=color:#719e07>,</span> String commodityCode<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> orderCount<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+
+ <span style=color:#dc322f>int</span> orderMoney <span style=color:#719e07>=</span> calculate<span style=color:#719e07>(</span>commodityCode<span style=color:#719e07>,</span> orderCount<span style=color:#719e07>);</span>
+
+ accountService<span style=color:#719e07>.</span>debit<span style=color:#719e07>(</span>userId<span style=color:#719e07>,</span> orderMoney<span style=color:#719e07>);</span>
+
+ Order order <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> Order<span style=color:#719e07>();</span>
+ order<span style=color:#719e07>.</span>userId <span style=color:#719e07>=</span> userId<span style=color:#719e07>;</span>
+ order<span style=color:#719e07>.</span>commodityCode <span style=color:#719e07>=</span> commodityCode<span style=color:#719e07>;</span>
+ order<span style=color:#719e07>.</span>count <span style=color:#719e07>=</span> orderCount<span style=color:#719e07>;</span>
+ order<span style=color:#719e07>.</span>money <span style=color:#719e07>=</span> orderMoney<span style=color:#719e07>;</span>
+
+ <span style=color:#719e07>return</span> orderDAO<span style=color:#719e07>.</span>insert<span style=color:#719e07>(</span>order<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h2 id=distributed-transaction-solution-with-fescar>Distributed Transaction Solution with Fescar</h2><p><img src=/imgs/blog/fescar/fescar-2.png alt=undefined></p><p>We just need an annotation <code>@GlobalTransactional</code> on business method:</p><div class=highlight><pre 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=color:#268bd2>@GlobalTransactional</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>purchase</span><span style=color:#719e07>(</span>String userId<span style=color:#719e07>,</span> String commodityCode<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> orderCount<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>......</span>
+ <span style=color:#719e07>}</span>
+</code></pre></div><h2 id=example-powered-by-dubbo--fescar>Example powered by Dubbo + Fescar</h2><h3 id=step-1-setup-database>Step 1: Setup database</h3><ul><li>Requirement: MySQL with InnoDB engine.</li></ul><p><strong>Note:</strong> In fact, there should be 3 database for the 3 services in the example use case. However, we can just create one database and configure 3 data sources for simple.</p><p>Modify Spring XML with the database URL/username/password you just created.</p><p>dubbo-a [...]
+dubbo-order-service.xml
+dubbo-storage-service.xml</p><div class=highlight><pre 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=color:#268bd2><property</span> name=<span style=color:#2aa198>"url"</span> value=<span style=color:#2aa198>"jdbc:mysql://x.x.x.x:3306/xxx"</span> <span style=color:#268bd2>/></span>
+ <span style=color:#268bd2><property</span> name=<span style=color:#2aa198>"username"</span> value=<span style=color:#2aa198>"xxx"</span> <span style=color:#268bd2>/></span>
+ <span style=color:#268bd2><property</span> name=<span style=color:#2aa198>"password"</span> value=<span style=color:#2aa198>"xxx"</span> <span style=color:#268bd2>/></span>
+</code></pre></div><h3 id=step-2-create-undo_log-table-for-fescar>Step 2: Create undo_log table for Fescar</h3><p><code>UNDO_LOG</code> table is required by Fescar AT mode.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sql data-lang=sql><span style=color:#586e75>-- Note that when Fescar version is upgraded to 0.3.0+, it is changed from the previous normal index to the unique index.
+</span><span style=color:#586e75></span><span style=color:#719e07>CREATE</span> <span style=color:#719e07>TABLE</span> <span style=color:#719e07>`</span>undo_log<span style=color:#719e07>`</span> (
+ <span style=color:#719e07>`</span>id<span style=color:#719e07>`</span> <span style=color:#b58900>bigint</span>(<span style=color:#2aa198>20</span>) <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span> AUTO_INCREMENT,
+ <span style=color:#719e07>`</span>branch_id<span style=color:#719e07>`</span> <span style=color:#b58900>bigint</span>(<span style=color:#2aa198>20</span>) <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>xid<span style=color:#719e07>`</span> <span style=color:#b58900>varchar</span>(<span style=color:#2aa198>100</span>) <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>rollback_info<span style=color:#719e07>`</span> longblob <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>log_status<span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>log_created<span style=color:#719e07>`</span> datetime <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>log_modified<span style=color:#719e07>`</span> datetime <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>ext<span style=color:#719e07>`</span> <span style=color:#b58900>varchar</span>(<span style=color:#2aa198>100</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>PRIMARY</span> <span style=color:#719e07>KEY</span> (<span style=color:#719e07>`</span>id<span style=color:#719e07>`</span>),
+ <span style=color:#719e07>UNIQUE</span> <span style=color:#719e07>KEY</span> <span style=color:#719e07>`</span>ux_undo_log<span style=color:#719e07>`</span> (<span style=color:#719e07>`</span>xid<span style=color:#719e07>`</span>,<span style=color:#719e07>`</span>branch_id<span style=color:#719e07>`</span>)
+) ENGINE<span style=color:#719e07>=</span>InnoDB AUTO_INCREMENT<span style=color:#719e07>=</span><span style=color:#2aa198>1</span> <span style=color:#719e07>DEFAULT</span> CHARSET<span style=color:#719e07>=</span>utf8;
+</code></pre></div><h3 id=step-3-create-tables-for-example-business>Step 3: Create tables for example business</h3><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sql data-lang=sql>
+<span style=color:#719e07>DROP</span> <span style=color:#719e07>TABLE</span> <span style=color:#719e07>IF</span> <span style=color:#719e07>EXISTS</span> <span style=color:#719e07>`</span>storage_tbl<span style=color:#719e07>`</span>;
+<span style=color:#719e07>CREATE</span> <span style=color:#719e07>TABLE</span> <span style=color:#719e07>`</span>storage_tbl<span style=color:#719e07>`</span> (
+ <span style=color:#719e07>`</span>id<span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span> AUTO_INCREMENT,
+ <span style=color:#719e07>`</span>commodity_code<span style=color:#719e07>`</span> <span style=color:#b58900>varchar</span>(<span style=color:#2aa198>255</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span><span style=color:#719e07>count</span><span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#2aa198>0</span>,
+ <span style=color:#719e07>PRIMARY</span> <span style=color:#719e07>KEY</span> (<span style=color:#719e07>`</span>id<span style=color:#719e07>`</span>),
+ <span style=color:#719e07>UNIQUE</span> <span style=color:#719e07>KEY</span> (<span style=color:#719e07>`</span>commodity_code<span style=color:#719e07>`</span>)
+) ENGINE<span style=color:#719e07>=</span>InnoDB <span style=color:#719e07>DEFAULT</span> CHARSET<span style=color:#719e07>=</span>utf8;
+
+
+<span style=color:#719e07>DROP</span> <span style=color:#719e07>TABLE</span> <span style=color:#719e07>IF</span> <span style=color:#719e07>EXISTS</span> <span style=color:#719e07>`</span>order_tbl<span style=color:#719e07>`</span>;
+<span style=color:#719e07>CREATE</span> <span style=color:#719e07>TABLE</span> <span style=color:#719e07>`</span>order_tbl<span style=color:#719e07>`</span> (
+ <span style=color:#719e07>`</span>id<span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span> AUTO_INCREMENT,
+ <span style=color:#719e07>`</span>user_id<span style=color:#719e07>`</span> <span style=color:#b58900>varchar</span>(<span style=color:#2aa198>255</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>commodity_code<span style=color:#719e07>`</span> <span style=color:#b58900>varchar</span>(<span style=color:#2aa198>255</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span><span style=color:#719e07>count</span><span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#2aa198>0</span>,
+ <span style=color:#719e07>`</span>money<span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#2aa198>0</span>,
+ <span style=color:#719e07>PRIMARY</span> <span style=color:#719e07>KEY</span> (<span style=color:#719e07>`</span>id<span style=color:#719e07>`</span>)
+) ENGINE<span style=color:#719e07>=</span>InnoDB <span style=color:#719e07>DEFAULT</span> CHARSET<span style=color:#719e07>=</span>utf8;
+
+
+<span style=color:#719e07>DROP</span> <span style=color:#719e07>TABLE</span> <span style=color:#719e07>IF</span> <span style=color:#719e07>EXISTS</span> <span style=color:#719e07>`</span>account_tbl<span style=color:#719e07>`</span>;
+<span style=color:#719e07>CREATE</span> <span style=color:#719e07>TABLE</span> <span style=color:#719e07>`</span>account_tbl<span style=color:#719e07>`</span> (
+ <span style=color:#719e07>`</span>id<span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span> AUTO_INCREMENT,
+ <span style=color:#719e07>`</span>user_id<span style=color:#719e07>`</span> <span style=color:#b58900>varchar</span>(<span style=color:#2aa198>255</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>money<span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#2aa198>0</span>,
+ <span style=color:#719e07>PRIMARY</span> <span style=color:#719e07>KEY</span> (<span style=color:#719e07>`</span>id<span style=color:#719e07>`</span>)
+) ENGINE<span style=color:#719e07>=</span>InnoDB <span style=color:#719e07>DEFAULT</span> CHARSET<span style=color:#719e07>=</span>utf8;
+</code></pre></div><h3 id=step-4-start-fescar-server>Step 4: Start Fescar-Server</h3><ul><li>Download server <a href=https://github.com/alibaba/fescar/releases>package</a>, unzip it.</li><li>Start Fescar-Server</li></ul><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell>sh fescar-server.sh <span style=color:#268bd2>$LISTEN_PORT</span> <span style=color:#268bd2>$PATH_FOR_PERSISTENT_DATA</span>
+
+e.g.
+
+sh fescar-server.sh <span style=color:#2aa198>8091</span> /home/admin/fescar/data/
+</code></pre></div><h3 id=step-5-run-example>Step 5: Run example</h3><ul><li>Start AccountService (<a href=https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboAccountServiceStarter.java>DubboAccountServiceStarter</a>).</li><li>Start StorageService (<a href=https://github.com/fescar-group/fescar-samples/blob/master/dubbo/src/main/java/com/alibaba/fescar/samples/dubbo/starter/DubboStorageServiceStarter.java>DubboStora [...]
\ No newline at end of file
diff --git a/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/index.html b/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/index.html
new file mode 100644
index 00000000000..d1d6ffbb469
--- /dev/null
+++ b/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/index.html
@@ -0,0 +1,176 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-fescar.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+th [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=How%20to%20use%20Seata%20to%20ensure%20consistency%20between%20Dubbo%20Microservices" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#use-case>Use case</a><ul><li><a href=#architecture>Architecture</a></li><li><a href=#storageservice>StorageService</a></li><li><a href=#orderservice>OrderService</a></li><li><a href=#accountservice>AccountService</a></li><li><a href=#main-business-logic>Main business logic</a></li></ul></li><li><a href=#distributed-trans [...]
+
+ <span style=color:#586e75>/**
+</span><span style=color:#586e75> * deduct storage count
+</span><span style=color:#586e75> */</span>
+ <span style=color:#dc322f>void</span> <span style=color:#268bd2>deduct</span><span style=color:#719e07>(</span>String commodityCode<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> count<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h3 id=orderservice>OrderService</h3><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>OrderService</span> <span style=color:#719e07>{</span>
+
+ <span style=color:#586e75>/**
+</span><span style=color:#586e75> * create order
+</span><span style=color:#586e75> */</span>
+ Order <span style=color:#268bd2>create</span><span style=color:#719e07>(</span>String userId<span style=color:#719e07>,</span> String commodityCode<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> orderCount<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h3 id=accountservice>AccountService</h3><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>AccountService</span> <span style=color:#719e07>{</span>
+
+ <span style=color:#586e75>/**
+</span><span style=color:#586e75> * debit balance of user's account
+</span><span style=color:#586e75> */</span>
+ <span style=color:#dc322f>void</span> <span style=color:#268bd2>debit</span><span style=color:#719e07>(</span>String userId<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> money<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h3 id=main-business-logic>Main business logic</h3><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>BusinessServiceImpl</span> <span style=color:#268bd2>implements</span> BusinessService <span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>private</span> StorageService storageService<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>private</span> OrderService orderService<span style=color:#719e07>;</span>
+
+ <span style=color:#586e75>/**
+</span><span style=color:#586e75> * purchase
+</span><span style=color:#586e75> */</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>purchase</span><span style=color:#719e07>(</span>String userId<span style=color:#719e07>,</span> String commodityCode<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> orderCount<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+
+ storageService<span style=color:#719e07>.</span>deduct<span style=color:#719e07>(</span>commodityCode<span style=color:#719e07>,</span> orderCount<span style=color:#719e07>);</span>
+
+ orderService<span style=color:#719e07>.</span>create<span style=color:#719e07>(</span>userId<span style=color:#719e07>,</span> commodityCode<span style=color:#719e07>,</span> orderCount<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>StorageServiceImpl</span> <span style=color:#268bd2>implements</span> StorageService <span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>private</span> StorageDAO storageDAO<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>deduct</span><span style=color:#719e07>(</span>String commodityCode<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> count<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ Storage storage <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> Storage<span style=color:#719e07>();</span>
+ storage<span style=color:#719e07>.</span>setCount<span style=color:#719e07>(</span>count<span style=color:#719e07>);</span>
+ storage<span style=color:#719e07>.</span>setCommodityCode<span style=color:#719e07>(</span>commodityCode<span style=color:#719e07>);</span>
+ storageDAO<span style=color:#719e07>.</span>update<span style=color:#719e07>(</span>storage<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>OrderServiceImpl</span> <span style=color:#268bd2>implements</span> OrderService <span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>private</span> OrderDAO orderDAO<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>private</span> AccountService accountService<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>public</span> Order <span style=color:#268bd2>create</span><span style=color:#719e07>(</span>String userId<span style=color:#719e07>,</span> String commodityCode<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> orderCount<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+
+ <span style=color:#dc322f>int</span> orderMoney <span style=color:#719e07>=</span> calculate<span style=color:#719e07>(</span>commodityCode<span style=color:#719e07>,</span> orderCount<span style=color:#719e07>);</span>
+
+ accountService<span style=color:#719e07>.</span>debit<span style=color:#719e07>(</span>userId<span style=color:#719e07>,</span> orderMoney<span style=color:#719e07>);</span>
+
+ Order order <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> Order<span style=color:#719e07>();</span>
+ order<span style=color:#719e07>.</span>userId <span style=color:#719e07>=</span> userId<span style=color:#719e07>;</span>
+ order<span style=color:#719e07>.</span>commodityCode <span style=color:#719e07>=</span> commodityCode<span style=color:#719e07>;</span>
+ order<span style=color:#719e07>.</span>count <span style=color:#719e07>=</span> orderCount<span style=color:#719e07>;</span>
+ order<span style=color:#719e07>.</span>money <span style=color:#719e07>=</span> orderMoney<span style=color:#719e07>;</span>
+
+ <span style=color:#719e07>return</span> orderDAO<span style=color:#719e07>.</span>insert<span style=color:#719e07>(</span>order<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h2 id=distributed-transaction-solution-with-seata>Distributed Transaction Solution with Seata</h2><p><img src=/imgs/blog/fescar/fescar-2.png alt=undefined></p><p>We just need an annotation <code>@GlobalTransactional</code> on business method:</p><div class=highlight><pre 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=color:#268bd2>@GlobalTransactional</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>purchase</span><span style=color:#719e07>(</span>String userId<span style=color:#719e07>,</span> String commodityCode<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> orderCount<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>......</span>
+ <span style=color:#719e07>}</span>
+</code></pre></div><h2 id=example-powered-by-dubbo--seata>Example powered by Dubbo + Seata</h2><h3 id=step-1-setup-database>Step 1: Setup database</h3><ul><li>Requirement: MySQL with InnoDB engine.</li></ul><p><strong>Note:</strong> In fact, there should be 3 database for the 3 services in the example use case. However, we can just create one database and configure 3 data sources for simple.</p><p>Modify Spring XML with the database URL/username/password you just created.</p><p>dubbo-acc [...]
+dubbo-order-service.xml
+dubbo-storage-service.xml</p><div class=highlight><pre 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=color:#268bd2><property</span> name=<span style=color:#2aa198>"url"</span> value=<span style=color:#2aa198>"jdbc:mysql://x.x.x.x:3306/xxx"</span> <span style=color:#268bd2>/></span>
+ <span style=color:#268bd2><property</span> name=<span style=color:#2aa198>"username"</span> value=<span style=color:#2aa198>"xxx"</span> <span style=color:#268bd2>/></span>
+ <span style=color:#268bd2><property</span> name=<span style=color:#2aa198>"password"</span> value=<span style=color:#2aa198>"xxx"</span> <span style=color:#268bd2>/></span>
+</code></pre></div><h3 id=step-2-create-undo_log-table-for-seata>Step 2: Create undo_log table for Seata</h3><p><code>UNDO_LOG</code> table is required by Seata AT mode.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sql data-lang=sql><span style=color:#586e75>-- Note that when Seata version is upgraded to 0.3.0+, it is changed from the previous normal index to the unique index.
+</span><span style=color:#586e75></span><span style=color:#719e07>CREATE</span> <span style=color:#719e07>TABLE</span> <span style=color:#719e07>`</span>undo_log<span style=color:#719e07>`</span> (
+ <span style=color:#719e07>`</span>id<span style=color:#719e07>`</span> <span style=color:#b58900>bigint</span>(<span style=color:#2aa198>20</span>) <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span> AUTO_INCREMENT,
+ <span style=color:#719e07>`</span>branch_id<span style=color:#719e07>`</span> <span style=color:#b58900>bigint</span>(<span style=color:#2aa198>20</span>) <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>xid<span style=color:#719e07>`</span> <span style=color:#b58900>varchar</span>(<span style=color:#2aa198>100</span>) <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>context<span style=color:#719e07>`</span> <span style=color:#b58900>varchar</span>(<span style=color:#2aa198>128</span>) <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>rollback_info<span style=color:#719e07>`</span> longblob <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>log_status<span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>log_created<span style=color:#719e07>`</span> datetime <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>log_modified<span style=color:#719e07>`</span> datetime <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>ext<span style=color:#719e07>`</span> <span style=color:#b58900>varchar</span>(<span style=color:#2aa198>100</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>PRIMARY</span> <span style=color:#719e07>KEY</span> (<span style=color:#719e07>`</span>id<span style=color:#719e07>`</span>),
+ <span style=color:#719e07>UNIQUE</span> <span style=color:#719e07>KEY</span> <span style=color:#719e07>`</span>ux_undo_log<span style=color:#719e07>`</span> (<span style=color:#719e07>`</span>xid<span style=color:#719e07>`</span>,<span style=color:#719e07>`</span>branch_id<span style=color:#719e07>`</span>)
+) ENGINE<span style=color:#719e07>=</span>InnoDB AUTO_INCREMENT<span style=color:#719e07>=</span><span style=color:#2aa198>1</span> <span style=color:#719e07>DEFAULT</span> CHARSET<span style=color:#719e07>=</span>utf8;
+</code></pre></div><h3 id=step-3-create-tables-for-example-business>Step 3: Create tables for example business</h3><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sql data-lang=sql>
+<span style=color:#719e07>DROP</span> <span style=color:#719e07>TABLE</span> <span style=color:#719e07>IF</span> <span style=color:#719e07>EXISTS</span> <span style=color:#719e07>`</span>storage_tbl<span style=color:#719e07>`</span>;
+<span style=color:#719e07>CREATE</span> <span style=color:#719e07>TABLE</span> <span style=color:#719e07>`</span>storage_tbl<span style=color:#719e07>`</span> (
+ <span style=color:#719e07>`</span>id<span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span> AUTO_INCREMENT,
+ <span style=color:#719e07>`</span>commodity_code<span style=color:#719e07>`</span> <span style=color:#b58900>varchar</span>(<span style=color:#2aa198>255</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span><span style=color:#719e07>count</span><span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#2aa198>0</span>,
+ <span style=color:#719e07>PRIMARY</span> <span style=color:#719e07>KEY</span> (<span style=color:#719e07>`</span>id<span style=color:#719e07>`</span>),
+ <span style=color:#719e07>UNIQUE</span> <span style=color:#719e07>KEY</span> (<span style=color:#719e07>`</span>commodity_code<span style=color:#719e07>`</span>)
+) ENGINE<span style=color:#719e07>=</span>InnoDB <span style=color:#719e07>DEFAULT</span> CHARSET<span style=color:#719e07>=</span>utf8;
+
+
+<span style=color:#719e07>DROP</span> <span style=color:#719e07>TABLE</span> <span style=color:#719e07>IF</span> <span style=color:#719e07>EXISTS</span> <span style=color:#719e07>`</span>order_tbl<span style=color:#719e07>`</span>;
+<span style=color:#719e07>CREATE</span> <span style=color:#719e07>TABLE</span> <span style=color:#719e07>`</span>order_tbl<span style=color:#719e07>`</span> (
+ <span style=color:#719e07>`</span>id<span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span> AUTO_INCREMENT,
+ <span style=color:#719e07>`</span>user_id<span style=color:#719e07>`</span> <span style=color:#b58900>varchar</span>(<span style=color:#2aa198>255</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>commodity_code<span style=color:#719e07>`</span> <span style=color:#b58900>varchar</span>(<span style=color:#2aa198>255</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span><span style=color:#719e07>count</span><span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#2aa198>0</span>,
+ <span style=color:#719e07>`</span>money<span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#2aa198>0</span>,
+ <span style=color:#719e07>PRIMARY</span> <span style=color:#719e07>KEY</span> (<span style=color:#719e07>`</span>id<span style=color:#719e07>`</span>)
+) ENGINE<span style=color:#719e07>=</span>InnoDB <span style=color:#719e07>DEFAULT</span> CHARSET<span style=color:#719e07>=</span>utf8;
+
+
+<span style=color:#719e07>DROP</span> <span style=color:#719e07>TABLE</span> <span style=color:#719e07>IF</span> <span style=color:#719e07>EXISTS</span> <span style=color:#719e07>`</span>account_tbl<span style=color:#719e07>`</span>;
+<span style=color:#719e07>CREATE</span> <span style=color:#719e07>TABLE</span> <span style=color:#719e07>`</span>account_tbl<span style=color:#719e07>`</span> (
+ <span style=color:#719e07>`</span>id<span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span> AUTO_INCREMENT,
+ <span style=color:#719e07>`</span>user_id<span style=color:#719e07>`</span> <span style=color:#b58900>varchar</span>(<span style=color:#2aa198>255</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#719e07>NULL</span>,
+ <span style=color:#719e07>`</span>money<span style=color:#719e07>`</span> <span style=color:#b58900>int</span>(<span style=color:#2aa198>11</span>) <span style=color:#719e07>DEFAULT</span> <span style=color:#2aa198>0</span>,
+ <span style=color:#719e07>PRIMARY</span> <span style=color:#719e07>KEY</span> (<span style=color:#719e07>`</span>id<span style=color:#719e07>`</span>)
+) ENGINE<span style=color:#719e07>=</span>InnoDB <span style=color:#719e07>DEFAULT</span> CHARSET<span style=color:#719e07>=</span>utf8;
+</code></pre></div><h3 id=step-4-start-seata-server>Step 4: Start Seata-Server</h3><ul><li>Download server <a href=https://github.com/seata/seata/releases>package</a>, unzip it.</li><li>Start Seata-Server</li></ul><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell>Usage: sh seata-server.sh<span style=color:#719e07>(</span><span style=color:#719e07>for</span> linux and mac<span style=co [...]
+ Options:
+ --host, -h
+ The host to bind.
+ Default: 0.0.0.0
+ --port, -p
+ The port to listen.
+ Default: <span style=color:#2aa198>8091</span>
+ --storeMode, -m
+ log store mode : file、db
+ Default: file
+ --help
+
+e.g.
+
+sh seata-server.sh -p <span style=color:#2aa198>8091</span> -h 127.0.0.1 -m file
+</code></pre></div><h3 id=step-5-run-example>Step 5: Run example</h3><ul><li>Start AccountService (<a href=https://github.com/seata/seata-samples/blob/master/dubbo/src/main/java/io/seata/samples/dubbo/starter/DubboAccountServiceStarter.java>DubboAccountServiceStarter</a>).</li><li>Start StorageService (<a href=https://github.com/seata/seata-samples/blob/master/dubbo/src/main/java/io/seata/samples/dubbo/starter/DubboStorageServiceStarter.java>DubboStorageServiceStarter</a>).</li><li>Start [...]
\ No newline at end of file
diff --git a/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/index.html b/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/index.html
new file mode 100644
index 00000000000..7e1bb90c295
--- /dev/null
+++ b/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/index.html
@@ -0,0 +1,56 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-async-client.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Implementation%20background%20and%20practice%20of%20Dubbo%20client%20asynchronous%20interface" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#preface>Preface</a></li><li><a href=#client-asynchronization>Client Asynchronization</a><ul><li><a href=#background>Background</a></li><li><a href=#the-sample>The sample</a></li><li><a href=#practical-advice>Practical advice</a></li><li><a href=#conclusions>Conclusions</a></li></ul></li></ul></nav></div><main class="col- [...]
+
+<span style=color:#268bd2><dubbo:reference</span> id=<span style=color:#2aa198>"demoService"</span> check=<span style=color:#2aa198>"false"</span> interface=<span style=color:#2aa198>"com.alibaba.dubbo.samples.notify.api.DemoService"</span> version=<span style=color:#2aa198>"1.0.0"</span> group=<span style=color:#2aa198>"cn"</span><span style=color:#268bd2>></span>
+ <span style=color:#268bd2><dubbo:method</span> name=<span style=color:#2aa198>"sayHello"</span> onreturn=<span style=color:#2aa198>"demoCallback.onreturn"</span> onthrow=<span style=color:#2aa198>"demoCallback.onthrow"</span><span style=color:#268bd2>/></span>
+<span style=color:#268bd2></dubbo:reference></span>
+</code></pre></div><p>The code for NotifyImpl is as follows:</p><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>NotifyImpl</span> <span style=color:#268bd2>implements</span> Notify<span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>public</span> Map<span style=color:#719e07><</span>Integer<span style=color:#719e07>,</span> String<span style=color:#719e07>></span> ret <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> HashMap<span style=color:#719e07><</span>Integer<span style=color:#719e07>,</span> String<span style=color:#719e07>>();</span>
+
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>onreturn</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> id<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ ret<span style=color:#719e07>.</span>put<span style=color:#719e07>(</span>id<span style=color:#719e07>,</span> name<span style=color:#719e07>);</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"onreturn: "</span> <span style=color:#719e07>+</span> name<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>onthrow</span><span style=color:#719e07>(</span>Throwable ex<span style=color:#719e07>,</span> String name<span style=color:#719e07>,</span> <span style=color:#dc322f>int</span> id<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"onthrow: "</span> <span style=color:#719e07>+</span> name<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>It is important to note that the parameters for the three methods in the custom Notify interface are as follows:</p><ul><li><code>oninvoke</code> The parameters of the method are the same as those of the calling method.</li><li><code>onreturn</code> The first parameter of the method is the return value of the calling method, and the rest is the parameters of the calling method.</li><li><code>onthrow</code> The first parameter to the method is the call exception, and [...]
\ No newline at end of file
diff --git a/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/index.html b/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/index.html
new file mode 100644
index 00000000000..838c8aee333
--- /dev/null
+++ b/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/index.html
@@ -0,0 +1,60 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-async-server.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Implementation%20background%20and%20practice%20of%20Dubbo%20server%20asynchronous%20interface" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#preface>Preface</a></li><li><a href=#implementation-background>Implementation background</a><ul><li><a href=#server-side-thread-strategy>Server-side thread strategy</a></li><li><a href=#coroutine-and-thread>Coroutine and thread</a></li></ul></li><li><a href=#the-sample>The sample</a></li><li><a href=#practical-suggestion [...]
+
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayHello</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"Main sayHello() method start."</span><span style=color:#719e07>);</span>
+ <span style=color:#268bd2>final</span> AsyncContext asyncContext <span style=color:#719e07>=</span> RpcContext<span style=color:#719e07>.</span>startAsync<span style=color:#719e07>();</span>
+ <span style=color:#719e07>new</span> Thread<span style=color:#719e07>(()</span> <span style=color:#719e07>-></span> <span style=color:#719e07>{</span>
+ asyncContext<span style=color:#719e07>.</span>signalContextSwitch<span style=color:#719e07>();</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"Attachment from consumer: "</span> <span style=color:#719e07>+</span> RpcContext<span style=color:#719e07>.</span>getContext<span style=color:#719e07>().</span>getAttachment<span style=color:#719e07>(</span><span style=color:#2aa198>"consumer-key1"</span><span style=color:#719e07>));</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>" -- Async start."</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+ Thread<span style=color:#719e07>.</span>sleep<span style=color:#719e07>(</span>500<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span> <span style=color:#719e07>catch</span> <span style=color:#719e07>(</span>InterruptedException e<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ e<span style=color:#719e07>.</span>printStackTrace<span style=color:#719e07>();</span>
+ <span style=color:#719e07>}</span>
+ asyncContext<span style=color:#719e07>.</span>write<span style=color:#719e07>(</span><span style=color:#2aa198>"Hello "</span> <span style=color:#719e07>+</span> name <span style=color:#719e07>+</span> <span style=color:#2aa198>", response from provider."</span><span style=color:#719e07>);</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>" -- Async end."</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>}).</span>start<span style=color:#719e07>();</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"Main sayHello() method end."</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>return</span> <span style=color:#2aa198>"hello, "</span> <span style=color:#719e07>+</span> name<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+
+</code></pre></div><h2 id=practical-suggestions>Practical suggestions</h2><ul><li>Don’t rely too much on server-side asynchrony.</li><li>Server-side asynchrony is basically a false proposition in the face of event-driven or Reactive.<span data-type=color style=color:#24292e><span data-type=background style=background-color:#fff>Supplement the reason: the server asynchrony is said Dubbo server-side business threads (default is 200) is not enough, but in the Event-Driven mode, 200 th [...]
\ No newline at end of file
diff --git a/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/index.html b/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/index.html
new file mode 100644
index 00000000000..58706ab99a9
--- /dev/null
+++ b/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/index.html
@@ -0,0 +1,93 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/introduction-to-dubbo-spi.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+ [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Dubbo%20extensible%20mechanism%20source%20code%20analysis%20-%20part%201" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#1-extension-mechanism-of-dubbo>1. Extension Mechanism of Dubbo</a></li><li><a href=#2extension-solutions>2.Extension Solutions</a></li><li><a href=#3java-spi-mechanism>3.Java SPI Mechanism</a></li><li><a href=#4-dubbo-spi-mechanism>4. Dubbo SPI Mechanism</a></li><li><a href=#5-basic-concepts-for-dubbo-extension-point-mec [...]
+When talking about software design, people always mention scalability. A framework with good scalability requires the following:
+1.The framework should follow opening/closed principle: software entities should be open for extension, but closed for modification; This means a framework should allow the maintainer to add new functions with as few modifications as possible.
+2.The framework should allow the user to add new functions by adding code on his project without modifying the framework’s original source code base.
+With microkernel architecture and extension mechanism, Dubbo satisfies such requirements and achieves good scalability. In the following chapters, we will discuss Dubbo’s extension mechanism in detail.</p><h2 id=2extension-solutions>2.Extension Solutions</h2><p>Creating Extensible applications usually considers:</p><ul><li>Factory method pattern</li><li>IoC container</li><li>OSGi (Open Services Gateway initiative)</li></ul><p>As a framework, Dubbo does not wish to rely on other IoC [...]
+ <span style=color:#dc322f>void</span> <span style=color:#268bd2>save</span><span style=color:#719e07>(</span>String data<span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><ol start=2><li>Create 2 implementations for IRepository: MysqlRepository and MongoRepository</li></ol><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>MysqlRepository</span> <span style=color:#268bd2>implements</span> IRepository <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>save</span><span style=color:#719e07>(</span>String data<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"Save "</span> <span style=color:#719e07>+</span> data <span style=color:#719e07>+</span> <span style=color:#2aa198>" to Mysql"</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>MongoRepository</span> <span style=color:#268bd2>implements</span> IRepository <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>save</span><span style=color:#719e07>(</span>String data<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"Save "</span> <span style=color:#719e07>+</span> data <span style=color:#719e07>+</span> <span style=color:#2aa198>" to Mongo"</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><ol start=3><li>Create a configuration file under <code>META-INF/services</code>.</li></ol><p>The file name is <code>META-INF/services/com.demo.IRepository</code>, the content of file is:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text>com.demo.MongoRepository
+com.demo.MysqlRepository
+</code></pre></div><ol start=4><li>Load IRepository using ServiceLoader</li></ol><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java>ServiceLoader<span style=color:#719e07><</span>IRepository<span style=color:#719e07>></span> serviceLoader <span style=color:#719e07>=</span> ServiceLoader<span style=color:#719e07>.</span>load<span style=color:#719e07>(</span>IRepository<span style=co [...]
+Iterator<span style=color:#719e07><</span>IRepository<span style=color:#719e07>></span> it <span style=color:#719e07>=</span> serviceLoader<span style=color:#719e07>.</span>iterator<span style=color:#719e07>();</span>
+<span style=color:#719e07>while</span> <span style=color:#719e07>(</span>it <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>&&</span> it<span style=color:#719e07>.</span>hasNext<span style=color:#719e07>()){</span>
+ IRepository demoService <span style=color:#719e07>=</span> it<span style=color:#719e07>.</span>next<span style=color:#719e07>();</span>
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"class:"</span> <span style=color:#719e07>+</span> demoService<span style=color:#719e07>.</span>getClass<span style=color:#719e07>().</span>getName<span style=color:#719e07>());</span>
+ demoService<span style=color:#719e07>.</span>save<span style=color:#719e07>(</span><span style=color:#2aa198>"tom"</span><span style=color:#719e07>);</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>In the above example, we created an extension and two of its applications. We created the configuration file in ClassPath and loaded the extensions using ServiceLoader. The final output is:
+class:testDubbo.MongoRepository
+Save tom to Mongo
+class:testDubbo.MysqlRepository
+Save tom to Mysql</p><h2 id=4-dubbo-spi-mechanism>4. Dubbo SPI Mechanism</h2><p>Java SPI is simple to use. It also supports basic extension point functions, however, it has some disadvantages:</p><ul><li>It will load and instantiate all implementations at once to find the requested implementation.</li><li>The configuration file only includes the extension implementation but does not name them, which makes it hard to reference them in applications.</li><li>If extensions depend on other ex [...]
+<span style=color:#268bd2>roundrobin</span><span style=color:#719e07>=</span>com.alibaba.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance
+</code></pre></div><p>where random, roundrobin are alias of the corresponding extensions, and we can directly use them in the configuration file.</p><h3 id=59-paths>5.9 Paths</h3><p>Similar to the way Java SPI loading the extension configuration from the <code>META-INF/services</code> directory, Dubbo will also load the extension configuration file from the following path:</p><ul><li><code>META-INF/dubbo/internal</code></li><li><code>META-INF/dubbo</code></li><li><code>META-INF/services< [...]
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>LoadBalance</span> <span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>@Adaptive</span><span style=color:#719e07>(</span><span style=color:#2aa198>"loadbalance"</span><span style=color:#719e07>)</span>
+ <span style=color:#719e07><</span>T<span style=color:#719e07>></span> Invoker<span style=color:#719e07><</span>T<span style=color:#719e07>></span> <span style=color:#268bd2>select</span><span style=color:#719e07>(</span>List<span style=color:#719e07><</span>Invoker<span style=color:#719e07><</span>T<span style=color:#719e07>>></span> invokers<span style=color:#719e07>,</span> URL url<span style=color:#719e07>,</span> Invocation invocation<span style=color:#719 [...]
+<span style=color:#719e07>}</span>
+</code></pre></div><p>LoadBalance interface has only one select method. Select method chose one invoker among multiple invokers. In the code above, the elements related to Dubbo SPI are:</p><ul><li>@SPI(<a href=http://RandomLoadBalance.NAME>RandomLoadBalance.NAME</a>) @SPI is used for LoadBalance interface, which indicates that the LoadBalance interface is an extension point. Without the @SPI annotation, if we try to load the extension, it will throw an exception. @SPI annotation has one [...]
+<code>RandomLoadBalance.NAME</code> is a constant with value “random” and is a random load balancing implementation. The definition of random is in the configuration file <code>META-INF/dubbo/internal/com.alibaba.dubbo.rpc.cluster.LoadBalance</code>:</li></ul><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=color:#268bd2>random</span><span style=color:#719e07>=</span>com.al [...]
+<span style=color:#268bd2>roundrobin</span><span style=color:#719e07>=</span>com.alibaba.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance
+<span style=color:#268bd2>leastactive</span><span style=color:#719e07>=</span>com.alibaba.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance
+<span style=color:#268bd2>consistenthash</span><span style=color:#719e07>=</span>com.alibaba.dubbo.rpc.cluster.loadbalance.ConsistentHashLoadBalance
+</code></pre></div><p>There are four extension implementations of LoadBalance defined in the configuration file. The implementation of load balancing will not be covered in this article. The only thing we need to know is that Dubbo provides four kinds of load balancing implementations. We can explicitly specify an implementation by using xml file, properties file or JVM parameter. If there has no explicitly specified implementation, Dubbo will use random as default.</p><p><img src=https: [...]
+</code></pre></div><p>Using ExtensionLoader.getExtensionLoader(LoadBalance.class) method to obtain an implementation of ExtensionLoader, then we call getExtension and pass an extension alias to obtain the corresponding extension implementation.</p><h2 id=7-customize-a-loadbalance-extension>7. Customize a LoadBalance Extension</h2><p>In this session, we will use a simple example to implement a LoadBalance and integrate it into Dubbo. I will show some important steps and codes, and the com [...]
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoLoadBalance</span> <span style=color:#268bd2>implements</span> LoadBalance <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>@Override</span>
+ <span style=color:#268bd2>public</span> <span style=color:#719e07><</span>T<span style=color:#719e07>></span> Invoker<span style=color:#719e07><</span>T<span style=color:#719e07>></span> <span style=color:#268bd2>select</span><span style=color:#719e07>(</span>List<span style=color:#719e07><</span>Invoker<span style=color:#719e07><</span>T<span style=color:#719e07>>></span> invokers<span style=color:#719e07>,</span> URL url<span style=color:#719e07>,</span> Inv [...]
+ System<span style=color:#719e07>.</span>out<span style=color:#719e07>.</span>println<span style=color:#719e07>(</span><span style=color:#2aa198>"DemoLoadBalance: Select the first invoker..."</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>return</span> invokers<span style=color:#719e07>.</span>get<span style=color:#719e07>(</span>0<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><h3 id=72-add-extension-configuration-file>7.2 Add extension configuration file</h3><p>Add file:<code>META-INF/dubbo/com.alibaba.dubbo.rpc.cluster.LoadBalance</code>. The content of file is:</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=color:#268bd2>demo</span><span style=color:#719e07>=</span>com.dubbo.spi.demo.consumer.DemoLoadBalance
+</code></pre></div><h3 id=73-configure-customized-loadbalance>7.3 Configure customized LoadBalance</h3><p>Through the above 2 steps, we have already added a LoadBalance implementation named demo, and set up the configuration file. In the next step, we need to explicitly tell Dubbo to implement the demo while doing load balancing. If we use Dubbo through spring, we could set it up in the xml file.</p><div class=highlight><pre style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o [...]
+</code></pre></div><p>Configure <loadbalance=“demo”> in <a href=dubbo:reference>dubbo:reference</a> at consumer part.</p><h3 id=74-launch-dubbo>7.4 launch Dubbo</h3><p>Launch Dubbo and call IHelloService, the console will output log: <code>DemoLoadBalance: Select the first invoker...</code>, which means Dubbo does use our customized LoadBalance.</p><h2 id=summary>Summary</h2><p>So far, we learnt the basic concepts of Dubbo SPI beginning with Java SPI, and we used LoadBalan [...]
+*Extension registration on Dubbo requires only configuration file under the ClassPath directory. It is simple to use and has no effect on the existing code. This meets opening/closed principle.</li><li>Dubbo’s extension mechanism default: @SPI(“dubbo”) represents the default SPI object.</li><li>Dubbo’s extension mechanism supports the advanced features such as IoC and AoP, etc.</li><li>Dubbo’s extension mechanism supports third-party IoC containers. It suppo [...]
\ No newline at end of file
diff --git a/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/index.html b/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/index.html
new file mode 100644
index 00000000000..0ebd1c4911c
--- /dev/null
+++ b/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/index.html
@@ -0,0 +1,300 @@
+<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.80.0"><meta name=ROBOTS content="INDEX, FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/ [...]
+<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav" id=td-section-nav><div class="nav-item dropdown d-block d-lg-none"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=tru [...]
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190811tracing-dubbo-service-with-apache-skywalking href=/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/>Use apache skywalking in dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page active" id=m-blog20190502dubbo-extensible-mechanism-source-code-analysis-part-2 href=/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/>Dubbo extensible mechanism - part 2</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190425dubbo-extensible-mechanism-source-code-analysis-part-1 href=/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/>Dubbo extensible mechanism - part 1</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/>Dubbo Async Client</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface href=/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/>Dubbo Async Server</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices href=/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/>Use Seata in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou href=/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/>The fifth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181107dubbo-integrates-with-nacos-to-become-a-registry href=/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/>Use Dubbo with Nacos</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20181005introduction-to-the-dubbo-protocol href=/blog/2018/10/05/introduction-to-the-dubbo-protocol/>Introduction to the Dubbo protocol</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180930integrate-dubbo-with-kubernetes href=/blog/2018/09/30/integrate-dubbo-with-kubernetes/>Integrate Dubbo with Kubernetes</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-prepare-an-apache-release href=/blog/2018/09/02/how-to-prepare-an-apache-release/>How to prepare an Apache Release</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo href=/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/>New Async Call</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu href=/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/>The fourth Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-consumer-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/>Dubbo Consumer Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-several-ways-about-synchronousasynchronous-invoke href=/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/>Dubbo Invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814dubbo-basic-usage-dubbo-provider-configuration href=/blog/2018/08/14/dubbo-basic-usage-dubbo-provider-configuration/>Dubbo Provider Configuration</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814manipulating-services-dynamically-via-qos href=/blog/2018/08/14/manipulating-services-dynamically-via-qos/>Dubbo QoS Introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop href=/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/>Dubbo start/stop in spring boot</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814implementation-of-cross-language-calls-by-dubbo2js href=/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/>dubbo2.js introduction</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180814generic-invoke-of-dubbo href=/blog/2018/08/14/generic-invoke-of-dubbo/>Generic invoke</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180810dubbos-load-balance href=/blog/2018/08/10/dubbos-load-balance/>Dubbo's Load Balance</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807use-annotations-in-dubbo href=/blog/2018/08/07/use-annotations-in-dubbo/>Use Annotations In Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807using-zookeeper-in-dubbo href=/blog/2018/08/07/using-zookeeper-in-dubbo/>Using Zookeeper in Dubbo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180807dubbo-101 href=/blog/2018/08/07/dubbo-101/>Your First Dubbo Demo</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen href=/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/>The third Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180727sentinel-the-flow-sentinel-of-dubbo-services href=/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/>Introduce sentinel</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180712tracking-with-pinpoint href=/blog/2018/07/12/tracking-with-pinpoint/>Tracking with Pinpoint</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180701your-first-dubbo-filter href=/blog/2018/07/01/your-first-dubbo-filter/>Your First Dubbo Filter</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully href=/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/>The second Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180512the-first-dubbo-meetup-has-been-held-in-beijing href=/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/>The first Dubbo meetup</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180502the-apachecon-na-schedule-has-been-announced href=/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/>ApacheCon NA</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180425the-gsocgoogle-summer-of-code-2018 href=/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/>GSoC 2018</a>
+<a class="td-sidebar-link td-sidebar-link__page" id=m-blog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018 href=/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/>QCon Beijing 2018</a></li></ul></ul><ul class="td-sidebar-nav__section pr-md-3"><li class=td-sidebar-nav__section-title><a href=/blog/releases/ class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Releases</a></li><ul><li class=collapse id=blogreleases><a class="td-sidebar-link t [...]
+<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/introduction-to-dubbo-spi-2.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%2 [...]
+<a href="https://github.com/apache/dubbo-website/issues/new?title=Dubbo%20extensible%20mechanism%20source%20code%20analysis%20-%20part%202" target=_blank><i class="fab fa-github fa-fw"></i>Create documentation issue</a>
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i>Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#extensionloader>ExtensionLoader</a></li><li><a href=#auto-assembly-of-dubbo-spi-advanced-usage>Auto-assembly of Dubbo SPI advanced usage</a></li><li><a href=#aop-of-dubbo-spi-advanced-usage>AOP of Dubbo SPI advanced usage</a><ul><li><a href=#what-is-the-wrapper-class>What is the Wrapper class</a></li><li><a href=#how-to- [...]
+This is a static factory method that enters an extensible interface and returns an ExtensionLoader entity class for this interface. With this entity class, you can get not only a specific extension based on name, but also an adaptive extension.</li></ol><div class=highlight><pre 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=color:#268bd2>public</span> <span style=color:#268bd2>static</span> <span [...]
+ <span style=color:#586e75>// An extension point must be an interface
+</span><span style=color:#586e75></span> <span style=color:#719e07>if</span> <span style=color:#719e07>(!</span>type<span style=color:#719e07>.</span>isInterface<span style=color:#719e07>())</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> IllegalArgumentException<span style=color:#719e07>(</span><span style=color:#2aa198>"Extension type("</span> <span style=color:#719e07>+</span> type <span style=color:#719e07>+</span> <span style=color:#2aa198>") is not interface!"</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#586e75>// @SPI annotations must be provided
+</span><span style=color:#586e75></span> <span style=color:#719e07>if</span> <span style=color:#719e07>(!</span>withExtensionAnnotation<span style=color:#719e07>(</span>type<span style=color:#719e07>))</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> IllegalArgumentException<span style=color:#719e07>(</span><span style=color:#2aa198>"Extension type without @SPI Annotation!"</span><span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#586e75>// Get the corresponding ExtensionLoader from the cache according to the interface
+</span><span style=color:#586e75></span> <span style=color:#586e75>// Each extension will only be loaded once
+</span><span style=color:#586e75></span> ExtensionLoader<span style=color:#719e07><</span>T<span style=color:#719e07>></span> loader <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>ExtensionLoader<span style=color:#719e07><</span>T<span style=color:#719e07>>)</span> EXTENSION_LOADERS<span style=color:#719e07>.</span>get<span style=color:#719e07>(</span>type<span style=color:#719e07>);</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>loader <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span><span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#586e75>// Initialize extension
+</span><span style=color:#586e75></span> EXTENSION_LOADERS<span style=color:#719e07>.</span>putIfAbsent<span style=color:#719e07>(</span>type<span style=color:#719e07>,</span> <span style=color:#719e07>new</span> ExtensionLoader<span style=color:#719e07><</span>T<span style=color:#719e07>>(</span>type<span style=color:#719e07>));</span>
+ loader <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>ExtensionLoader<span style=color:#719e07><</span>T<span style=color:#719e07>>)</span> EXTENSION_LOADERS<span style=color:#719e07>.</span>get<span style=color:#719e07>(</span>type<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>return</span> loader<span style=color:#719e07>;</span>
+<span style=color:#719e07>}</span>
+
+<span style=color:#268bd2>private</span> <span style=color:#268bd2>ExtensionLoader</span><span style=color:#719e07>(</span>Class<span style=color:#719e07><?></span> type<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>this</span><span style=color:#719e07>.</span>type <span style=color:#719e07>=</span> type<span style=color:#719e07>;</span>
+ objectFactory <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>type <span style=color:#719e07>==</span> ExtensionFactory<span style=color:#719e07>.</span>class <span style=color:#719e07>?</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>:</span> ExtensionLoader<span style=color:#719e07>.</span>getExtensionLoader<span style=color:#719e07>(</span>ExtensionFactory<span style=color:#719e07>.</span>class<span style=color:#719e07>).</span>getAd [...]
+<span style=color:#719e07>}</span>
+</code></pre></div><ol start=2><li>getExtension</li></ol><div class=highlight><pre 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=color:#268bd2>public</span> T <span style=color:#268bd2>getExtension</span><span style=color:#719e07>(</span>String name<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ Holder<span style=color:#719e07><</span>Object<span style=color:#719e07>></span> holder <span style=color:#719e07>=</span> cachedInstances<span style=color:#719e07>.</span>get<span style=color:#719e07>(</span>name<span style=color:#719e07>);</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>holder <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span><span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ cachedInstances<span style=color:#719e07>.</span>putIfAbsent<span style=color:#719e07>(</span>name<span style=color:#719e07>,</span> <span style=color:#719e07>new</span> Holder<span style=color:#719e07><</span>Object<span style=color:#719e07>>());</span>
+ holder <span style=color:#719e07>=</span> cachedInstances<span style=color:#719e07>.</span>get<span style=color:#719e07>(</span>name<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ Object instance <span style=color:#719e07>=</span> holder<span style=color:#719e07>.</span>get<span style=color:#719e07>();</span>
+ <span style=color:#586e75>// Get it from the cache. If it does not exist, create
+</span><span style=color:#586e75></span> <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>instance <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span><span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>synchronized</span> <span style=color:#719e07>(</span>holder<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ instance <span style=color:#719e07>=</span> holder<span style=color:#719e07>.</span>get<span style=color:#719e07>();</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>instance <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span><span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ instance <span style=color:#719e07>=</span> createExtension<span style=color:#719e07>(</span>name<span style=color:#719e07>);</span>
+ holder<span style=color:#719e07>.</span>set<span style=color:#719e07>(</span>instance<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>return</span> <span style=color:#719e07>(</span>T<span style=color:#719e07>)</span> instance<span style=color:#719e07>;</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>Some judgments and caching have been made in the getExtension method, and the main logic is in the createExtension method. Let’s move on to the createExtension method.</p><div class=highlight><pre 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=color:#268bd2>private</span> T <span style=color:#268bd2>createExtension</span><span style=color:#719e07>(</span>String name<spa [...]
+ <span style=color:#586e75>// Get the extension class according to the name of extension point. For example, for LoadBalance, get the RandomLoadBalance class according to random
+</span><span style=color:#586e75></span> Class<span style=color:#719e07><?></span> clazz <span style=color:#719e07>=</span> getExtensionClasses<span style=color:#719e07>().</span>get<span style=color:#719e07>(</span>name<span style=color:#719e07>);</span>
+
+ T instance <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>T<span style=color:#719e07>)</span> EXTENSION_INSTANCES<span style=color:#719e07>.</span>get<span style=color:#719e07>(</span>clazz<span style=color:#719e07>);</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>instance <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span><span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#586e75>// Use reflection to call newInstance to create an example of an extension class
+</span><span style=color:#586e75></span> EXTENSION_INSTANCES<span style=color:#719e07>.</span>putIfAbsent<span style=color:#719e07>(</span>clazz<span style=color:#719e07>,</span> <span style=color:#719e07>(</span>T<span style=color:#719e07>)</span> clazz<span style=color:#719e07>.</span>newInstance<span style=color:#719e07>());</span>
+ instance <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>T<span style=color:#719e07>)</span> EXTENSION_INSTANCES<span style=color:#719e07>.</span>get<span style=color:#719e07>(</span>clazz<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#586e75>// Make dependency injection for the extended class samples
+</span><span style=color:#586e75></span> injectExtension<span style=color:#719e07>(</span>instance<span style=color:#719e07>);</span>
+ <span style=color:#586e75>// If there is a wrapper, add the wrapper
+</span><span style=color:#586e75></span> Set<span style=color:#719e07><</span>Class<span style=color:#719e07><?>></span> wrapperClasses <span style=color:#719e07>=</span> cachedWrapperClasses<span style=color:#719e07>;</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>wrapperClasses <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>&&</span> <span style=color:#719e07>!</span>wrapperClasses<span style=color:#719e07>.</span>isEmpty<span style=color:#719e07>())</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>for</span> <span style=color:#719e07>(</span>Class<span style=color:#719e07><?></span> wrapperClass <span style=color:#719e07>:</span> wrapperClasses<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ instance <span style=color:#719e07>=</span> injectExtension<span style=color:#719e07>((</span>T<span style=color:#719e07>)</span> wrapperClass<span style=color:#719e07>.</span>getConstructor<span style=color:#719e07>(</span>type<span style=color:#719e07>).</span>newInstance<span style=color:#719e07>(</span>instance<span style=color:#719e07>));</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>return</span> instance<span style=color:#719e07>;</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>The createExtension method has done the following:</p><ol><li>First, get the corresponding extension class according to name. Read the extension point configuration file from the <code>META-INF</code> folder under ClassPath.</li><li>Use reflection to create an instance of an extended class.</li><li>make dependency injection for the attributes of the extended class instance. That is, IoC.</li><li>If there is a wrapper, add the wrapper. That is, AOP.</li></ol><p>Let&r [...]
+ Map<span style=color:#719e07><</span>String<span style=color:#719e07>,</span> Class<span style=color:#719e07><?>></span> classes <span style=color:#719e07>=</span> cachedClasses<span style=color:#719e07>.</span>get<span style=color:#719e07>();</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>classes <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span><span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>synchronized</span> <span style=color:#719e07>(</span>cachedClasses<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ classes <span style=color:#719e07>=</span> cachedClasses<span style=color:#719e07>.</span>get<span style=color:#719e07>();</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>classes <span style=color:#719e07>==</span> <span style=color:#cb4b16>null</span><span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ classes <span style=color:#719e07>=</span> loadExtensionClasses<span style=color:#719e07>();</span>
+ cachedClasses<span style=color:#719e07>.</span>set<span style=color:#719e07>(</span>classes<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>return</span> classes<span style=color:#719e07>;</span>
+ <span style=color:#719e07>}</span>
+
+<span style=color:#586e75>// synchronized in getExtensionClasses
+</span><span style=color:#586e75></span><span style=color:#268bd2>private</span> Map<span style=color:#719e07><</span>String<span style=color:#719e07>,</span> Class<span style=color:#719e07><?>></span> loadExtensionClasses<span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
+ <span style=color:#268bd2>final</span> SPI defaultAnnotation <span style=color:#719e07>=</span> type<span style=color:#719e07>.</span>getAnnotation<span style=color:#719e07>(</span>SPI<span style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>defaultAnnotation <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span><span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ String value <span style=color:#719e07>=</span> defaultAnnotation<span style=color:#719e07>.</span>value<span style=color:#719e07>();</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>value <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>&&</span> <span style=color:#719e07>(</span>value <span style=color:#719e07>=</span> value<span style=color:#719e07>.</span>trim<span style=color:#719e07>()).</span>length<span style=color:#719e07>()</span> <span style=color:#719e07>></span> 0<span style=color:#719e07>)</span> <span style=col [...]
+ String<span style=color:#719e07>[]</span> names <span style=color:#719e07>=</span> NAME_SEPARATOR<span style=color:#719e07>.</span>split<span style=color:#719e07>(</span>value<span style=color:#719e07>);</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>names<span style=color:#719e07>.</span>length <span style=color:#719e07>></span> 1<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>throw</span> <span style=color:#719e07>new</span> IllegalStateException<span style=color:#719e07>(</span><span style=color:#2aa198>"more than 1 default extension name on extension "</span> <span style=color:#719e07>+</span> type<span style=color:#719e07>.</span>getName<span style=color:#719e07>());</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>names<span style=color:#719e07>.</span>length <span style=color:#719e07>==</span> 1<span style=color:#719e07>)</span> cachedDefaultName <span style=color:#719e07>=</span> names<span style=color:#719e07>[</span>0<span style=color:#719e07>];</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+
+ Map<span style=color:#719e07><</span>String<span style=color:#719e07>,</span> Class<span style=color:#719e07><?>></span> extensionClasses <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> HashMap<span style=color:#719e07><</span>String<span style=color:#719e07>,</span> Class<span style=color:#719e07><?>>();</span>
+ loadFile<span style=color:#719e07>(</span>extensionClasses<span style=color:#719e07>,</span> DUBBO_INTERNAL_DIRECTORY<span style=color:#719e07>);</span>
+ loadFile<span style=color:#719e07>(</span>extensionClasses<span style=color:#719e07>,</span> DUBBO_DIRECTORY<span style=color:#719e07>);</span>
+ loadFile<span style=color:#719e07>(</span>extensionClasses<span style=color:#719e07>,</span> SERVICES_DIRECTORY<span style=color:#719e07>);</span>
+ <span style=color:#719e07>return</span> extensionClasses<span style=color:#719e07>;</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>This process is very simple. Get the extension class from the cache first, and if it does not exist, load it from the configuration file. The path of the configuration file has been mentioned before:</p><ul><li><code>META-INF/dubbo/internal</code></li><li><code>META-INF/dubbo</code></li><li><code>META-INF/services</code></li></ul><ol start=2><li>Use reflection to create an extended instance. This process is very simple. We can do this using <code>clazz.newInstance() [...]
+ <span style=color:#719e07>for</span> <span style=color:#719e07>(</span>Method method <span style=color:#719e07>:</span> instance<span style=color:#719e07>.</span>getClass<span style=color:#719e07>().</span>getMethods<span style=color:#719e07>())</span> <span style=color:#719e07>{</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>method<span style=color:#719e07>.</span>getName<span style=color:#719e07>().</span>startsWith<span style=color:#719e07>(</span><span style=color:#2aa198>"set"</span><span style=color:#719e07>)</span>
+ <span style=color:#719e07>&&</span> method<span style=color:#719e07>.</span>getParameterTypes<span style=color:#719e07>().</span>length <span style=color:#719e07>==</span> 1
+ <span style=color:#719e07>&&</span> Modifier<span style=color:#719e07>.</span>isPublic<span style=color:#719e07>(</span>method<span style=color:#719e07>.</span>getModifiers<span style=color:#719e07>()))</span> <span style=color:#719e07>{</span>
+ Class<span style=color:#719e07><?></span> pt <span style=color:#719e07>=</span> method<span style=color:#719e07>.</span>getParameterTypes<span style=color:#719e07>()[</span>0<span style=color:#719e07>];</span>
+
+ String property <span style=color:#719e07>=</span> method<span style=color:#719e07>.</span>getName<span style=color:#719e07>().</span>length<span style=color:#719e07>()</span> <span style=color:#719e07>></span> 3 <span style=color:#719e07>?</span> method<span style=color:#719e07>.</span>getName<span style=color:#719e07>().</span>substring<span style=color:#719e07>(</span>3<span style=color:#719e07>,</span> 4<span style=color:#719e07>).</span>toLowerCase<span style=color:#7 [...]
+ Object object <span style=color:#719e07>=</span> objectFactory<span style=color:#719e07>.</span>getExtension<span style=color:#719e07>(</span>pt<span style=color:#719e07>,</span> property<span style=color:#719e07>);</span>
+ <span style=color:#719e07>if</span> <span style=color:#719e07>(</span>object <span style=color:#719e07>!=</span> <span style=color:#cb4b16>null</span><span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+ method<span style=color:#719e07>.</span>invoke<span style=color:#719e07>(</span>instance<span style=color:#719e07>,</span> object<span style=color:#719e07>);</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>}</span>
+ <span style=color:#719e07>return</span> instance<span style=color:#719e07>;</span>
+<span style=color:#719e07>}</span>
+</code></pre></div><p>To accomplish the automatic assembly of dependencies of the extended instances, you first need to know what the dependencies are and what the types of dependencies are. The solution of Dubbo is to find the Java standard setter method. That is, the method name starting with set has only one parameter. If such a set method exists in an extension class, Dubbo injects it into dependencies, which is similar to the injection of Spring’s set method. However, dependen [...]
+ <span style=color:#719e07>this</span><span style=color:#719e07>.</span>type <span style=color:#719e07>=</span> type<span style=color:#719e07>;</span>
+ objectFactory <span style=color:#719e07>=</span> <span style=color:#719e07>(</span>type <span style=color:#719e07>==</span> ExtensionFactory<span style=color:#719e07>.</span>class <span style=color:#719e07>?</span> <span style=color:#cb4b16>null</span> <span style=color:#719e07>:</span> ExtensionLoader<span style=color:#719e07>.</span>getExtensionLoader<span style=color:#719e07>(</span>ExtensionFactory<span style=color:#719e07>.</span>class<span style=color:#719e07>).</span>getAd [...]
+<span style=color:#719e07>}</span>
+</code></pre></div><p>ObjectFacore is also an extension, obtained through <code>ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getAdaptiveExtension()</code>.</p><p><img src=/imgs/blog/dubbo-extensionfactory.png alt=Dubbo-ExtensionFactory></p><p>ExtensionFactory includes three implementations:</p><ol><li>SpiExtensionFactory: use Dubbo’s Spi to load Extension.</li><li>SpringExtensionFactory: load Extension from the Spring container.</li><li>AdaptiveExtensionFactory: adapt [...]
+<span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>AdaptiveExtensionFactory</span> <span style=color:#268bd2>implements</span> ExtensionFactory <span style=color:#719e07>{</span>
+
+ <span style=color:#268bd2>private</span> <span style=color:#268bd2>final</span> List<span style=color:#719e07><</span>ExtensionFactory<span style=color:#719e07>></span> factories<span style=color:#719e07>;</span>
+
+ <span style=color:#268bd2>public</span> <span style=color:#268bd2>AdaptiveExtensionFactory</span><span style=color:#719e07>()</span> <span style=color:#719e07>{</span>
... 1049611 lines suppressed ...