You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by zh...@apache.org on 2021/09/04 15:57:54 UTC

[dubbo-go-samples] branch config-enhance updated (18ecfaf -> 7dfa08b)

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

zhaoyunxing pushed a change to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git.


    omit 18ecfaf  fix: triple attachment ci (#221)
    omit b6a6e75  Config enhance rpc dubbo (#213)
    omit 30efb4c  Feat/nacos registry (#217)
    omit 7119c9e  Ftr/direct samples (#216)
    omit cee9d7d  Ftr: support new integrate_test in new dubbo samples (#215)
    omit 252c76e  Add apollo config center sample (#208)
    omit 641240c  update nacos samples config (#205)
    omit 6746491  add triple msgpack sample (#212)
    omit b34d815  update triple user api to standard, add hessian2 samples  (#211)
    omit 2c2c0c4  Add some samples  (#204)
    omit 21b18de  Config enhance v3 (#203)
    omit a3d52ff  Merge pull request #190 from zhaoyunxing92/config-enhance
    omit 009fc77  add:zk registry
    omit 43b23b4  fix: init new config
    omit dc4fd76  Ftr: Generic invocation supports generalizer.Generalizer (#170)
    omit 242b869  add multi-zone run/debug configuration (#181)
    omit de22699  Fix: fix 3.0 branch game integrate error & delete useless file (#185)
    omit 52b8c28  change the wrong comment
    omit 3e24f59  Ftr: 3.0 lumberjack log sample (#179)
    omit 6120585  update howto doc (#177)
    omit 48c218e  Fix: delete useless & wrong xml files in .run folder (#173)
    omit 7ac498f  fix: add chain middle wait time
    omit 6ca280f  fix: add waiter after middle start
    omit ec8ae68  fix: fix chan middle waiter
    omit 8f94478  fix: add chan zk waiter
    omit 49dc917  docker Waiter for all samples (#176)
    omit 167afb3  Mod: modify import blocks for branch 3.0 (#167)
    omit 37c4cfa  fix (#175)
    omit cdda6fc  Fix: multi-zone imports (#172)
    omit 0a1f5a4  Feature/etcd service discovery (#164)
    omit cca4102  Tracing integration new (#163)
    omit 6ff8949  Ftr: Add integration test multi-server support (#161)
    omit c875ae7  fix: fix dynamic naming mapping of app level service disc (#155)
    omit 7e51e8a  Revert "add tracing integration test (#156)" (#162)
    omit 7c8fc1c  add tracing integration test (#156)
    omit 8534c34  fix: delete unused
    omit beb3c69  fix: java demo
    omit 6355b5b  Rft: Metadata service (#157)
    omit 1bc04f1  hessian.RegisterPOJO(&pkg.User{}) 重复调用 (#154)
    omit 2b0b10b  add service discovery .run (#151)
    omit a1da198  fix: fix side effect (#147)
    omit fbabb97  add filter to test/client.yml (#146)
    omit 9d28e97  add .run xml for goland to quick start (#129)
    omit d113ee8  Fix: seata panic , attachment to AttachmentKey (#148)
    omit 384c872  fix(tracing): add StartSpanFromContext to jaeger test case & fix some error (#145)
    omit a3cba30  fix: fix multi registry integrate test (#144)
    omit 5f7fd09  Merge pull request #142 from zhaoyunxing92/seata
    omit abfa055  fmt file
    omit c11251c  add seata run
    omit 1fa60b6  fix: add 3.0 test (#141)
    omit 4aa783b  fix: update dubbogo version and integrate test
    omit 86137ea  Fix: change 3.0 streaming test and samples to reactive (#140)
    omit defcc32  add triple integration test (#139)
    omit f7fa507  Tst: add router to integration and fix hessian2 sample (#124)
    omit c1dd832  mod jsonrpc catalogue (#126)
    omit da8780a  Ftr/3.0msgpack and triple codec extension samples (#138)
    omit 848b52b  application service discovery nacos reporter example (#123)
    omit 0cbbc12  update dubbo-go version (#137)
    omit 508450c  fix:  3.0 triple/grpc provider generated reference function by proto-gen-dubbo (#128)
    omit c593b46  Dep: Rename import name for remotingMetadataService (#132)
    omit 0204aa8  bump dubbo-go version (#131)
    omit a06e170  Ftr: Tengine Calls Dubbo-go Example (#122)
    omit e6ea018  fix: updata go get dubbo-gen script (#105)
    omit 30a4239  add etcd integrate test (#107)
    omit 480e220  Merge pull request #106 from ztelur/3.0
    omit 2da1d0f  improve etcd version
    omit 0eee127  3.0test (#102)
    omit 0391ea1  fix: add service-disc zk client .run
    omit 3a17ab1  Ftr/dubbo3 (#81)
    omit ad54376  Merge pull request #84 from horizonzy/fix-directory-problem
    omit fcabfc7  fix directory problem.
    omit a9611d5  Merge pull request #80 from apache/fix/Id
    omit 867e84a  Id -> ID
    omit 09fe57d  Merge pull request #79 from zfkun/game
    omit fd8dba7  add:game samples
    omit 091a70a  Merge pull request #68 from cjphaha/tls
    omit 96a7667  Merge pull request #78 from xiaoliu10/fix_zk_configcenter
    omit 26ee38d  Merge pull request #77 from zhaoyunxing92/generic
    omit 903836b  1. fix zk configcenter can not found zk node
    omit f710bd4  up:mv it to the 3rd import block
    omit 72d67bc  up:mv it to the 3rd import block
    omit 529412a  add:generic samples
    omit 6915bbb  mod Id to ID
    omit f09c490  del blank line go-server/pkg/user.go
    omit 02a9c8c  Merge pull request #70 from milerL/nacos
    omit 5565f5c  Merge pull request #75 from zhaoyunxing92/multi-registry
    omit 4a7e053  up:语法问题
    omit 4b1439a  up:更新导报问题
    omit f7604ca  add:multi registry
    omit 800b322  Merge pull request #73 from xiaoliu10/upgrade_seata_version
    omit 3e892e3  mod refmt go-client/pkg/user
    omit 6cc79ea  mod problems in pr
    omit 7d40940  Merge pull request #72 from beiwei30/hello-world
    omit 07edb96  Upgrade the Seata version to adapt the Getty WritePkg method to increase the return value
    omit d9304c9  Upgrade the Seata version to adapt the Getty WritePkg method to increase the return value
    omit 0ab36fc  fix: issue#71
    omit 76f2b1c  修改:修复registry/nacos示例无法正常使用的问题,调整client.yml和server.yml方便阅读
    omit ac38818  adjust import sequence in nacos
    omit 7f64aed  add apache license & mod folder
    omit 84c0a7e  add tls sample
    omit 101f7e9  Merge pull request #52 from yakecanlee/feature/add-sample
    omit 1fca0de  fix helloworld sample
    omit bacaeed  fix error imports
    omit 49f45a6  fix helloworld java sample
    omit 8ec9fbe  adjust imports and readme
    omit 0f65d0b  group the imports
    omit aeab8f8  add readme_zh for samples
    omit 38ed266  add run configuration for samples
    omit 33eafbe  add readme and run configuration for rest sample
    omit 8863839  add readme for group
    omit 71cf228  add readme for generic and helloworld
    omit a804655  Merge pull request #62 from beiwei30/configcenter
    omit 12a139c  fix: regroup import for nacos configcenter
    omit 502c238  fix: regroup imports
    omit e5999a2  Merge pull request #66 from beiwei30/filter
    omit ae3feca  Merge pull request #64 from beiwei30/docker
    omit 219ffe3  Merge pull request #63 from beiwei30/direct
    omit d75c0be  enable IT for configcenter/zookeeper and filter/sentinel
    omit aacfd85  fix: make integration test work for custom filter, correct dir
    omit a01ac0a  fix: README for filter samples
    omit cf6167f  fix: revise README
    omit b620ba6  fix: group import, add run files
    omit 6113e69  fix: add run configs for docker
    omit f9e711f  fix: regroup import
    omit ec9f630  fix: regroup imports
    omit 7df670e  configcenter readme, import and run files
    omit b970ee8  Merge pull request #57 from beiwei30/config-api
    omit a300659  Merge pull request #61 from zhaoyunxing92/master
    omit 42fa80e  up:调整import顺序
    omit e575e56  Merge pull request #59 from PhilYue/feature/direct/readme
    omit a25270e  修复语法错误
    omit b004549  add:metric readme
    omit 41d83f4  Add: fix the .run for direct
    omit 80d6086  Add: .run for direct
    omit 47c5008  Doc: improving README and README_zh
    omit 176cbe4  Mod: clear out the unneeded config
    omit f7bd0b1  Merge pull request #55 from beiwei30/async
    omit 9806c48  Merge pull request #58 from beiwei30/context
    omit bb4b680  Doc: formatting docs of README_zh
    omit 2f4856d  optmize imports
    omit c5d7635  optimize imports
    omit a17295c  Doc: formatting docs of README and cleaning
    omit 4bfdc91  Doc: formatting docs of README
    omit 28f6443  Doc: improving docs of README
    omit 207264e  Doc: adding direct README_zh and cleaning
    omit ca13cd8  fix: regroup import
    omit 302ab73  add:metric文档
    omit ca1e14b  feat: add run configs, and regroup import
    omit 195b985  fix: regroup imports
    omit 7f05bde  fix: add run configs, bump up dubbo-go version, revise README
    omit d7687f2  Doc: adding direct README
    omit 97e33bb  Merge pull request #4 from apache/master
    omit 52644af  Merge pull request #53 from zhaoyunxing92/master
    omit 58e82e7  add README
    omit eb2e0ee  Merge pull request #3 from apache/master
    omit 566af02  add run configurations and fix client issue.
    omit 725de98  Merge pull request #54 from beiwei30/chain
    omit ae86a09  group var declaration
    omit 58c828b  optimize imports
    omit 2525e05  add apache license header
    omit d2bf83e  add "chain" example
    omit cb325dd  Merge pull request #2 from apache/master
    omit b393262  add:metric文档
    omit df451eb  Merge pull request #51 from LaurenceLiZhixin/fix/etcd
    omit cb3b01b  Merge pull request #49 from lauyang/patch-2
    omit a594672  fix: add provide_by
    omit c6e5758  Update README_zh.md
    omit 6be9874  Merge pull request #48 from dk-lockdown/master
    omit 497cc48  upgrade seata-golang version
    omit bb7a0d6  Merge pull request #43 from LaurenceLiZhixin/ftr/docker
    omit 4b3fb3b  Merge pull request #44 from LaurenceLiZhixin/ftr/config-api
    omit 2b4f2ac  Merge pull request #45 from LaurenceLiZhixin/fix/consul-readme
    omit fe189cd  Merge pull request #46 from LaurenceLiZhixin/ftr/context
    omit dedc754  fix: add consul readme
    omit a3d14e6  fix: add zh readme
    omit 0b01f9d  fix: add zh readme
    omit 6632817  fix: add cn readme
    omit 5c609cb  Merge pull request #47 from cityiron/1.5.6-test
    omit e614f74  update dubbogo to 1.5 latest commit
    omit 92e0a93  ftr: context sample
    omit ae13df4  fix: consul readme
    omit c5b09e7  ftr:config api
    omit f96fe82  ftr: add docker
    omit 425b1a2  Merge pull request #41 from beiwei30/attachment-run-config
    omit 224f018  Merge pull request #40 from beiwei30/translate
    omit 5e69c94  provide run configuration for attachment sample
    omit f19b59f  provide HOWTO, and translate all docs into Chinese.
    omit 91c2483  Merge pull request #39 from beiwei30/docs
    omit 8f37179  enhance docs
    omit 885db97  Merge pull request #38 from zhaoyunxing92/master
    omit 6f5c173  add:.run file
    omit 7bbd016  Merge pull request #37 from beiwei30/attachment
    omit b5867ec  add zh_CN README
    omit f896ca7  comment sentinel tempararily
    omit aef62db  adjust sentinel version
    omit 1b1db7b  bump up sentinel-go version to v1.0.2
    omit e452c22  add CI badge
    omit 7257826  add attachment sample
    omit 1e9b072  Merge branch '1.5.5'
    omit de91c00  merge master
    omit df07a3e  merge master
    omit 86a6f7b  Merge pull request #24 from fangyincheng/fix-2.7
    omit 329248b  Merge pull request #32 from LaurenceLiZhixin/fix/grpcStreamBug
    omit 5ac5646  Merge pull request #31 from louyuting/20201227-update-sentinel-go
    omit 145b86c  fix: fix dubbo grpc stream bug
    omit 469fe78  upgrade sentinel go to 1.0.1
    omit 49609b5  refact generic/java
    omit ac5b159  resolve conflicts
    omit a2ec4b1  Merge pull request #17 from apache/1.5.5
    omit 0c6af36  update version for release
    omit d439511  update version
    omit c7048b9  update version
    omit 7f02dae  resolve conflicts
    omit dd4be5b  add java for general
    omit 3e66db1  Merge pull request #27 from apache/fix_mod
    omit ab98b4e  resolve conflict
    omit 8736511  fix: go mod tidy error
    omit 95b1fae  fix router problem
    omit 740f2f7  Merge pull request #25 from georgehao/1.5.5
    omit 37850bb  Merge pull request #23 from cityiron/fix-sd-file
    omit fa829be  Merge branch '1.5.5' into 1.5.5-georgehao
    omit 1b1fa1f  Merge branch '1.5.5' into fix-sd-file
    omit 2fd951f  remove sd/consul
    omit bb10e58  merge
    omit 3274111  add provid_by
    omit ed77fa5  feat: add registry/servicediscovery/etcd client.yaml add provide_by
    omit 657cf27  modify consul demo to support makefile (#22)
    omit 061030c  test
    omit dd84b14  Merge pull request #21 from LaurenceLiZhixin/1.5.5
    omit 44bd9a5  Merge pull request #20 from cityiron/seata-sample
    omit 398f653  fix: change pb.go
    omit 9d10173  fix: use protobuf 1.3.2 to generate proper pb.go
    omit de843d1  fix: re cicd
    omit 92c0711  fix: dubbo-go repository path
    omit 12e1125  add integrate
    omit ff07427  change client name equals provider
    omit 1d00fc6  remove seata mod
    omit 7a992b8  Merge pull request #16 from pantianying/sentinel-filter
    omit e8b3c67  fix: delete unused gosum
    omit 0f66623  fix: change grpc and sentinel version
    omit 5f5e8e7  fix bug
    omit a735fdc  add script on integrate
    omit f53386f  fix router case
    omit 44fda64  seata sample run
    omit a031c0f  fix sd/zookeeper case
    omit 83f126f  Merge remote-tracking branch 'apache-dubbo-go-samples/1.5.5' into 1.5.5
    omit 1680468  add sd/zookeeper case
    omit cfd2c00  Update dubbo-go version
    omit 1aa054f  Update dubbo-go version
    omit 0723cca  fix test problem
    omit dad13c6  update version num
    omit f2c5cc5  update pkg
    omit 498e589  Merge pull request #19 from mark4z/master
    omit 8dea98d  add sd/zookeeper case
    omit 321a312  fix integration
    omit 7db7587  fix integration
    omit 70662bb  Update dubbo-go version
    omit b8c2ea5  Update dubbo-go version
    omit d6ef2ef  fix test problem
    omit 6860d94  update version num
    omit d419676  add integration test
    omit 68f9cb6  add sentinel-filter sample
    omit 1061538  Merge pull request #15 from zouyx/master
    omit 69ee55b  remove multi-registry case
    omit 32974b3  remove router/tag case and fix zookeeper service discovery case
    omit 4323b16  remove configcenter/zookeeper case
    omit fca4c3c  fix test problem
    omit c6c8223  fix test problem
    omit 19490a7  fix test problem
    omit 700b171  fix test problem
    omit 43bfcd5  add configcenter/zookeeper case
    omit cc6e794  change log level
    omit 8935e9f  add more test case
    omit 0ba46db  update pkg
    omit b1cc35c  Merge pull request #13 from zouyx/master
    omit 90d7aec  change log level
    omit ecb1e84  fix test problem
    omit 23f4ccb  remove test
    omit e948015  change test method
    omit 718b4f1  fix test problem
    omit 1add7c8  add exit code for test
    omit 6436108  add exit code for test
    omit 6223164  Test return exit code when panic
    omit a2ed46c  Fix Makefile bug
    omit 1882fd2  change stop to clean step
    omit a9808d8  delete useless files
    omit 9e52237  1.change log level for async dir 2.revert makefile
    omit 7c52339  1.delete useless dir 2.add _ "github.com/apache/dubbo-go/metadata/service/inmemory" for all test dir 3.change log level to error
    omit 2d36800  fix problems
    omit eb0aecd  add more test case
    omit 2e433b3  add more test case
    omit a7d4e82  add more test case
    omit a333952  add more test case
    omit 2533021  add more test case
    omit 22493e1  add more test case
    omit 0207628  update test case
    omit 5d585d2  update test case
    omit 08417eb  fix problems
    omit bf718cd  fix problems
    omit 027d614  add general test
    omit e00e54e  add general test
    omit ac06aa4  Merge branch 'master-apache-dubbo-go-samples'
    omit 19caad0  Merge branch 'master-apache-dubbo-go-samples'
    omit 919222d  fix problems
    omit b902b00  Merge remote-tracking branch 'origin/master'
    omit 4c0d8df  Merge branch 'feature/addTravis'
    omit ff7ed65  add github action
    omit 7bf5670  Update blank.yml
    omit d1e1b08  add github action
    omit f385cbc  add github action
    omit 66eaa87  Create blank.yml
    omit 904a232  Merge pull request #12 from zouyx/master
    omit 2793183  fix bug
    omit fd1ccfd  fix problems
    omit 795ef6c  rename package
    omit 92319db  fix package problem
    omit d7773ce  add travis
    omit 6a87059  make grpc work with integration test
    omit db32d44  make general/dubbo work with integration test
    omit eca144a  make integration test work for router/condition
    omit e11dab6  enhance makefile
    omit 1eb5b31  enhance makefile to allow replace variables in conf yaml files.
    omit 8630dff  servicediscovery/zookeeper
    omit 4e372b2  make registry/servicediscovery/nacos work with integration test
    omit 9979a21  make registry/servicediscovery/file work with integration test
    omit 4e25961  correct registry/servicediscovery/etcd
    omit 218caa4  add a FIXME
    omit e5909a9  refresh dubbo-go to snapshot, make servicediscovery/etcd works.
    omit 4d34a4f  make integration test works for registry/nacos
    omit 33a0f2e  make integration test work for registry/etcd
    omit 5ce065e  reformat helloworld
    omit 339e5ff  make integration test work for multi-registry
    omit 208abb7  enhance makefile
    omit c25e8aa  rename dir
    omit 104c314  make integration test work for metric and zone
    omit 62b7282  fix PID
    omit c666d1c  Merge pull request #10 from zouyx/feature/fixAutoTest
    omit 34dfe3d  Merge pull request #9 from apache/tag_router
    omit 6f8cda7  Fix: fmt codes
    omit 84f4936  Fix: fmt codes
    omit 7406106  Fix: lost a pkg in general
    omit 953673d  Add: tag router examples
    omit ed3f3d1  Merge pull request #8 from zouyx/feature/fixAutoTest
    omit 9607e80  change test steps
    omit 33a5de3  change dir
    omit ba5f0fd  start integrate test
    omit 25f33f8  remove problems code
    omit f3de20f  delete
    omit 7b9e32f  travis add Make
    omit e0e2fbe  make integration test works for metrics
    omit 47811fd  clean up useless code
    omit 2142d1e  make integration test works for filter/tpslimit
    omit 5c07bf5  make integration test works for fiter/custom_filter
    omit f19feed  Merge pull request #7 from zhangshen023/consul_service_discovery
    omit f2dfc66  make integration test work for configcenter/zookeeper
    omit aeb1750  remove useless java dirs
    omit 20e4f90  make integration test works for nacos
    omit cdbddd8  clean up imports
    omit a591c09  make integration test works for configcenter/apollo
    omit e42f3d2  make integration test works for async
    omit b1fa2c6  make integration test works for direct
    omit b3fdafb  make IT works for generic samples
    omit f71bec1  code optimization
    omit 3722ee2  format import
    omit 1680a19  Merge pull request #3 from LaurenceLiZhixin/feat/grpc-stream-support
    omit 680f884  fix:import block
    omit 5536f32  consul service discovery sample
    omit 0da9873  update README, remove 'dubbo' sub dir from 'helloworld'
    omit 681e209  use makefile for helloworld client and server
    omit 4f72d63  enhance config and package name
    omit 7983c93  enhance makefile
    omit 39f5571  integration test for helloworld service
    omit 653c445  Merge pull request #5 from zouyx/feature/fixAutoTest
    omit 15a68f6  enable issues
    omit 28bb1f0  Merge pull request #4 from zouyx/feature/fixAutoTest
    omit c8444c5  Create .asf.yaml
    omit 7e1b8b1  feat: add grpc stream sample
    omit eba7616  Merge pull request #2 from zouyx/feature/fixAutoTest
    omit 744819c  Merge pull request #1 from zouyx/feature/fixAutoTest
     add 62367b3  Merge pull request #1 from zouyx/feature/fixAutoTest
     add 327e16c  Merge pull request #2 from zouyx/feature/fixAutoTest
     add ca6e66c  Create .asf.yaml
     add adc5872  Merge pull request #4 from zouyx/feature/fixAutoTest
     add 6250197  enable issues
     add 285dc81  Merge pull request #5 from zouyx/feature/fixAutoTest
     add 198faaf  feat: add grpc stream sample
     add 9b85b42  fix:import block
     add befeee3  Merge pull request #3 from LaurenceLiZhixin/feat/grpc-stream-support
     add 6a59417  format import
     add da89cd8  consul service discovery sample
     add a5d7cb8  code optimization
     add e2a30f0  Merge pull request #7 from zhangshen023/consul_service_discovery
     add d6bb136  fix bug
     add 4b81bff  integration test for helloworld service
     add edf050e  enhance makefile
     add 58fb84b  enhance config and package name
     add 4346c49  use makefile for helloworld client and server
     add ed46acc  update README, remove 'dubbo' sub dir from 'helloworld'
     add 2825696  make IT works for generic samples
     add f61bb7f  make integration test works for direct
     add 6952ae2  make integration test works for async
     add 807a28c  make integration test works for configcenter/apollo
     add 653871b  clean up imports
     add 2f08ee6  make integration test works for nacos
     add 0b7b136  remove useless java dirs
     add d68eaf6  make integration test work for configcenter/zookeeper
     add c453c5e  make integration test works for fiter/custom_filter
     add ed55826  make integration test works for filter/tpslimit
     add b6e8d28  clean up useless code
     add 86f06e2  make integration test works for metrics
     add 4656ad4  travis add Make
     add e5449a1  delete
     add 8a1b407  remove problems code
     add ebb3c60  start integrate test
     add eac5647  change dir
     add 3083eed  change test steps
     add 723530b  fix PID
     add 6e1323f  make integration test work for metric and zone
     add f2ce2dd  rename dir
     add aa17eaa  enhance makefile
     add 6fb39f7  make integration test work for multi-registry
     add 680525b  reformat helloworld
     add 709879b  make integration test work for registry/etcd
     add 4e611c4  make integration test works for registry/nacos
     add dafa9ce  refresh dubbo-go to snapshot, make servicediscovery/etcd works.
     add fe2dbd2  add a FIXME
     add 5c12aaa  correct registry/servicediscovery/etcd
     add 062fd67  make registry/servicediscovery/file work with integration test
     add af44f46  make registry/servicediscovery/nacos work with integration test
     add d9b6eb1  servicediscovery/zookeeper
     add 9ac78ce  enhance makefile to allow replace variables in conf yaml files.
     add 497fd36  enhance makefile
     add 62eaba8  make integration test work for router/condition
     add 242b0ab  make general/dubbo work with integration test
     add 92396ef  make grpc work with integration test
     add c603517  add travis
     add 9d3257a  fix package problem
     add 603bca5  rename package
     add 596bf96  fix problems
     add 477cdb4  add github action
     add 60032e0  add github action
     add 9fe11cc  add github action
     add c06ff0b  Merge branch 'feature/addTravis'
     add e179a3b  Create blank.yml
     add 54b33d6  Update blank.yml
     add 05f5174  Merge remote-tracking branch 'origin/master'
     add b352f67  fix problems
     add 6d7960d  Merge pull request #8 from zouyx/feature/fixAutoTest
     add b7fab58  Add: tag router examples
     add c70347b  Fix: lost a pkg in general
     add 49f7ade  Fix: fmt codes
     add f4c360c  Fix: fmt codes
     add 0fa373a  Merge pull request #9 from apache/tag_router
     add 8bd4d9a  Merge pull request #10 from zouyx/feature/fixAutoTest
     add ade3126  Merge branch 'master-apache-dubbo-go-samples'
     add 3682b10  Merge pull request #12 from zouyx/master
     add 83ce5a6  Merge branch 'master-apache-dubbo-go-samples'
     add 18dd683  add general test
     add 46032d4  add general test
     add 9ee0bfb  fix problems
     add 61eb4c4  fix problems
     add b420a9f  update test case
     add d512a10  update test case
     add 6d3fe90  add more test case
     add 72d11e2  add more test case
     add 4fc6fc5  add more test case
     add c4ae316  add more test case
     add 16d67f1  add more test case
     add a2d0cf7  add more test case
     add c25845d  fix problems
     add 5e263ff  1.delete useless dir 2.add _ "github.com/apache/dubbo-go/metadata/service/inmemory" for all test dir 3.change log level to error
     add 37950d9  1.change log level for async dir 2.revert makefile
     add e65e2fa  delete useless files
     add 30e5459  change stop to clean step
     add e3d9744  Fix Makefile bug
     add 343a747  Test return exit code when panic
     add 036ca8e  add exit code for test
     add ff553f9  add exit code for test
     add 1fa6bf5  fix test problem
     add 12ad93f  change test method
     add e24a813  remove test
     add acc07e3  fix test problem
     add 91a25c0  change log level
     add 9d406ae  Merge pull request #13 from zouyx/master
     add 4bed1c6  add more test case
     add 1c64d17  change log level
     add 48733d8  add configcenter/zookeeper case
     add 897d981  fix test problem
     add ef67824  fix test problem
     add 824afd8  fix test problem
     add 79d0a1d  fix test problem
     add ccb9654  remove configcenter/zookeeper case
     add 36dc561  remove router/tag case and fix zookeeper service discovery case
     add 2a2f12d  remove multi-registry case
     add 89edc98  Merge pull request #15 from zouyx/master
     add d65d87b  fix integration
     add aebeabb  fix integration
     add 6e6b603  Merge pull request #19 from mark4z/master
     add e7993aa  add sentinel-filter sample
     add 5a80174  add integration test
     add f417877  add script on integrate
     add 54c84a1  fix bug
     add ecc57cb  Merge pull request #16 from pantianying/sentinel-filter
     add 4b50b47  test
     add 2a4b05a  add java for general
     add f6f3286  update pkg
     add 4daefd8  update version num
     add d49f133  fix test problem
     add a1acc23  Update dubbo-go version
     add eb28097  Update dubbo-go version
     add 89907b1  add sd/zookeeper case
     add 2e25d47  update pkg
     add d02874c  update version num
     add 01f19a5  fix test problem
     add abcb43d  Update dubbo-go version
     add e4533a2  Update dubbo-go version
     add 30886bf  add sd/zookeeper case
     add 475054a  Merge remote-tracking branch 'apache-dubbo-go-samples/1.5.5' into 1.5.5
     add 6462b49  fix sd/zookeeper case
     add 8eaedb5  fix router case
     add 2bf0361  fix: go mod tidy error
     add 6ff698e  seata sample run
     add 5e8cc73  remove seata mod
     add ab051f5  change client name equals provider
     add d18040a  add integrate
     add 7c23577  add provid_by
     add d76e545  Merge pull request #20 from cityiron/seata-sample
     add e956b7d  fix: change grpc and sentinel version
     add c76bb8d  fix: delete unused gosum
     add 8268f52  fix: dubbo-go repository path
     add 201992b  fix: re cicd
     add 8c9c239  fix: use protobuf 1.3.2 to generate proper pb.go
     add 5dbaa66  fix: change pb.go
     add cc40470  Merge pull request #21 from LaurenceLiZhixin/1.5.5
     add bc81e94  modify consul demo to support makefile (#22)
     add 7464a65  merge
     add a19f63d  remove sd/consul
     add 279e46b  Merge branch '1.5.5' into fix-sd-file
     add 4884e9c  Merge pull request #23 from cityiron/fix-sd-file
     add 845616f  feat: add registry/servicediscovery/etcd client.yaml add provide_by
     add 2a1c857  Merge branch '1.5.5' into 1.5.5-georgehao
     add b436635  Merge pull request #25 from georgehao/1.5.5
     add 98a15f7  fix router problem
     add 099b960  resolve conflict
     add 1107469  Merge pull request #27 from apache/fix_mod
     add 5ce1f6c  resolve conflicts
     add 3d13bd4  update version
     add 033d650  update version
     add 7f38c96  update version for release
     add 7074301  resolve conflicts
     add 28719de  refact generic/java
     add 50760ee  Merge pull request #24 from fangyincheng/fix-2.7
     add ac30af9  Merge pull request #17 from apache/1.5.5
     add 086e2da  upgrade sentinel go to 1.0.1
     add aadb7e4  Merge pull request #31 from louyuting/20201227-update-sentinel-go
     add dd6c19a  fix: fix dubbo grpc stream bug
     add 2b35ff3  Merge pull request #32 from LaurenceLiZhixin/fix/grpcStreamBug
     add ec4fd0b  merge master
     add b6b347a  merge master
     add 2702e17  Merge branch '1.5.5'
     add 1035c4c  add CI badge
     add f7e0f1a  bump up sentinel-go version to v1.0.2
     add 1f1383d  adjust sentinel version
     add 9b0e1d4  comment sentinel tempararily
     add 3ad64bc  add attachment sample
     add cb715b0  add zh_CN README
     add c25fdc1  Merge pull request #37 from beiwei30/attachment
     add 1c10231  add:.run file
     add ff81b51  Merge pull request #38 from zhaoyunxing92/master
     add 68fbd91  enhance docs
     add ca1fc7d  Merge pull request #39 from beiwei30/docs
     add a2b55f3  provide HOWTO, and translate all docs into Chinese.
     add 0d6018d  Merge pull request #40 from beiwei30/translate
     add 0b02894  provide run configuration for attachment sample
     add ee77fea  Merge pull request #41 from beiwei30/attachment-run-config
     add 1830d30  update dubbogo to 1.5 latest commit
     add 8f4f72b  Merge pull request #47 from cityiron/1.5.6-test
     add 999598f  ftr: context sample
     add 40ce18a  fix: add zh readme
     add 479842f  Merge pull request #46 from LaurenceLiZhixin/ftr/context
     add f4a3715  fix: consul readme
     add 3dd5ad5  fix: add consul readme
     add 3f83dde  Merge pull request #45 from LaurenceLiZhixin/fix/consul-readme
     add fb1b45a  ftr:config api
     add ec253ca  fix: add zh readme
     add 55939ee  Merge pull request #44 from LaurenceLiZhixin/ftr/config-api
     add 761bd1e  ftr: add docker
     add 9328bc0  fix: add cn readme
     add 2e150f5  Merge pull request #43 from LaurenceLiZhixin/ftr/docker
     add 8e3c649  upgrade seata-golang version
     add 0aa1018  Merge pull request #48 from dk-lockdown/master
     add 2f36b6c  Update README_zh.md
     add 3cf6831  Merge pull request #49 from lauyang/patch-2
     add b9df170  fix: add provide_by
     add 9b21628  Merge pull request #51 from LaurenceLiZhixin/fix/etcd
     add f962482  add "chain" example
     add ae6f22a  add apache license header
     add 27238a8  optimize imports
     add a4c5ac2  group var declaration
     add 19c6ece  Merge pull request #54 from beiwei30/chain
     add 8ef9122  add:metric文档
     add dac4b01  Merge pull request #53 from zhaoyunxing92/master
     add db3d56f  feat: add run configs, and regroup import
     add 362078c  optmize imports
     add 7bfb13c  Merge pull request #58 from beiwei30/context
     add c0c8b1c  add run configurations and fix client issue.
     add e8a63fc  add README
     add 2244de1  add:metric文档
     add d6b7714  fix: regroup import
     add c5ced7e  optimize imports
     add 2cccc5f  Merge pull request #55 from beiwei30/async
     add 4af0861  Merge pull request #2 from apache/master
     add e095b64  Merge pull request #3 from apache/master
     add 3686193  Merge pull request #4 from apache/master
     add 9415d1d  Doc: adding direct README
     add 360cb8c  Doc: adding direct README_zh and cleaning
     add a01f1fb  Doc: improving docs of README
     add 1bfa500  Doc: formatting docs of README
     add 0503b4d  Doc: formatting docs of README and cleaning
     add 423bc4e  Doc: formatting docs of README_zh
     add fe1f172  Mod: clear out the unneeded config
     add 394d750  Doc: improving README and README_zh
     add d733e75  Add: .run for direct
     add 4a404ce  Add: fix the .run for direct
     add b8b8ad1  Merge pull request #59 from PhilYue/feature/direct/readme
     add 3468f70  add:metric readme
     add a2bd763  修复语法错误
     add 4a8de47  up:调整import顺序
     add 8addde5  Merge pull request #61 from zhaoyunxing92/master
     add 7cd9182  fix: add run configs, bump up dubbo-go version, revise README
     add faaf7b8  fix: regroup imports
     add 7402ac2  Merge pull request #57 from beiwei30/config-api
     add f3de1c8  fix: regroup imports
     add 14a8acb  Merge pull request #63 from beiwei30/direct
     add 93f99d5  fix: regroup import
     add 7299549  fix: add run configs for docker
     add 50f0fb9  Merge pull request #64 from beiwei30/docker
     add 3685f2d  fix: group import, add run files
     add 215f989  fix: README for filter samples
     add 2319ef1  fix: make integration test work for custom filter, correct dir
     add 0c42094  enable IT for configcenter/zookeeper and filter/sentinel
     add d1503cb  Merge pull request #66 from beiwei30/filter
     add a851232  configcenter readme, import and run files
     add 7a7c27b  fix: revise README
     add 137145d  fix: regroup imports
     add 8e0f74a  fix: regroup import for nacos configcenter
     add e281731  Merge pull request #62 from beiwei30/configcenter
     add f5d3e75  add readme for generic and helloworld
     add 1fdf6ef  add readme for group
     add be3e097  add readme and run configuration for rest sample
     add 78fc2b7  add run configuration for samples
     add d426a71  add readme_zh for samples
     add 84d1727  group the imports
     add 6f91bf3  adjust imports and readme
     add 3723770  fix helloworld java sample
     add da9260c  fix error imports
     add f17c5dc  fix helloworld sample
     add 6f73a0d  Merge pull request #52 from yakecanlee/feature/add-sample
     add 4e8bc84  adjust import sequence in nacos
     add 9ea75d6  fix: issue#71
     add 9665c73  Merge pull request #72 from beiwei30/hello-world
     add 6821dca  Upgrade the Seata version to adapt the Getty WritePkg method to increase the return value
     add eec3ea3  Upgrade the Seata version to adapt the Getty WritePkg method to increase the return value
     add a61d1cc  Merge pull request #73 from xiaoliu10/upgrade_seata_version
     add 2ce35f2  add:multi registry
     add adf3d22  up:更新导报问题
     add f0e3617  up:语法问题
     add ed5605e  Merge pull request #75 from zhaoyunxing92/multi-registry
     add 68855a6  修改:修复registry/nacos示例无法正常使用的问题,调整client.yml和server.yml方便阅读
     add 5dca1e3  Merge pull request #70 from milerL/nacos
     add 84568ca  add:generic samples
     add 06dd051  up:mv it to the 3rd import block
     add f86ffa7  up:mv it to the 3rd import block
     add ef0d643  Merge pull request #77 from zhaoyunxing92/generic
     add 698f8e4  1. fix zk configcenter can not found zk node
     add 03877ff  Merge pull request #78 from xiaoliu10/fix_zk_configcenter
     add 5b923d2  add tls sample
     add f9d1b04  add apache license & mod folder
     add 5da14b9  mod problems in pr
     add bb434be  mod refmt go-client/pkg/user
     add 5df9ea3  del blank line go-server/pkg/user.go
     add 4da3ca4  mod Id to ID
     add c082df6  Merge pull request #68 from cjphaha/tls
     add ad99803  add:game samples
     add 02974be  Merge pull request #79 from zfkun/game
     add 0b1c591  Id -> ID
     add c5a9d63  Merge pull request #80 from apache/fix/Id
     add 23b2155  fix directory problem.
     add 64351de  Merge pull request #84 from horizonzy/fix-directory-problem
     add f279379  Ftr/dubbo3 (#81)
     add 170edd5  fix: add service-disc zk client .run
     add e97e094  3.0test (#102)
     add efb9045  improve etcd version
     add 35d0f18  Merge pull request #106 from ztelur/3.0
     add c61e538  add etcd integrate test (#107)
     add 40ab04c  fix: updata go get dubbo-gen script (#105)
     add 1f92ae7  Ftr: Tengine Calls Dubbo-go Example (#122)
     add ebf0817  bump dubbo-go version (#131)
     add 1452f49  Dep: Rename import name for remotingMetadataService (#132)
     add f515e3e  fix:  3.0 triple/grpc provider generated reference function by proto-gen-dubbo (#128)
     add d5e6218  update dubbo-go version (#137)
     add 588cdc8  application service discovery nacos reporter example (#123)
     add a925f32  Ftr/3.0msgpack and triple codec extension samples (#138)
     add e5beffd  mod jsonrpc catalogue (#126)
     add bd2132d  Tst: add router to integration and fix hessian2 sample (#124)
     add b088e10  add triple integration test (#139)
     add dac2903  Fix: change 3.0 streaming test and samples to reactive (#140)
     add b870cfa  fix: update dubbogo version and integrate test
     add ad58d88  fix: add 3.0 test (#141)
     add 916f974  add seata run
     add f0b3703  fmt file
     add 27c70a8  Merge pull request #142 from zhaoyunxing92/seata
     add 9f01cb0  fix: fix multi registry integrate test (#144)
     add ee33d1b  fix(tracing): add StartSpanFromContext to jaeger test case & fix some error (#145)
     add bf73754  Fix: seata panic , attachment to AttachmentKey (#148)
     add 94c3746  add .run xml for goland to quick start (#129)
     add 4b1f506  add filter to test/client.yml (#146)
     add 3a733d9  fix: fix side effect (#147)
     add 634f2b5  add service discovery .run (#151)
     add 9f306a6  hessian.RegisterPOJO(&pkg.User{}) 重复调用 (#154)
     add 9ac5eab  Rft: Metadata service (#157)
     add 1bfff60  fix: java demo
     add dc5da43  fix: delete unused
     add f2e5a01  add tracing integration test (#156)
     add 8fe475a  Revert "add tracing integration test (#156)" (#162)
     add 419049c  fix: fix dynamic naming mapping of app level service disc (#155)
     add 5814b41  Ftr: Add integration test multi-server support (#161)
     add d35264f  Tracing integration new (#163)
     add cec63d8  Feature/etcd service discovery (#164)
     add 590ef3f  Fix: multi-zone imports (#172)
     add da7b647  fix (#175)
     add 0724a04  Mod: modify import blocks for branch 3.0 (#167)
     add 683296a  docker Waiter for all samples (#176)
     add 636f2eb  fix: add chan zk waiter
     add 760971d  fix: fix chan middle waiter
     add 0277b53  fix: add waiter after middle start
     add 7b13801  fix: add chain middle wait time
     add 50ad9b4  Fix: delete useless & wrong xml files in .run folder (#173)
     add 021eafa  update howto doc (#177)
     add be8569e  Ftr: 3.0 lumberjack log sample (#179)
     add b91bbe9  change the wrong comment
     add fe16ed9  Fix: fix 3.0 branch game integrate error & delete useless file (#185)
     add fe904f4  add multi-zone run/debug configuration (#181)
     add 8b2c6d0  Ftr: Generic invocation supports generalizer.Generalizer (#170)
     new 07bf5ee  fix: init new config
     new 62f6d2b  add:zk registry
     new 32789a2  Merge pull request #190 from zhaoyunxing92/config-enhance
     new af38e82  Config enhance v3 (#203)
     new ac4adfd  Add some samples  (#204)
     new 1320da5  update triple user api to standard, add hessian2 samples  (#211)
     new 55184c3  add triple msgpack sample (#212)
     new 7b0d9e7  update nacos samples config (#205)
     new a2409c2  Add apollo config center sample (#208)
     new d767fbd  Ftr: support new integrate_test in new dubbo samples (#215)
     new bfe3909  Ftr/direct samples (#216)
     new 008e2b2  Feat/nacos registry (#217)
     new 9cf4722  Config enhance rpc dubbo (#213)
     new 7dfa08b  fix: triple attachment ci (#221)

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (18ecfaf)
            \
             N -- N -- N   refs/heads/config-enhance (7dfa08b)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 14 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:

[dubbo-go-samples] 10/14: Ftr: support new integrate_test in new dubbo samples (#215)

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git

commit d767fbdf1fbe7dea54b5088e96609b57975dd24e
Author: Jason Peng <lv...@gmail.com>
AuthorDate: Wed Sep 1 09:20:06 2021 +0800

    Ftr: support new integrate_test in new dubbo samples (#215)
    
    * Ftr: support new integrate_test in new dubbo samples
    
    * delete useless comment
---
 build/Makefile                                     |  48 ++-----
 integrate_test.sh                                  |  20 +--
 .../helloworld/docker/docker-health-check.sh       |  10 ++
 .../tests/integration/userprovider_test.go         |   2 +-
 start_integrate_test.sh                            | 147 +++++++++++----------
 5 files changed, 110 insertions(+), 117 deletions(-)

diff --git a/build/Makefile b/build/Makefile
index 124ab7c..6bebcc0 100644
--- a/build/Makefile
+++ b/build/Makefile
@@ -16,10 +16,9 @@
 PROJECT_NAME = $(shell basename "$(PWD)")
 PID = /tmp/.$(PROJECT_NAME).pid
 PROJECT_DIR=$(shell pwd)
-BASE_DIR := $(PROJECT_DIR)/dist
+BASE_DIR := $(PROJECT_DIR)/go-server/dist
 
-
-SOURCES = $(wildcard $(PROJECT_DIR)/cmd/*.go)
+SOURCES = $(wildcard $(PROJECT_DIR)/go-server/cmd/*.go)
 
 export GO111MODULE ?= on
 export GOPROXY ?= https://goproxy.io,direct
@@ -69,43 +68,30 @@ help: $(realpath $(firstword $(MAKEFILE_LIST)))
 
 ## build: Build application's binaries
 .PHONY: build
-build: $(OUT_DIR)/$(PROJECT_NAME)$(EXT_NAME) config
+build: $(OUT_DIR)/$(PROJECT_NAME)$(EXT_NAME)
 
 .PHONY: $(OUT_DIR)/$(PROJECT_NAME)$(EXT_NAME)
 $(OUT_DIR)/$(PROJECT_NAME)$(EXT_NAME):
 	$(info   >  Buiding application binary: $(OUT_DIR)/$(PROJECT_NAME)$(EXT_NAME))
 	@CGO_ENABLED=$(CGO) GOOS=$(GOOS) GOARCH=$(GOARCH) go build $(GCFLAGS) -ldflags=$(LDFLAGS) -i -o $(OUT_DIR)/$(PROJECT_NAME)$(EXT_NAME) $(SOURCES)
 
-
-## config: Setup config files
-.PHONY: config
-config:
-	$(info   >  Setting up config files)
-	@mkdir -p $(OUT_DIR)/conf
-	@-test -f $(PROJECT_DIR)/conf/log.yml && cat $(PROJECT_DIR)/conf/log.yml | sed "s#\$$HOST_IP#$(DOCKER_HOST_IP)#g" > $(OUT_DIR)/conf/log.yml && echo "  > $(OUT_DIR)/conf/log.yml"
-	@-test -f $(PROJECT_DIR)/conf/server.yml && cat $(PROJECT_DIR)/conf/server.yml | sed "s#\$$HOST_IP#$(DOCKER_HOST_IP)#g" > $(OUT_DIR)/conf/server.yml && echo "  > $(OUT_DIR)/conf/server.yml"
-	@-test -f $(PROJECT_DIR)/conf/client.yml && cat $(PROJECT_DIR)/conf/client.yml | sed "s#\$$HOST_IP#$(DOCKER_HOST_IP)#g" > $(OUT_DIR)/conf/client.yml && echo "  > $(OUT_DIR)/conf/client.yml"
-	@-test -f $(PROJECT_DIR)/conf/router_config.yml && cat $(PROJECT_DIR)/conf/router_config.yml | sed "s#\$$HOST_IP#$(DOCKER_HOST_IP)#g" > $(OUT_DIR)/conf/router_config.yml && echo "  > $(OUT_DIR)/conf/router_config.yml"
-	@-test -f $(PROJECT_DIR)/conf/virtual_service.yml && cat $(PROJECT_DIR)/conf/virtual_service.yml | sed "s#\$$HOST_IP#$(DOCKER_HOST_IP)#g" > $(OUT_DIR)/conf/virtual_service.yml && echo "  > $(OUT_DIR)/conf/virtual_service.yml"
-	@-test -f $(PROJECT_DIR)/conf/dest_rule.yml && cat $(PROJECT_DIR)/conf/dest_rule.yml | sed "s#\$$HOST_IP#$(DOCKER_HOST_IP)#g" > $(OUT_DIR)/conf/dest_rule.yml && echo "  > $(OUT_DIR)/conf/dest_rule.yml"
-
 ## docker-health-check: check services health on docker
 .PHONY: docker-health-check
 docker-health-check:
-	$(info   >  run docker health check with $(PROJECT_DIR)/docker/docker-health-check.sh)
-	@-test -f $(PROJECT_DIR)/docker/docker-health-check.sh && bash -f $(PROJECT_DIR)/docker/docker-health-check.sh
+	$(info   >  run docker health check with $(INTEGRATE_DIR)/docker/docker-health-check.sh)
+	@-test -f $(INTEGRATE_DIR)/docker/docker-health-check.sh && bash -f $(INTEGRATE_DIR)/docker/docker-health-check.sh
 
 ## docker-up: Shutdown dependency services on docker
 .PHONY: docker-up
 docker-up:
-	$(info   >  Starting dependency services with $(PROJECT_DIR)/docker/docker-compose.yml)
-	@docker-compose -f $(PROJECT_DIR)/docker/docker-compose.yml up -d
+	$(info   >  Starting dependency services with $(INTEGRATE_DIR)/docker/docker-compose.yml)
+	@docker-compose -f $(INTEGRATE_DIR)/docker/docker-compose.yml up -d
 
 ## docker-down: Shutdown dependency services on docker
 .PHONY: docker-down
 docker-down:
-	$(info   >  Stopping dependency services with $(PROJECT_DIR)/docker/docker-compose.yml)
-	@docker-compose -f $(PROJECT_DIR)/docker/docker-compose.yml down
+	$(info   >  Stopping dependency services with $(INTEGRATE_DIR)/docker/docker-compose.yml)
+	@docker-compose -f $(INTEGRATE_DIR)/docker/docker-compose.yml down
 
 ## clean: Clean up the output and the binary of the application
 .PHONY: clean
@@ -116,9 +102,10 @@ clean: stop
 
 ## start: Start the application (for server)
 .PHONY: start
-start: export CONF_PROVIDER_FILE_PATH ?= $(OUT_DIR)/conf/server.yml
+start: export DUBBO_GO_CONFIG_PATH ?= $(PROJECT_DIR)/go-server/conf/dubbogo.yml
 start: build
 	$(info   >  Starting application $(PROJECT_NAME), output is redirected to $(LOG_FILE))
+	@ls $(OUT_DIR)/$(PROJECT_NAME)$(EXT_NAME)
 	@-$(OUT_DIR)/$(PROJECT_NAME)$(EXT_NAME) > $(LOG_FILE) 2>&1 & echo $$! > $(PID)
 	@cat $(PID) | sed "/^/s/^/  \>  PID: /"
 
@@ -130,10 +117,6 @@ print-server-log:
 
 ## run: Run the application (for client)
 .PHONY: run
-run: export CONF_CONSUMER_FILE_PATH ?= $(OUT_DIR)/conf/client.yml
-run: export CONF_ROUTER_FILE_PATH ?= $(OUT_DIR)/conf/router_config.yml
-run: export CONF_DEST_RULE_FILE_PATH ?= $(OUT_DIR)/conf/dest_rule.yml
-run: export CONF_VIRTUAL_SERVICE_FILE_PATH ?= $(OUT_DIR)/conf/virtual_service.yml
 run: build
 	$(info   >  Running application $(PROJECT_NAME), output is redirected to $(LOG_FILE))
 	@-$(OUT_DIR)/$(PROJECT_NAME)$(EXT_NAME) 2>&1 | tee $(LOG_FILE)
@@ -147,11 +130,8 @@ stop:
 
 ## integration: Run integration test for this application
 .PHONY: integration
-integration: export CONF_CONSUMER_FILE_PATH ?= $(OUT_DIR)/conf/client.yml
-integration: export CONF_ROUTER_FILE_PATH ?= $(OUT_DIR)/conf/router_config.yml
-integration: export CONF_DEST_RULE_FILE_PATH ?= $(OUT_DIR)/conf/dest_rule.yml
-integration: export CONF_VIRTUAL_SERVICE_FILE_PATH ?= $(OUT_DIR)/conf/virtual_service.yml
+integration: export DUBBO_GO_CONFIG_PATH ?= $(PROJECT_DIR)/go-client/conf/dubbogo.yml
 integration:
-	$(info   >  Running integration test for application $(PROJECT_NAME))
+	$(info   >  Running integration test for application $(INTEGRATE_DIR))
 	@go clean -testcache
-	@go test -tags integration -v $(PROJECT_DIR)/tests/...
\ No newline at end of file
+	@go test -tags integration -v $(INTEGRATE_DIR)/tests/integration/...
\ No newline at end of file
diff --git a/integrate_test.sh b/integrate_test.sh
index 78eb52e..8894871 100755
--- a/integrate_test.sh
+++ b/integrate_test.sh
@@ -15,37 +15,39 @@
 #  limitations under the License.
 
 if [ -z "$1" ]; then
-  echo "Provide test directory please, like : ./integrate_test.sh $(pwd)/helloworld/go-server ."
+  echo "Provide test directory please, like : ./integrate_test.sh helloworld"
   exit
 fi
 
 P_DIR=$(pwd)/$1
-
 if [ -f "$P_DIR"/build/test.sh ]; then
     "$P_DIR"/build/test.sh "$P_DIR"
     result=$?
     exit $((result))
 fi
 
-make PROJECT_DIR="$P_DIR" PROJECT_NAME="$(basename "$P_DIR")" BASE_DIR="$P_DIR"/dist -f build/Makefile docker-up
+INTEGRATE_DIR=$(pwd)/integrate_test/$1
+
+make PROJECT_DIR="$P_DIR" PROJECT_NAME="$(basename "$P_DIR")" INTEGRATE_DIR="$INTEGRATE_DIR" -f build/Makefile docker-up
 
 # check docker health
-make PROJECT_DIR="$P_DIR" PROJECT_NAME="$(basename "$P_DIR")" BASE_DIR="$P_DIR"/dist -f build/Makefile docker-health-check
+make PROJECT_DIR="$P_DIR" PROJECT_NAME="$(basename "$P_DIR")" INTEGRATE_DIR="$INTEGRATE_DIR" -f build/Makefile docker-health-check
 
 # start server
-make PROJECT_DIR="$P_DIR" PROJECT_NAME="$(basename "$P_DIR")" BASE_DIR="$P_DIR"/dist -f build/Makefile start
+make PROJECT_DIR="$P_DIR" PROJECT_NAME="$(basename "$P_DIR")" INTEGRATE_DIR="$INTEGRATE_DIR" -f build/Makefile start
+
 # start integration
-make PROJECT_DIR="$P_DIR" PROJECT_NAME="$(basename "$P_DIR")" BASE_DIR="$P_DIR"/dist -f build/Makefile integration
+make PROJECT_DIR="$P_DIR" PROJECT_NAME="$(basename "$P_DIR")" INTEGRATE_DIR="$INTEGRATE_DIR" -f build/Makefile integration
 result=$?
 
 # if fail print server log
 if [ $result != 0 ];then
-  make PROJECT_DIR="$P_DIR" PROJECT_NAME="$(basename "$P_DIR")" BASE_DIR="$P_DIR"/dist -f build/Makefile print-server-log
+  make PROJECT_DIR="$P_DIR" PROJECT_NAME="$(basename "$P_DIR")" INTEGRATE_DIR="$INTEGRATE_DIR" -f build/Makefile print-server-log
 fi
 
 # stop server
-make PROJECT_DIR="$P_DIR" PROJECT_NAME="$(basename "$P_DIR")" BASE_DIR="$P_DIR"/dist -f build/Makefile clean
+make PROJECT_DIR="$P_DIR" PROJECT_NAME="$(basename "$P_DIR")" INTEGRATE_DIR="$INTEGRATE_DIR" -f build/Makefile clean
 
-make PROJECT_DIR="$P_DIR" PROJECT_NAME="$(basename "$P_DIR")" BASE_DIR="$P_DIR"/dist -f build/Makefile docker-down
+make PROJECT_DIR="$P_DIR" PROJECT_NAME="$(basename "$P_DIR")" INTEGRATE_DIR="$INTEGRATE_DIR" -f build/Makefile docker-down
 
 exit $((result))
\ No newline at end of file
diff --git a/integrate_test/helloworld/docker/docker-health-check.sh b/integrate_test/helloworld/docker/docker-health-check.sh
new file mode 100644
index 0000000..2cc32c2
--- /dev/null
+++ b/integrate_test/helloworld/docker/docker-health-check.sh
@@ -0,0 +1,10 @@
+curl 127.0.0.1:2181
+res=$?
+passCode=52
+while [ "$res" != "$passCode" ];do
+  sleep 5
+  curl 127.0.0.1:2181
+  res=$?
+done
+
+sleep 5
diff --git a/integrate_test/helloworld/tests/integration/userprovider_test.go b/integrate_test/helloworld/tests/integration/userprovider_test.go
index 992c55d..1daa809 100644
--- a/integrate_test/helloworld/tests/integration/userprovider_test.go
+++ b/integrate_test/helloworld/tests/integration/userprovider_test.go
@@ -42,7 +42,7 @@ func TestSayHello(t *testing.T) {
 	ctx := context.Background()
 	ctx = context.WithValue(ctx, "tri-req-id", "test_value_XXXXXXXX")
 
-	err := greeterProvider.SayHello(ctx, req, reply)
+	reply, err := greeterProvider.SayHello(ctx, req)
 
 	assert.Nil(t, err)
 	assert.Equal(t, "Hello laurence", reply.Name)
diff --git a/start_integrate_test.sh b/start_integrate_test.sh
index c672b48..b539384 100755
--- a/start_integrate_test.sh
+++ b/start_integrate_test.sh
@@ -15,79 +15,80 @@
 #  limitations under the License.
 
 # tracing integrate test
-array=("tracing/dubbo/go-server")
-
-# async
-array+=("async/go-server")
-array+=("attachment/go-server")
-array+=("config-api/go-server")
-array+=("chain")
-# config center
-array+=("configcenter/apollo/go-server")
-array+=("configcenter/nacos/go-server")
-array+=("configcenter/zookeeper/go-server")
-
-# context
-array+=("context/go-server")
-
-# direct
-array+=("direct/go-server")
-
-# filter
-array+=("filter/custom/go-server")
-array+=("filter/tpslimit/go-server")
-array+=("filter/sentinel/go-server")
-
-# game
-array+=("game/go-server-game")
-array+=("game/go-server-gate")
-
-# general-dubbo
-array+=("general/dubbo/go-server")
-
-# general-dubbo3(triple)
-array+=("general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server")
-array+=("general/dubbo3/pb/dubbogo-java/go-server")
-array+=("general/dubbo3/hessian2/go-server")
-array+=("general/dubbo3/msgpack/go-server")
-array+=("general/dubbo3/codec-extension/go-server")
-
-# general-grpc
-array+=("general/grpc/go-server")
-
-# generic invocation
-array+=("generic/default/go-server")
-#array+=("generic/protobufjson/go-server")
-
-# group
-array+=("group/go-server-group-a")
-array+=("group/go-server-group-b")
-
-# hello world
-array+=("helloworld/go-server")
-
-# metric
-array+=("metric/go-server")
-
-# multi-registry
-array+=("multi-registry/go-server")
-
-# multi-zone
-array+=("multi-zone")
-
-# registry
-array+=("registry/zookeeper/go-server")
-array+=("registry/etcd/go-server")
-array+=("registry/nacos/go-server")
-
-# registry/servicediscovery (app level serivce discovery)
-array+=("registry/servicediscovery/zookeeper/go-server")
-array+=("registry/servicediscovery/nacos/go-server")
-
-# router integrate test can only confirm the program build success,
-# the test of router logic would be fixed later
-array+=("router/uniform-router/file/go-server")
-array+=("router/uniform-router/file/go-server2")
+#array=("tracing/dubbo/go-server")
+#
+## async
+#array+=("async/go-server")
+#array+=("attachment/go-server")
+#array+=("config-api/go-server")
+#array+=("chain")
+## config center
+#array+=("configcenter/apollo/go-server")
+#array+=("configcenter/nacos/go-server")
+#array+=("configcenter/zookeeper/go-server")
+#
+## context
+#array+=("context/go-server")
+#
+## direct
+#array+=("direct/go-server")
+#
+## filter
+#array+=("filter/custom/go-server")
+#array+=("filter/tpslimit/go-server")
+#array+=("filter/sentinel/go-server")
+#
+## game
+#array+=("game/go-server-game")
+#array+=("game/go-server-gate")
+#
+## general-dubbo
+#array+=("general/dubbo/go-server")
+#
+## general-dubbo3(triple)
+#array+=("general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server")
+#array+=("general/dubbo3/pb/dubbogo-java/go-server")
+#array+=("general/dubbo3/hessian2/go-server")
+#array+=("general/dubbo3/msgpack/go-server")
+#array+=("general/dubbo3/codec-extension/go-server")
+#
+## general-grpc
+#array+=("general/grpc/go-server")
+#
+## generic invocation
+#array+=("generic/default/go-server")
+##array+=("generic/protobufjson/go-server")
+#
+## group
+#array+=("group/go-server-group-a")
+#array+=("group/go-server-group-b")
+#
+## hello world
+#array+=("helloworld/go-server")
+#
+## metric
+#array+=("metric/go-server")
+#
+## multi-registry
+#array+=("multi-registry/go-server")
+#
+## multi-zone
+#array+=("multi-zone")
+#
+## registry
+#array+=("registry/zookeeper/go-server")
+#array+=("registry/etcd/go-server")
+#array+=("registry/nacos/go-server")
+#
+## registry/servicediscovery (app level serivce discovery)
+#array+=("registry/servicediscovery/zookeeper/go-server")
+#array+=("registry/servicediscovery/nacos/go-server")
+#
+## router integrate test can only confirm the program build success,
+## the test of router logic would be fixed later
+#array+=("router/uniform-router/file/go-server")
+#array+=("router/uniform-router/file/go-server2")
+array+=("helloworld")
 
 for((i=0;i<${#array[*]};i++))
 do

[dubbo-go-samples] 05/14: Add some samples (#204)

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git

commit ac4adfd64aa66048a9ec6e0265d68cb2c368e331
Author: Laurence <45...@users.noreply.github.com>
AuthorDate: Sun Aug 22 16:52:49 2021 +0800

    Add some samples  (#204)
    
    * fix
    
    * fix: init helloworld and registry zk
    
    * fix: change general to rpc
    
    * fix: add some samples
---
 .run/api-triple-client.run.xml                     |  11 +++
 .run/api-triple-server.run.xml                     |  11 +++
 .run/config-api-client.run.xml                     |  12 +--
 .run/config-api-server.run.xml                     |  12 +--
 .../configcenter/configcenter-nacos-client.run.xml |   9 +-
 .../configcenter/configcenter-nacos-server.run.xml |   7 +-
 .run/context-client.run.xml                        |   6 +-
 .run/context-server.run.xml                        |   6 +-
 .run/context-triple-client.run.xml                 |  14 +++
 .run/context-triple-server.run.xml                 |  14 +++
 config-api/README.md                               |  73 +++------------
 config-api/README_zh.md                            |  68 --------------
 config-api/configcenter/go-client/cmd/client.go    |  66 ++++++++++++++
 config-api/configcenter/go-server/cmd/server.go    |  60 ++++++++++++
 config-api/go-client/cmd/client.go                 |  85 -----------------
 config-api/go-client/conf/client.yml               |  59 ------------
 config-api/go-server/cmd/server.go                 | 101 ---------------------
 config-api/go-server/conf/client.yml               |  59 ------------
 config-api/go-server/conf/server.yml               |  55 -----------
 config-api/rpc/README.md                           |  69 ++++++++++++++
 config-api/rpc/triple/go-client/cmd/client.go      |  73 +++++++++++++++
 config-api/rpc/triple/go-server/cmd/server.go      |  73 +++++++++++++++
 config-api/subModule/configcenter/main.go          |   9 ++
 config-api/subModule/registry/README.md            |  35 +++++++
 config-api/subModule/registry/main.go              |  37 ++++++++
 config-api/subModule/service/main.go               |   9 ++
 configcenter/README.md                             |  96 --------------------
 configcenter/README_zh.md                          | 100 --------------------
 configcenter/nacos/go-client/cmd/client.go         |  41 +++------
 configcenter/nacos/go-client/conf/client.yml       |  64 -------------
 configcenter/nacos/go-client/conf/dubbogo.yml      |  20 ++++
 configcenter/nacos/go-client/conf/log.yml          |  28 ------
 configcenter/nacos/go-client/pkg/user.go           |  42 ---------
 configcenter/nacos/go-server/cmd/server.go         |  59 +++---------
 configcenter/nacos/go-server/conf/dubbogo.yml      |  24 +++++
 context/{ => dubbo}/go-client/cmd/client.go        |  15 ++-
 context/{ => dubbo}/go-client/conf/client.yml      |   0
 context/{ => dubbo}/go-client/conf/log.yml         |   0
 context/{ => dubbo}/go-client/pkg/user.go          |   0
 context/{ => dubbo}/go-server/cmd/server.go        |   7 +-
 context/{ => dubbo}/go-server/conf/client.yml      |   0
 context/{ => dubbo}/go-server/conf/log.yml         |   0
 context/{ => dubbo}/go-server/conf/server.yml      |   0
 .../go-server/docker/docker-compose.yml            |   0
 .../go-server/docker/docker-health-check.sh        |   0
 context/{ => dubbo}/go-server/pkg/user.go          |   0
 .../go-server/tests/integration/main_test.go       |   0
 .../tests/integration/userprovider_test.go         |   0
 .../triple/go-client/cmd/client.go                 |  57 ++++++------
 context/triple/go-client/conf/dubbogo.yml          |  13 +++
 .../triple/go-server/cmd/server.go                 |  47 ++++------
 context/triple/go-server/conf/dubbogo.yml          |  17 ++++
 go.mod                                             |   4 +-
 go.sum                                             |  97 +-------------------
 .../configcenter}/docker/docker-compose.yml        |   0
 .../configcenter}/tests/integration/main_test.go   |  29 +-----
 .../tests/integration/userprovider_test.go         |  26 ++++--
 .../rpc/triple}/docker/docker-compose.yml          |   0
 .../rpc/triple}/tests/integration/main_test.go     |  29 +-----
 .../triple/tests/integration/userprovider_test.go  |  41 +++++----
 .../configcenter/nacos}/conf/client.yml            |   0
 .../configcenter/nacos}/conf/log.yml               |   0
 .../configcenter/nacos}/conf/server.yml            |   0
 .../configcenter/nacos}/docker/docker-compose.yml  |   0
 .../nacos}/docker/docker-health-check.sh           |   0
 .../nacos}/tests/integration/main_test.go          |   0
 .../nacos}/tests/integration/userprovider_test.go  |   0
 .../context/dubbo}/conf/client.yml                 |   0
 .../context/dubbo}/conf/log.yml                    |   0
 .../context/dubbo}/conf/server.yml                 |   0
 .../context/dubbo}/pkg/user.go                     |   0
 .../context/dubbo}/tests/integration/main_test.go  |   0
 .../dubbo}/tests/integration/userprovider_test.go  |   0
 .../helloworld/docker/docker-compose.yml~merged    |   0
 .../zookeeper/docker/docker-compose.yml~merged     |   0
 .../zookeeper/docker/docker-health-check.sh~merged |   0
 .../go-server/docker/docker-compose.yml~merged     |   0
 .../go-server/docker/docker-health-check.sh~merged |   0
 .../go-server/docker/docker-compose.yml~merged     |   0
 .../go-server/docker/docker-compose.yml~merged     |   0
 .../go-server/docker/docker-compose.yml~merged     |   0
 .../docker/docker-compose.yml~merged               |   0
 .../go-server/docker/docker-compose.yml~merged     |   0
 .../grpc/go-client/conf/log.yml~merged             |   0
 .../grpc/go-server/conf/log.yml~merged             |   0
 .../go-client/docker/docker-compose.yml~merged     |   0
 .../go-server/docker/docker-compose.yml~merged     |   0
 87 files changed, 728 insertions(+), 1161 deletions(-)

diff --git a/.run/api-triple-client.run.xml b/.run/api-triple-client.run.xml
new file mode 100644
index 0000000..e27e5fe
--- /dev/null
+++ b/.run/api-triple-client.run.xml
@@ -0,0 +1,11 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="api-triple-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-config-api">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <kind value="PACKAGE" />
+    <package value="github.com/apache/dubbo-go-samples/config-api/rpc/triple/go-client/cmd" />
+    <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/config-api/go-client/cmd/client.go" />
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/.run/api-triple-server.run.xml b/.run/api-triple-server.run.xml
new file mode 100644
index 0000000..d502f11
--- /dev/null
+++ b/.run/api-triple-server.run.xml
@@ -0,0 +1,11 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="api-triple-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-config-api">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <kind value="PACKAGE" />
+    <package value="github.com/apache/dubbo-go-samples/config-api/rpc/triple/go-server/cmd" />
+    <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/config-api/go-server/cmd/server.go" />
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/.run/config-api-client.run.xml b/.run/config-api-client.run.xml
index 5c2a1f6..6e81484 100644
--- a/.run/config-api-client.run.xml
+++ b/.run/config-api-client.run.xml
@@ -1,15 +1,11 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="config-api-client" type="GoApplicationRunConfiguration" factoryName="Go Application" singleton="false">
+  <configuration default="false" name="api-config-center-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-config-api" singleton="true">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
-    <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/config-api/go-client/conf/log.yml" />
-      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/config-api/go-client/conf/client.yml" />
-    </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/config-api/go-client/cmd/client.go" />
-    <package value="github.com/apache/dubbo-go-samples/config-api/go-client/cmd" />
+    <package value="github.com/apache/dubbo-go-samples/config-api/configcenter/go-client/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/config-api/go-client/cmd/client.go" />
     <method v="2" />
   </configuration>
-</component>
+</component>
\ No newline at end of file
diff --git a/.run/config-api-server.run.xml b/.run/config-api-server.run.xml
index c1b26e1..8c8081a 100644
--- a/.run/config-api-server.run.xml
+++ b/.run/config-api-server.run.xml
@@ -1,15 +1,11 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="config-api-server" type="GoApplicationRunConfiguration" factoryName="Go Application" singleton="false">
+  <configuration default="false" name="api-config-center-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-config-api" singleton="true">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
-    <envs>
-      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/config-api/go-server/conf/server.yml" />
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/config-api/go-server/conf/log.yml" />
-    </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/config-api/go-server/cmd/server.go" />
-    <package value="github.com/apache/dubbo-go-samples/config-api/go-server/cmd" />
+    <package value="github.com/apache/dubbo-go-samples/config-api/configcenter/go-server/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/config-api/go-server/cmd/server.go" />
     <method v="2" />
   </configuration>
-</component>
+</component>
\ No newline at end of file
diff --git a/.run/configcenter/configcenter-nacos-client.run.xml b/.run/configcenter/configcenter-nacos-client.run.xml
index 2a805c6..4ddc91b 100644
--- a/.run/configcenter/configcenter-nacos-client.run.xml
+++ b/.run/configcenter/configcenter-nacos-client.run.xml
@@ -1,15 +1,14 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="configcenter-nacos-client" type="GoApplicationRunConfiguration" factoryName="Go Application" singleton="false">
+  <configuration default="false" name="configcenter-nacos-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-configcenter" singleton="true">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
-        <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/configcenter/nacos/go-client/conf/log.yml" />
-        <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/configcenter/nacos/go-client/conf/client.yml" />
+      <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/configcenter/nacos/go-client/conf/dubbogo.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/configcenter/nacos/go-client/cmd/client.go" />
     <package value="github.com/apache/dubbo-go-samples/configcenter/nacos/go-client/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/configcenter/nacos/go-client/cmd/client.go" />
     <method v="2" />
   </configuration>
-</component>
+</component>
\ No newline at end of file
diff --git a/.run/configcenter/configcenter-nacos-server.run.xml b/.run/configcenter/configcenter-nacos-server.run.xml
index 69739cc..ac3335c 100644
--- a/.run/configcenter/configcenter-nacos-server.run.xml
+++ b/.run/configcenter/configcenter-nacos-server.run.xml
@@ -1,12 +1,11 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="configcenter-nacos-server" type="GoApplicationRunConfiguration" factoryName="Go Application">
+  <configuration default="false" name="configcenter-nacos-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-configcenter">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
-    <kind value="PACKAGE" />
     <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/configcenter/nacos/go-server/conf/conf/log.yml" />
-      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/configcenter/nacos/go-server/conf/server.yml" />
+      <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/configcenter/nacos/go-server/conf/dubbogo.yml" />
     </envs>
+    <kind value="PACKAGE" />
     <package value="github.com/apache/dubbo-go-samples/configcenter/nacos/go-server/cmd" />
     <directory value="$PROJECT_DIR$" />
     <filePath value="$PROJECT_DIR$/configcenter/nacos/go-server/cmd/server.go" />
diff --git a/.run/context-client.run.xml b/.run/context-client.run.xml
index 890a6b7..d801885 100644
--- a/.run/context-client.run.xml
+++ b/.run/context-client.run.xml
@@ -1,5 +1,5 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="context-client" type="GoApplicationRunConfiguration" factoryName="Go Application" singleton="false">
+  <configuration default="false" name="context-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-context" singleton="false">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
@@ -7,9 +7,9 @@
       <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/context/go-client/conf/client.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/context/go-client/cmd/client.go" />
     <package value="github.com/apache/dubbo-go-samples/context/go-client/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/context/go-client/cmd/client.go" />
     <method v="2" />
   </configuration>
-</component>
+</component>
\ No newline at end of file
diff --git a/.run/context-server.run.xml b/.run/context-server.run.xml
index a6721d2..cacd6bd 100644
--- a/.run/context-server.run.xml
+++ b/.run/context-server.run.xml
@@ -1,5 +1,5 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="context-server" type="GoApplicationRunConfiguration" factoryName="Go Application" singleton="false">
+  <configuration default="false" name="context-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-context" singleton="false">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
@@ -7,9 +7,9 @@
       <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/context/go-server/conf/log.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/context/go-server/cmd/server.go" />
     <package value="github.com/apache/dubbo-go-samples/context/go-server/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/context/go-server/cmd/server.go" />
     <method v="2" />
   </configuration>
-</component>
+</component>
\ No newline at end of file
diff --git a/.run/context-triple-client.run.xml b/.run/context-triple-client.run.xml
new file mode 100644
index 0000000..eb36e49
--- /dev/null
+++ b/.run/context-triple-client.run.xml
@@ -0,0 +1,14 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="context-triple-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-context">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <envs>
+      <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/context/triple/go-client/conf/dubbogo.yml" />
+    </envs>
+    <kind value="PACKAGE" />
+    <package value="github.com/apache/dubbo-go-samples/context/triple/go-client/cmd" />
+    <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/helloworld/go-client/cmd/client.go" />
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/.run/context-triple-server.run.xml b/.run/context-triple-server.run.xml
new file mode 100644
index 0000000..d1f9188
--- /dev/null
+++ b/.run/context-triple-server.run.xml
@@ -0,0 +1,14 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="context-triple-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-context">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <envs>
+      <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/context/triple/go-server/conf/dubbogo.yml" />
+    </envs>
+    <kind value="PACKAGE" />
+    <package value="github.com/apache/dubbo-go-samples/context/triple/go-server/cmd" />
+    <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/helloworld/go-client/cmd/client.go" />
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/config-api/README.md b/config-api/README.md
index a1b4605..5f5085f 100644
--- a/config-api/README.md
+++ b/config-api/README.md
@@ -1,65 +1,18 @@
-# config by api
+## 配置API
 
-### 1. Usage
-provider side\
-go-server/cmd/server.go
-```go
-// run these codes in init function
-// and you need not add config env_vairable before run
-    providerConfig := config.NewProviderConfig(
-            config.WithProviderAppConfig(config.NewDefaultApplicationConfig()),
-            config.WithProviderProtocol("dubbo", "dubbo", "20000"),// protocol and port
-            config.WithProviderRegistry("demoZk", config.NewDefaultRegistryConfig("zookeeper")), // registry config
-            config.WithProviderServices("UserProvider", config.NewServiceConfigByAPI(
-                config.WithServiceRegistry("demoZk"), // registry key, equal to upper line
-                config.WithServiceProtocol("dubbo"), // export protocol 
-                config.WithServiceInterface("org.apache.dubbo.UserProvider"), // interface id
-                config.WithServiceLoadBalance("random"), // lb 
-                config.WithServiceWarmUpTime("100"),
-                config.WithServiceCluster("failover"),
-                config.WithServiceMethod("GetUser", "1", "random"),
-            )),
-        )
-	config.SetProviderConfig(*providerConfig) // set to providerConfig ptr
-```
+配置API旨在支持用户通过API的形式来使用dubbo-go框架,而无需定义配置文件。
+配置API具有更高的灵活性,可以在代码中动态地写入配置条目,从而启动框架服务,或者生成自己需要使用的实例。例如注册中心、配置中心等模块。
 
-consumer side\
-go-client/cmd/client.go
-```go
-consumerConfig := config.NewConsumerConfig(
-		config.WithConsumerAppConfig(config.NewDefaultApplicationConfig()), // default app config
-		config.WithConsumerConnTimeout(time.Second*3), // timeout
-		config.WithConsumerRequestTimeout(time.Second*3), // timeout
-		config.WithConsumerRegistryConfig("demoZk", config.NewDefaultRegistryConfig("zookeeper")), // registry config
-		config.WithConsumerReferenceConfig("UserProvider", config.NewReferenceConfigByAPI( // set refer config
-			config.WithReferenceRegistry("demoZk"), // registry key
-			config.WithReferenceProtocol("dubbo"), // protocol 
-			config.WithReferenceInterface("org.apache.dubbo.UserProvider"),// interface name
-			config.WithReferenceMethod("GetUser", "3", "random"), // method and lb
-			config.WithReferenceCluster("failover"),
-		)),
-	)
-	config.SetConsumerConfig(*consumerConfig) // set to global consumerConfig ptr before main function run
-```
-### 2. Attention
-- default registry support\
-Now we support the api way to create provider/consumer global configure.
+### 目录结构
 
-default registry code as showed above:\
-we support default ip and port for them
-```go
-config.NewDefaultRegistryConfig("nacos")
-config.NewDefaultRegistryConfig("consul")
-config.NewDefaultRegistryConfig("zookeeper")
-```
+-configcenter/
 
-- default app config support\
-set app-relevant config by default
-```
-config.NewDefaultApplicationConfig()
-```
-- need improve\
-Now, api config is only support to create config by api, it also needs to set specific config field after read from yaml file by api.\
-There maybe future-change in config/consumer_config.go  config/provider_config.go to export more api.
+使用配置API,从远程配置中心读取框架启动配置,详情见 [README](./rpc/README.md)
 
-Pls. refer to [HOWTO.md](../HOWTO.md) under the root directory to run this sample.
\ No newline at end of file
+- rpc/
+
+使用配置API启动provider端和consumer端,发起调用
+
+- subModule/
+
+使用配置API 获取框架特定组件的实例
diff --git a/config-api/README_zh.md b/config-api/README_zh.md
deleted file mode 100644
index f33f572..0000000
--- a/config-api/README_zh.md
+++ /dev/null
@@ -1,68 +0,0 @@
-# Dubbogo 使用api进行配置初始化
-
-### 1. 使用方法
-- 服务端:
-  go-server/cmd/server.go
-
-```go
-// 在init函数中定义这些代码
-// 你不需要在环境变量中定义服务端配置文件的位置了
-    providerConfig := config.NewProviderConfig(
-            config.WithProviderAppConfig(config.NewDefaultApplicationConfig()), // 默认app配置
-            config.WithProviderProtocol("dubbo", "dubbo", "20000"),// 协议key、协议名和端口号
-            config.WithProviderRegistry("demoZk", config.NewDefaultRegistryConfig("zookeeper")), // 注册中心配置
-            config.WithProviderServices("UserProvider", config.NewServiceConfigByAPI(
-                config.WithServiceRegistry("demoZk"), // 注册中心 key, 和上面注册中心key保持一致
-                config.WithServiceProtocol("dubbo"), // 暴露协议,和上面协议key对应
-                config.WithServiceInterface("org.apache.dubbo.UserProvider"), // interface id
-                config.WithServiceLoadBalance("random"), // 负载均衡
-                config.WithServiceWarmUpTime("100"),
-                config.WithServiceCluster("failover"),
-                config.WithServiceMethod("GetUser", "1", "random"),
-            )),
-        )
-	config.SetProviderConfig(*providerConfig) // 写入providerConfig指针
-```
-
-- 客户端
-  go-client/cmd/client.go
-
-```go
-consumerConfig := config.NewConsumerConfig(
-		config.WithConsumerAppConfig(config.NewDefaultApplicationConfig()), // 默认app配置
-		config.WithConsumerConnTimeout(time.Second*3), // timeout
-		config.WithConsumerRequestTimeout(time.Second*3), // timeout
-		config.WithConsumerRegistryConfig("demoZk", config.NewDefaultRegistryConfig("zookeeper")), // 注册中心配置
-		config.WithConsumerReferenceConfig("UserProvider", config.NewReferenceConfigByAPI( // set refer config
-			config.WithReferenceRegistry("demoZk"), // registry key
-			config.WithReferenceProtocol("dubbo"), // protocol 
-			config.WithReferenceInterface("org.apache.dubbo.UserProvider"),// interface name
-			config.WithReferenceMethod("GetUser", "3", "random"), // method and lb
-			config.WithReferenceCluster("failover"),
-		)),
-	)
-	config.SetConsumerConfig(*consumerConfig) // 写入 consumerConfig 指针
-```
-### 2. 注意
-- 默认注册中心支持
-
-  现在提供根据api来快速初始化注册中心到默认ip和端口
-
-默认注册中心初始化代码:
-
-```go
-config.NewDefaultRegistryConfig("nacos")
-config.NewDefaultRegistryConfig("consul")
-config.NewDefaultRegistryConfig("zookeeper")
-```
-
-- 默认app配置
-设置默认的app配置:
-```
-config.NewDefaultApplicationConfig()
-```
-- 需要改进的地方:
-
-  现在,通过api只能进行配置初始化过程,而通过api进行配置特定字段的修改也很重要。在以后可能会在config/consumer_config.go  config/provider_config.go 文件中进行进一步支持。
-
-请参阅根目录中的 [HOWTO.md](../HOWTO_zh.md) 来运行本例。
\ No newline at end of file
diff --git a/config-api/configcenter/go-client/cmd/client.go b/config-api/configcenter/go-client/cmd/client.go
new file mode 100644
index 0000000..823642a
--- /dev/null
+++ b/config-api/configcenter/go-client/cmd/client.go
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package main
+
+import (
+	"context"
+	"time"
+)
+
+import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
+	"dubbo.apache.org/dubbo-go/v3/config"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+)
+
+import (
+	"github.com/apache/dubbo-go-samples/api"
+)
+
+var grpcGreeterImpl = new(api.GreeterClientImpl)
+
+// There is no need to export DUBBO_GO_CONFIG_PATH, as you are using config api to set config
+func main() {
+	config.SetConsumerService(grpcGreeterImpl)
+
+	centerConfig := config.NewConfigCenterConfig(
+		config.WithConfigCenterProtocol("nacos"),
+		config.WithConfigCenterAddress("localhost:8848"),
+		config.WithConfigCenterDataID("dubbo-go-samples-configcenter-nacos-client"),
+	)
+
+	rootConfig := config.NewRootConfig(
+		config.WithRootCenterConfig(centerConfig),
+	)
+
+	if err := rootConfig.Init(); err != nil {
+		panic(err)
+	}
+
+	time.Sleep(3 * time.Second)
+
+	logger.Info("start to test dubbo")
+	req := &api.HelloRequest{
+		Name: "laurence",
+	}
+	reply := &api.User{}
+	if err := grpcGreeterImpl.SayHello(context.Background(), req, reply); err != nil {
+		logger.Error(err)
+	}
+	logger.Infof("client response result: %v\n", reply)
+}
diff --git a/config-api/configcenter/go-server/cmd/server.go b/config-api/configcenter/go-server/cmd/server.go
new file mode 100644
index 0000000..0b511ac
--- /dev/null
+++ b/config-api/configcenter/go-server/cmd/server.go
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package main
+
+import (
+	"context"
+	"dubbo.apache.org/dubbo-go/v3/config"
+)
+
+import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+)
+
+import (
+	"github.com/apache/dubbo-go-samples/api"
+)
+
+type GreeterProvider struct {
+	api.GreeterProviderBase
+}
+
+func (s *GreeterProvider) SayHello(ctx context.Context, in *api.HelloRequest) (*api.User, error) {
+	logger.Infof("Dubbo3 GreeterProvider get user name = %s\n", in.Name)
+	return &api.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
+}
+
+// There is no need to export DUBBO_GO_CONFIG_PATH, as you are using config api to set config
+func main() {
+	config.SetProviderService(&GreeterProvider{})
+	centerConfig := config.NewConfigCenterConfig(
+		config.WithConfigCenterProtocol("nacos"),
+		config.WithConfigCenterAddress("localhost:8848"),
+		config.WithConfigCenterDataID("dubbo-go-samples-configcenter-nacos-server"),
+	)
+
+	rootConfig := config.NewRootConfig(
+		config.WithRootCenterConfig(centerConfig),
+	)
+
+	if err := rootConfig.Init(); err != nil {
+		panic(err)
+	}
+	select {}
+}
diff --git a/config-api/go-client/cmd/client.go b/config-api/go-client/cmd/client.go
deleted file mode 100644
index fad27a9..0000000
--- a/config-api/go-client/cmd/client.go
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package main
-
-import (
-	"context"
-	"os"
-	"time"
-)
-
-import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log"
-)
-
-import (
-	"github.com/apache/dubbo-go-samples/config-api/go-client/pkg"
-)
-
-var userProvider = new(pkg.UserProvider)
-
-func setConfigByAPI() {
-	consumerConfig := config.NewConsumerConfig(
-		config.WithConsumerAppConfig(config.NewDefaultApplicationConfig()),
-		config.WithConsumerConnTimeout(time.Second*3),
-		config.WithConsumerRequestTimeout(time.Second*3),
-		config.WithConsumerRegistryConfig("demoZk", config.NewDefaultRegistryConfig("zookeeper")),
-		config.WithConsumerReferenceConfig("UserProvider", config.NewReferenceConfigByAPI(
-			config.WithReferenceRegistry("demoZk"),
-			config.WithReferenceProtocol("dubbo"),
-			config.WithReferenceInterface("org.apache.dubbo.UserProvider"),
-			config.WithReferenceMethod("GetUser", "3", "random"),
-			config.WithReferenceCluster("failover"),
-		)),
-	)
-	config.SetConsumerConfig(*consumerConfig)
-}
-
-func init() {
-	setConfigByAPI()
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&pkg.User{})
-}
-
-// need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
-func main() {
-	hessian.RegisterPOJO(&pkg.User{})
-	config.Load()
-	time.Sleep(3 * time.Second)
-
-	gxlog.CInfo("\n\n\nstart to test dubbo")
-	user := &pkg.User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
-	if err != nil {
-		gxlog.CError("error: %v\n", err)
-		os.Exit(1)
-		return
-	}
-	gxlog.CInfo("response result: %v\n", user)
-}
diff --git a/config-api/go-client/conf/client.yml b/config-api/go-client/conf/client.yml
deleted file mode 100644
index 308d530..0000000
--- a/config-api/go-client/conf/client.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoClient"
-  module: "dubbo-go user-info client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/config-api/go-server/cmd/server.go b/config-api/go-server/cmd/server.go
deleted file mode 100644
index b38bc6e..0000000
--- a/config-api/go-server/cmd/server.go
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package main
-
-import (
-	"fmt"
-	"os"
-	"os/signal"
-	"syscall"
-	"time"
-)
-
-import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	"dubbo.apache.org/dubbo-go/v3/common/logger"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-)
-
-import (
-	"github.com/apache/dubbo-go-samples/config-api/go-server/pkg"
-)
-
-var (
-	survivalTimeout = int(3e9)
-)
-
-func setConfigByAPI() {
-	providerConfig := config.NewProviderConfig(
-		config.WithProviderAppConfig(config.NewDefaultApplicationConfig()),
-		config.WithProviderProtocol("dubbo", "dubbo", "20000"),
-		config.WithProviderRegistry("demoZk", config.NewDefaultRegistryConfig("zookeeper")),
-		config.WithProviderServices("UserProvider", config.NewServiceConfigByAPI(
-			config.WithServiceRegistry("demoZk"),
-			config.WithServiceProtocol("dubbo"),
-			config.WithServiceInterface("org.apache.dubbo.UserProvider"),
-			config.WithServiceLoadBalance("random"),
-			config.WithServiceWarmUpTime("100"),
-			config.WithServiceCluster("failover"),
-			config.WithServiceMethod("GetUser", "1", "random"),
-		)),
-	)
-	config.SetProviderConfig(*providerConfig)
-}
-
-func init() {
-	setConfigByAPI()
-}
-
-// needn't to setup environment variable  before run
-func main() {
-	hessian.RegisterPOJO(&pkg.User{})
-	config.Load()
-
-	initSignal()
-}
-
-func initSignal() {
-	signals := make(chan os.Signal, 1)
-	// It is not possible to block SIGKILL or syscall.SIGSTOP
-	signal.Notify(signals, os.Interrupt, os.Kill, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
-	for {
-		sig := <-signals
-		logger.Infof("get signal %s", sig.String())
-		switch sig {
-		case syscall.SIGHUP:
-			// reload()
-		default:
-			time.AfterFunc(time.Duration(survivalTimeout), func() {
-				logger.Warnf("app exit now by force...")
-				os.Exit(1)
-			})
-
-			// The program exits normally or timeout forcibly exits.
-			fmt.Println("provider app exit now...")
-			return
-		}
-	}
-}
diff --git a/config-api/go-server/conf/client.yml b/config-api/go-server/conf/client.yml
deleted file mode 100644
index 11ae382..0000000
--- a/config-api/go-server/conf/client.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoTest"
-  module: "dubbo-go user-info client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/config-api/go-server/conf/server.yml b/config-api/go-server/conf/server.yml
deleted file mode 100644
index af90434..0000000
--- a/config-api/go-server/conf/server.yml
+++ /dev/null
@@ -1,55 +0,0 @@
-# dubbo server yaml configure file
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoServer"
-  module: "dubbo-go user-info server"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-
-# service config
-services:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    loadbalance: "random"
-    warmup: "100"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 1
-        loadbalance: "random"
-
-# protocol config
-protocols:
-  "dubbo":
-    name: "dubbo"
-    port: 20000
-
-protocol_conf:
-  dubbo:
-    session_number: 700
-    session_timeout: "180s"
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "server"
diff --git a/config-api/rpc/README.md b/config-api/rpc/README.md
new file mode 100644
index 0000000..95f46ff
--- /dev/null
+++ b/config-api/rpc/README.md
@@ -0,0 +1,69 @@
+# Dubbogo 使用api进行配置初始化
+
+### 使用方法
+- 服务端:
+  triple/go-server/cmd/server.go
+
+```go
+// 注册Provider,通过结构名,或者 Reference()函数返回值'greeterImpl',与 provider配置serviceKey相对应
+config.SetProviderService(&GreeterProvider{})
+
+// 生成service配置
+serviceConfig := config.NewServiceConfig(
+    config.WithServiceInterface("com.apache.dubbo.sample.basic.IGreeter"), // 接口名,consuemr与provider对应的ID
+    config.WithServiceProtocolKeys("tripleKey"), // 选择的协议key,与rootConfig 声明的支持协议key需要对应
+)
+
+// 生成协议配置
+protocolConfig := config.NewProtocolConfig(
+    config.WithProtocolName("tri"),
+    config.WithProtocolPort("20000"),
+)
+
+// 生成provider配置
+providerConfig := config.NewProviderConfig(
+    config.WithProviderRegistryKeys("zk"), // provider 选择使用的注册中心key
+    config.WithProviderService("greeterImpl", serviceConfig), // provider 注册 serviceKey 和用上面定义好的 GreeterProvider
+)
+
+// 生成注册中心配置
+registryConfig := config.NewRegistryConfigWithProtocolDefaultPort("zookeeper")
+
+// 生成根配置
+rootConfig := config.NewRootConfig(
+    config.WithRootProviderConfig(providerConfig), // 使用provider配置
+    config.WithRootRegistryConfig("zk", registryConfig), // 声明注册中心Key和注册中心配置
+    config.WithRootProtocolConfig("tripleKey", protocolConfig),// 声明当前应用支持的协议key,与 serviceConfig 选择的协议key需要对应
+)
+
+// 服务启动
+if err := rootConfig.Init(); err != nil {
+    panic(err)
+}
+select {}
+```
+- 客户端,与provider端类似
+```go
+config.SetConsumerService(tripleGreeterImpl)
+
+referenceConfig := config.NewReferenceConfig(
+  config.WithReferenceInterface("com.apache.dubbo.sample.basic.IGreeter"),
+  config.WithReferenceProtocolName("tri"),
+  config.WithReferenceRegistry("zkRegistryKey"),
+)
+
+consumerConfig := config.NewConsumerConfig(
+  config.WithConsumerReferenceConfig("greeterImpl", referenceConfig),
+)
+
+registryConfig := config.NewRegistryConfigWithProtocolDefaultPort("zookeeper")
+
+rootConfig := config.NewRootConfig(
+  config.WithRootRegistryConfig("zkRegistryKey", registryConfig),
+  config.WithRootConsumerConfig(consumerConfig),
+)
+
+if err := rootConfig.Init(); err != nil {
+  panic(err) 
+}
+```
\ No newline at end of file
diff --git a/config-api/rpc/triple/go-client/cmd/client.go b/config-api/rpc/triple/go-client/cmd/client.go
new file mode 100644
index 0000000..c17c6ba
--- /dev/null
+++ b/config-api/rpc/triple/go-client/cmd/client.go
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package main
+
+import (
+	"context"
+	"time"
+)
+
+import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
+	"dubbo.apache.org/dubbo-go/v3/config"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+)
+
+import (
+	"github.com/apache/dubbo-go-samples/api"
+)
+
+var tripleGreeterImpl = new(api.GreeterClientImpl)
+
+// There is no need to export DUBBO_GO_CONFIG_PATH, as you are using config api to set config
+func main() {
+	config.SetConsumerService(tripleGreeterImpl)
+
+	referenceConfig := config.NewReferenceConfig(
+		config.WithReferenceInterface("com.apache.dubbo.sample.basic.IGreeter"),
+		config.WithReferenceProtocolName("tri"),
+		config.WithReferenceRegistry("zkRegistryKey"),
+	)
+
+	consumerConfig := config.NewConsumerConfig(
+		config.WithConsumerReferenceConfig("greeterImpl", referenceConfig),
+	)
+
+	registryConfig := config.NewRegistryConfigWithProtocolDefaultPort("zookeeper")
+
+	rootConfig := config.NewRootConfig(
+		config.WithRootRegistryConfig("zkRegistryKey", registryConfig),
+		config.WithRootConsumerConfig(consumerConfig),
+	)
+
+	if err := rootConfig.Init(); err != nil {
+		panic(err)
+	}
+
+	time.Sleep(3 * time.Second)
+
+	logger.Info("start to test dubbo")
+	req := &api.HelloRequest{
+		Name: "laurence",
+	}
+	reply := &api.User{}
+	if err := tripleGreeterImpl.SayHello(context.Background(), req, reply); err != nil {
+		logger.Error(err)
+	}
+	logger.Infof("client response result: %v\n", reply)
+}
diff --git a/config-api/rpc/triple/go-server/cmd/server.go b/config-api/rpc/triple/go-server/cmd/server.go
new file mode 100644
index 0000000..a979a52
--- /dev/null
+++ b/config-api/rpc/triple/go-server/cmd/server.go
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package main
+
+import (
+	"context"
+)
+
+import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
+	"dubbo.apache.org/dubbo-go/v3/config"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+)
+
+import (
+	"github.com/apache/dubbo-go-samples/api"
+)
+
+type GreeterProvider struct {
+	api.GreeterProviderBase
+}
+
+func (s *GreeterProvider) SayHello(ctx context.Context, in *api.HelloRequest) (*api.User, error) {
+	logger.Infof("Dubbo3 GreeterProvider get user name = %s\n", in.Name)
+	return &api.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
+}
+
+// There is no need to export DUBBO_GO_CONFIG_PATH, as you are using config api to set config
+func main() {
+	config.SetProviderService(&GreeterProvider{})
+
+	serviceConfig := config.NewServiceConfig(
+		config.WithServiceInterface("com.apache.dubbo.sample.basic.IGreeter"),
+		config.WithServiceProtocolKeys("tripleKey"),
+	)
+
+	protocolConfig := config.NewProtocolConfig(
+		config.WithProtocolName("tri"),
+		config.WithProtocolPort("20000"),
+	)
+
+	providerConfig := config.NewProviderConfig(
+		config.WithProviderRegistryKeys("zk"),
+		config.WithProviderService("greeterImpl", serviceConfig),
+	)
+
+	registryConfig := config.NewRegistryConfigWithProtocolDefaultPort("zookeeper")
+
+	rootConfig := config.NewRootConfig(
+		config.WithRootProviderConfig(providerConfig),
+		config.WithRootRegistryConfig("zk", registryConfig),
+		config.WithRootProtocolConfig("tripleKey", protocolConfig),
+	)
+	if err := rootConfig.Init(); err != nil {
+		panic(err)
+	}
+	select {}
+}
diff --git a/config-api/subModule/configcenter/main.go b/config-api/subModule/configcenter/main.go
new file mode 100644
index 0000000..7d4c297
--- /dev/null
+++ b/config-api/subModule/configcenter/main.go
@@ -0,0 +1,9 @@
+package main
+
+import (
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+)
+
+// todo
+func main() {
+}
diff --git a/config-api/subModule/registry/README.md b/config-api/subModule/registry/README.md
new file mode 100644
index 0000000..f67193e
--- /dev/null
+++ b/config-api/subModule/registry/README.md
@@ -0,0 +1,35 @@
+## 通过配置API生成实例化子模块
+
+### 注册中心
+
+例子:
+```go
+// 通过配置 API 生成注册中心配置,此处为默认zk配置
+registryConfig := config.NewRegistryConfigWithProtocolDefaultPort("zookeeper")
+
+// 调用注册中心配置API,获取注册中心实例 reg
+reg, err := registryConfig.GetInstance(common.PROVIDER)
+if err != nil {
+    panic(err)
+}
+
+// 生成一个 provider URL
+ivkURL, err := common.NewURL("mock://localhost:8080",
+    common.WithPath("com.alibaba.dubbogo.HelloService"),
+    common.WithParamsValue(constant.ROLE_KEY, strconv.Itoa(common.PROVIDER)),
+    common.WithMethods([]string{"GetUser", "SayHello"}),
+)
+if err != nil {
+    panic(err)
+}
+// 使用新生成的注册中心实例注册
+if err := reg.Register(ivkURL); err != nil {
+    panic(err)
+}
+time.Sleep(time.Second * 30)
+// 反注册
+if err := reg.UnRegister(ivkURL); err != nil {
+    panic(err)
+}
+
+```
\ No newline at end of file
diff --git a/config-api/subModule/registry/main.go b/config-api/subModule/registry/main.go
new file mode 100644
index 0000000..c9ca8da
--- /dev/null
+++ b/config-api/subModule/registry/main.go
@@ -0,0 +1,37 @@
+package main
+
+import (
+	"strconv"
+	"time"
+)
+
+import (
+	"dubbo.apache.org/dubbo-go/v3/common"
+	"dubbo.apache.org/dubbo-go/v3/common/constant"
+	"dubbo.apache.org/dubbo-go/v3/config"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+)
+
+func main() {
+	registryConfig := config.NewRegistryConfigWithProtocolDefaultPort("zookeeper")
+	reg, err := registryConfig.GetInstance(common.PROVIDER)
+	if err != nil {
+		panic(err)
+	}
+
+	ivkURL, err := common.NewURL("mock://localhost:8080",
+		common.WithPath("com.alibaba.dubbogo.HelloService"),
+		common.WithParamsValue(constant.ROLE_KEY, strconv.Itoa(common.PROVIDER)),
+		common.WithMethods([]string{"GetUser", "SayHello"}),
+	)
+	if err != nil {
+		panic(err)
+	}
+	if err := reg.Register(ivkURL); err != nil {
+		panic(err)
+	}
+	time.Sleep(time.Second * 30)
+	if err := reg.UnRegister(ivkURL); err != nil {
+		panic(err)
+	}
+}
diff --git a/config-api/subModule/service/main.go b/config-api/subModule/service/main.go
new file mode 100644
index 0000000..7d4c297
--- /dev/null
+++ b/config-api/subModule/service/main.go
@@ -0,0 +1,9 @@
+package main
+
+import (
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+)
+
+// todo
+func main() {
+}
diff --git a/configcenter/README.md b/configcenter/README.md
deleted file mode 100644
index 3f3c469..0000000
--- a/configcenter/README.md
+++ /dev/null
@@ -1,96 +0,0 @@
-# Config Center Sample
-
-### Background
-
-In Dubbo, config center takes the following two responsibilities:
-1. For externalized configuration. Central management for bootstrap configurations, that is, keep "dubbo.properties" save externally on the config center.
-2. For service governance. Keep service rule on the config center, and notify the subscribers when the rule changes.
-
-The purpose of externalized configuration is centrally managing application's configurations in one single place. There are many mature configuration management systems in the industry. Dubbo go supports some of them, including Zookeeper, Nacos and Apollo, etc.
-
-There's no difference between externalized configuration and local configuration with regarding the content and the format. Config center is more suitable to keep the common configurations such as registry center configuration, metadata center configuration, etc., so that they are centrally managed.
-
-At the same time, externalized configuration has two scope: global scope, and application scope. Global scope configurations are shared among all applications, and application scope configuration is only visible to the application it belongs to. By default, externalized configuration has higher priority than the local configuration.
-
-This sample demonstrates how to config and use externalized configuration on Zookeeper. You can refer [Dubbo Documentation](https://dubbo.apache.org/zh/docs/v2.7/user/configuration/config-center/) for more details on config center.
-
-### Example
-
-If use Zookeeper as config center, global externalized configuration and application scope configurations will be layout like below:
-
-```
-dubbo
-└── config
-    ├── dubbo
-    │   └── dubbo.properties <- global
-    ├── user-info-client     
-    │   └── dubbo.properties <- service consumer
-    └── user-info-server     
-        └── dubbo.properties <- service provider
-```
-
-##### 1. Prepare externalized configurations
-
-**Prepare global scope externalized configuration** - The default path for the global scope configuration on Zookeeper is: "/dubbo/config/dubbo/dubbo.properties". You can use the following commands to config it:
-
-```bash
-zkCli create /dubbo/config; \
-zkCli create /dubbo/config/dubbo; \
-zkCli create /dubbo/config/dubbo/dubbo.properties; \
-zkCli set /dubbo/config/dubbo/dubbo.properties \
-"dubbo.protocol.name=dubbo
-dubbo.protocol.port=20880"
-```
-
-**Prepare configuration for service provider** - Assume service provider's application name is "user-info-server", then the default path for the provider's config is "/dubbo/config/user-info-server/dubbo.properties". You can use the following commands to config it:
-
-```bash
-zkCli create /dubbo/config; \
-zkCli create /dubbo/config/user-info-server; \
-zkCli create /dubbo/config/user-info-server/dubbo.properties; \
-zkCli set /dubbo/config/user-info-server/dubbo.properties \
-"dubbo.service.org.apache.dubbo.UserProvider.cluster=failfast
-dubbo.service.org.apache.dubbo.UserProvider.protocol=myDubbo
-dubbo.protocols.myDubbo.port=22222
-dubbo.protocols.myDubbo.name=dubbo"
-```
-
-**Prepare configuration for service consumer** - Assume service consumer's application name is "user-info-client", then the default path for the consumer's config is "/dubbo/config/user-info-client/dubbo.properties". You can use the following commands to config it:
-
-```bash
-zkCli create /dubbo/config; \
-zkCli create /dubbo/config/user-info-client; \
-zkCli create /dubbo/config/user-info-client/dubbo.properties; \
-zkCli set /dubbo/config/user-info-client/dubbo.properties \
-"dubbo.service.org.apache.dubbo.UserProvider.cluster=failfast"
-```
-
-##### 2. Config config center in application
-
-The config center's configuration on the consumer side and on the provider side is similar, shown as following:
-
-```yaml
-# config center config
-config_center:
-  protocol: "zookeeper"
-  group: "user-info-client"
-  address: "127.0.0.1:2181"
-# application config
-application:
-  organization: "dubbo.io"
-  name: "user-info-server" # application's name, which will decide where the externalized configuration is placed.
-```
-
-##### 3. Import config center's package
-
-```go
-import (
-    _ "dubbo.apache.org/dubbo-go/v3/config_center/zookeeper"
-)
-```
-
-##### 4. Run this sample
-
-Pls. refer to [HOWTO.md](../HOWTO.md) under the root directory to run this sample.
-
-
diff --git a/configcenter/README_zh.md b/configcenter/README_zh.md
deleted file mode 100644
index 38dbbf4..0000000
--- a/configcenter/README_zh.md
+++ /dev/null
@@ -1,100 +0,0 @@
-# 配置中心示例
-
-### 背景
-
-配置中心在 Dubbo 中承担两个职责:
-
-1. 外部化配置。启动配置的集中式存储 (简单理解为 dubbo.properties 的外部化存储)
-2. 服务治理。服务治理规则的存储与通知
-
-外部化配置目的之一是实现配置的集中式管理,这部分业界已经有很多成熟的专业配置系统。Dubbo go 中对 Zookeeper、Nacos、Apollo 等做了支持。
-
-外部化配置和其他本地配置在内容和格式上并无区别,配置中心更适合将一些公共配置如注册中心、元数据中心配置等抽取以便做集中管理。
-
-同时,外部化配置有全局和应用两个级别,全局配置是所有应用共享的,应用级配置是由每个应用自己维护且只对自身可见的。并且,外部化配置的优先级默认高于本地配置。
-
-本例以如何在 Zookeeper
-上配置和使用外部化配置为例。更多的关于配置中心的描述请参阅 [Dubbo 文档](https://dubbo.apache.org/zh/docs/v2.7/user/configuration/config-center/) 。
-
-### 样例
-
-以 Zookeeper 为例,应用级别和全局的外化配置将会以以下的布局存储在 Zookeeper 上。
-
-```
-dubbo
-└── config
-    ├── dubbo
-    │   └── dubbo.properties <- 全局
-    ├── user-info-client     
-    │   └── dubbo.properties <- 服务消费者
-    └── user-info-server     
-        └── dubbo.properties <- 服务提供者
-```
-
-##### 1. 准备应用外化配置
-
-**全局配置准备** - 全局配置的默认路径为 "/dubbo/config/dubbo/dubbo.properties"。使用以下的命令来配置样例 dubbo.properties:
-
-```bash
-zkCli create /dubbo/config; \
-zkCli create /dubbo/config/dubbo; \
-zkCli create /dubbo/config/dubbo/dubbo.properties; \
-zkCli set /dubbo/config/dubbo/dubbo.properties \
-"dubbo.protocol.name=dubbo
-dubbo.protocol.port=20880"
-```
-
-**服务提供方配置** - 假设服务提供方的应用名是 "user-info-server",服务提供方应用级的配置的默认路径为 "/dubbo/config/user-info-server/dubbo.properties"
-。使用以下的命令来配置样例 dubbo.properties:
-
-```bash
-zkCli create /dubbo/config; \
-zkCli create /dubbo/config/user-info-server; \
-zkCli create /dubbo/config/user-info-server/dubbo.properties; \
-zkCli set /dubbo/config/user-info-server/dubbo.properties \
-"dubbo.service.org.apache.dubbo.UserProvider.cluster=failfast
-dubbo.service.org.apache.dubbo.UserProvider.protocol=myDubbo
-dubbo.protocols.myDubbo.port=22222
-dubbo.protocols.myDubbo.name=dubbo"
-```
-
-**服务消费方配置** - 假设服务消费方的应用名是 "user-info-client",服务提供方应用级的配置的默认路径为 "/dubbo/config/user-info-client/dubbo.properties"
-。使用以下的命令来配置样例 dubbo.properties:
-
-```bash
-zkCli create /dubbo/config; \
-zkCli create /dubbo/config/user-info-client; \
-zkCli create /dubbo/config/user-info-client/dubbo.properties; \
-zkCli set /dubbo/config/user-info-client/dubbo.properties \
-"dubbo.service.org.apache.dubbo.UserProvider.cluster=failfast"
-```
-
-##### 2. 在应用中配置配置中心
-
-服务提供方与服务消费方配置配置中心的方式是一致的,如下所示:
-
-```yaml
-# config center config
-config_center:
-  protocol: "zookeeper"
-  group: "user-info-server"
-  address: "127.0.0.1:2181"
-# application config
-application:
-  organization: "dubbo.io"
-  name: "user-info-server" # 应用文件名,决定应用级外化配置
-```
-
-##### 3. 在代码中引入配置中心的包
-
-```go
-import (
-    _ "dubbo.apache.org/dubbo-go/v3/config_center/zookeeper"
-)
-```
-
-##### 4. 运行示例
-
-请参阅根目录中的 [HOWTO.md](../HOWTO_zh.md) 来运行本例。
-
-
diff --git a/configcenter/nacos/go-client/cmd/client.go b/configcenter/nacos/go-client/cmd/client.go
index 06749f8..68fe2c0 100644
--- a/configcenter/nacos/go-client/cmd/client.go
+++ b/configcenter/nacos/go-client/cmd/client.go
@@ -19,50 +19,37 @@ package main
 
 import (
 	"context"
-	"os"
 	"time"
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/config_center/nacos"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/configcenter/nacos/go-client/pkg"
+	"github.com/apache/dubbo-go-samples/api"
 )
 
-var userProvider = new(pkg.UserProvider)
+var grpcGreeterImpl = new(api.GreeterClientImpl)
 
 func init() {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&pkg.User{})
+	config.SetConsumerService(grpcGreeterImpl)
 }
 
-// need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
+// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/helloworld/go-client/conf/dubbogo.yml
 func main() {
-	hessian.RegisterPOJO(&pkg.User{})
 	config.Load()
 	time.Sleep(3 * time.Second)
 
-	gxlog.CInfo("\n\n\nstart to test dubbo")
-	user := &pkg.User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
-	if err != nil {
-		gxlog.CError("error: %v\n", err)
-		os.Exit(1)
-		return
+	logger.Info("start to test dubbo")
+	req := &api.HelloRequest{
+		Name: "laurence",
+	}
+	reply := &api.User{}
+	if err := grpcGreeterImpl.SayHello(context.Background(), req, reply); err != nil {
+		logger.Error(err)
 	}
-	gxlog.CInfo("response result: %v\n", user)
+	logger.Infof("client response result: %v\n", reply)
 }
diff --git a/configcenter/nacos/go-client/conf/client.yml b/configcenter/nacos/go-client/conf/client.yml
deleted file mode 100644
index 623d92d..0000000
--- a/configcenter/nacos/go-client/conf/client.yml
+++ /dev/null
@@ -1,64 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# config center config
-config_center:
-  protocol: "nacos"
-  address: "127.0.0.1:8848"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "user-info-client"
-  module: "dubbo-go user-info client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/configcenter/nacos/go-client/conf/dubbogo.yml b/configcenter/nacos/go-client/conf/dubbogo.yml
new file mode 100644
index 0000000..28255cc
--- /dev/null
+++ b/configcenter/nacos/go-client/conf/dubbogo.yml
@@ -0,0 +1,20 @@
+dubbo:
+  config-center:
+    protocol: nacos
+    address: 127.0.0.1:8848
+    data-id: "dubbo-go-samples-configcenter-nacos-client"
+
+## set in config center, group is 'dubbo', dataid is 'dubbo-go-samples-configcenter-nacos-client', namespace is default
+#dubbo:
+#  registries:
+#    "demoZK":
+#      protocol: "zookeeper"
+#      timeout: "3s"
+#      address: "127.0.0.1:2181"
+#  consumer:
+#    registry:
+#      - demoZK
+#    references:
+#      "greeterImpl":
+#        protocol: "tri"
+#        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/configcenter/nacos/go-client/conf/log.yml b/configcenter/nacos/go-client/conf/log.yml
deleted file mode 100644
index d0400fe..0000000
--- a/configcenter/nacos/go-client/conf/log.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-level: "debug"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/configcenter/nacos/go-client/pkg/user.go b/configcenter/nacos/go-client/pkg/user.go
deleted file mode 100644
index 7733ea4..0000000
--- a/configcenter/nacos/go-client/pkg/user.go
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	"time"
-)
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/configcenter/nacos/go-server/cmd/server.go b/configcenter/nacos/go-server/cmd/server.go
index e8184fe..4f23c26 100644
--- a/configcenter/nacos/go-server/cmd/server.go
+++ b/configcenter/nacos/go-server/cmd/server.go
@@ -18,63 +18,30 @@
 package main
 
 import (
-	"fmt"
-	"os"
-	"os/signal"
-	"syscall"
-	"time"
+	"context"
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/config_center/nacos"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/configcenter/nacos/go-server/pkg"
-)
-
-var (
-	survivalTimeout = int(3e9)
+	"github.com/apache/dubbo-go-samples/api"
 )
 
-// need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
-func main() {
-	hessian.RegisterPOJO(&pkg.User{})
-	config.Load()
-
-	initSignal()
+type GreeterProvider struct {
+	api.GreeterProviderBase
 }
 
-func initSignal() {
-	signals := make(chan os.Signal, 1)
-	// It is not possible to block SIGKILL or syscall.SIGSTOP
-	signal.Notify(signals, os.Interrupt, os.Kill, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
-	for {
-		sig := <-signals
-		logger.Infof("get signal %s", sig.String())
-		switch sig {
-		case syscall.SIGHUP:
-			// reload()
-		default:
-			time.AfterFunc(time.Duration(survivalTimeout), func() {
-				logger.Warnf("app exit now by force...")
-				os.Exit(1)
-			})
+func (s *GreeterProvider) SayHello(ctx context.Context, in *api.HelloRequest) (*api.User, error) {
+	logger.Infof("Dubbo3 GreeterProvider get user name = %s\n", in.Name)
+	return &api.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
+}
 
-			// The program exits normally or timeout forcibly exits.
-			fmt.Println("provider app exit now...")
-			return
-		}
-	}
+func main() {
+	config.SetProviderService(&GreeterProvider{})
+	config.Load()
+	select {}
 }
diff --git a/configcenter/nacos/go-server/conf/dubbogo.yml b/configcenter/nacos/go-server/conf/dubbogo.yml
new file mode 100644
index 0000000..d87b5c2
--- /dev/null
+++ b/configcenter/nacos/go-server/conf/dubbogo.yml
@@ -0,0 +1,24 @@
+dubbo:
+  config-center:
+    protocol: nacos
+    address: 127.0.0.1:8848
+    data-id: "dubbo-go-samples-configcenter-nacos-server"
+
+## set in config center, group is 'dubbo', dataid is 'dubbo-go-samples-configcenter-nacos-server', namespace is default
+#dubbo:
+#  registries:
+#    "demoZK":
+#      protocol: "zookeeper"
+#      timeout: "3s"
+#      address: "127.0.0.1:2181"
+#  protocols:
+#    "triple":
+#      name: "tri"
+#      port: 20000
+#  provider:
+#    registry:
+#      - demoZK
+#    services:
+#      "greeterImpl":
+#        protocol: "triple"
+#        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/context/go-client/cmd/client.go b/context/dubbo/go-client/cmd/client.go
similarity index 86%
rename from context/go-client/cmd/client.go
rename to context/dubbo/go-client/cmd/client.go
index 56d46fd..b1a62d9 100644
--- a/context/go-client/cmd/client.go
+++ b/context/dubbo/go-client/cmd/client.go
@@ -19,6 +19,7 @@ package main
 
 import (
 	"context"
+	pkg2 "github.com/apache/dubbo-go-samples/context/dubbo/go-client/pkg"
 	"os"
 	"time"
 )
@@ -39,29 +40,25 @@ import (
 	"github.com/dubbogo/gost/log"
 )
 
-import (
-	"github.com/apache/dubbo-go-samples/context/go-client/pkg"
-)
-
-var userProvider = new(pkg.UserProvider)
+var userProvider = new(pkg2.UserProvider)
 
 func init() {
 	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&pkg.ContextContent{})
+	hessian.RegisterPOJO(&pkg2.ContextContent{})
 }
 
 // need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
 func main() {
-	hessian.RegisterPOJO(&pkg.ContextContent{})
+	hessian.RegisterPOJO(&pkg2.ContextContent{})
 	config.Load()
 	time.Sleep(3 * time.Second)
 
 	gxlog.CInfo("\n\n\nstart to test dubbo")
-	rspContent := &pkg.ContextContent{}
+	rspContent := &pkg2.ContextContent{}
 	atta := make(map[string]interface{})
 	atta["string-value"] = "string-demo"
 	atta["int-value"] = 1231242
-	atta["user-defined-value"] = pkg.ContextContent{InterfaceName: "test.interface.name"}
+	atta["user-defined-value"] = pkg2.ContextContent{InterfaceName: "test.interface.name"}
 	reqContext := context.WithValue(context.Background(), constant.DubboCtxKey("attachment"), atta)
 	err := userProvider.GetContext(reqContext, []interface{}{"A001"}, rspContent)
 	if err != nil {
diff --git a/context/go-client/conf/client.yml b/context/dubbo/go-client/conf/client.yml
similarity index 100%
rename from context/go-client/conf/client.yml
rename to context/dubbo/go-client/conf/client.yml
diff --git a/context/go-client/conf/log.yml b/context/dubbo/go-client/conf/log.yml
similarity index 100%
rename from context/go-client/conf/log.yml
rename to context/dubbo/go-client/conf/log.yml
diff --git a/context/go-client/pkg/user.go b/context/dubbo/go-client/pkg/user.go
similarity index 100%
rename from context/go-client/pkg/user.go
rename to context/dubbo/go-client/pkg/user.go
diff --git a/context/go-server/cmd/server.go b/context/dubbo/go-server/cmd/server.go
similarity index 94%
rename from context/go-server/cmd/server.go
rename to context/dubbo/go-server/cmd/server.go
index 853b6be..b72dec1 100644
--- a/context/go-server/cmd/server.go
+++ b/context/dubbo/go-server/cmd/server.go
@@ -19,6 +19,7 @@ package main
 
 import (
 	"fmt"
+	pkg2 "github.com/apache/dubbo-go-samples/context/dubbo/go-server/pkg"
 	"os"
 	"os/signal"
 	"syscall"
@@ -39,17 +40,13 @@ import (
 	hessian "github.com/apache/dubbo-go-hessian2"
 )
 
-import (
-	"github.com/apache/dubbo-go-samples/context/go-server/pkg"
-)
-
 var (
 	survivalTimeout = int(3e9)
 )
 
 // need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
 func main() {
-	hessian.RegisterPOJO(&pkg.ContextContent{})
+	hessian.RegisterPOJO(&pkg2.ContextContent{})
 	config.Load()
 
 	initSignal()
diff --git a/context/go-server/conf/client.yml b/context/dubbo/go-server/conf/client.yml
similarity index 100%
copy from context/go-server/conf/client.yml
copy to context/dubbo/go-server/conf/client.yml
diff --git a/context/go-server/conf/log.yml b/context/dubbo/go-server/conf/log.yml
similarity index 100%
copy from context/go-server/conf/log.yml
copy to context/dubbo/go-server/conf/log.yml
diff --git a/context/go-server/conf/server.yml b/context/dubbo/go-server/conf/server.yml
similarity index 100%
copy from context/go-server/conf/server.yml
copy to context/dubbo/go-server/conf/server.yml
diff --git a/context/go-server/docker/docker-compose.yml b/context/dubbo/go-server/docker/docker-compose.yml
similarity index 100%
copy from context/go-server/docker/docker-compose.yml
copy to context/dubbo/go-server/docker/docker-compose.yml
diff --git a/context/go-server/docker/docker-health-check.sh b/context/dubbo/go-server/docker/docker-health-check.sh
similarity index 100%
copy from context/go-server/docker/docker-health-check.sh
copy to context/dubbo/go-server/docker/docker-health-check.sh
diff --git a/context/go-server/pkg/user.go b/context/dubbo/go-server/pkg/user.go
similarity index 100%
copy from context/go-server/pkg/user.go
copy to context/dubbo/go-server/pkg/user.go
diff --git a/context/go-server/tests/integration/main_test.go b/context/dubbo/go-server/tests/integration/main_test.go
similarity index 100%
copy from context/go-server/tests/integration/main_test.go
copy to context/dubbo/go-server/tests/integration/main_test.go
diff --git a/context/go-server/tests/integration/userprovider_test.go b/context/dubbo/go-server/tests/integration/userprovider_test.go
similarity index 100%
copy from context/go-server/tests/integration/userprovider_test.go
copy to context/dubbo/go-server/tests/integration/userprovider_test.go
diff --git a/config-api/go-server/pkg/user.go b/context/triple/go-client/cmd/client.go
similarity index 51%
rename from config-api/go-server/pkg/user.go
rename to context/triple/go-client/cmd/client.go
index 75d0916..da318b6 100644
--- a/config-api/go-server/pkg/user.go
+++ b/context/triple/go-client/cmd/client.go
@@ -15,48 +15,45 @@
  * limitations under the License.
  */
 
-package pkg
+package main
 
 import (
 	"context"
+	tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
 	"time"
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/config"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 )
 
-func init() {
-	config.SetProviderService(new(UserProvider))
-	// ------for hessian2------
-	hessian.RegisterPOJO(&User{})
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-}
+import (
+	"github.com/apache/dubbo-go-samples/api"
+)
 
-func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
-	gxlog.CInfo("req:%#v", req)
-	rsp := User{"A001", "Alex Stocks", 18, time.Now()}
-	gxlog.CInfo("rsp:%#v", rsp)
-	return &rsp, nil
-}
+var grpcGreeterImpl = new(api.GreeterClientImpl)
 
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
+func init() {
+	config.SetConsumerService(grpcGreeterImpl)
 }
 
-func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
+// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/helloworld/go-client/conf/dubbogo.yml
+func main() {
+	config.Load()
+	time.Sleep(3 * time.Second)
+
+	logger.Info("start to test dubbo")
+	req := &api.HelloRequest{
+		Name: "laurence",
+	}
+	reply := &api.User{}
+	ctx := context.Background()
+	// set user defined context attachment
+	ctx = context.WithValue(ctx, tripleConstant.CtxAttachmentKey, "user-defined-value")
+	if err := grpcGreeterImpl.SayHello(ctx, req, reply); err != nil {
+		logger.Error(err)
+	}
+	logger.Infof("client response result: %v\n", reply)
 }
diff --git a/context/triple/go-client/conf/dubbogo.yml b/context/triple/go-client/conf/dubbogo.yml
new file mode 100644
index 0000000..c11aef3
--- /dev/null
+++ b/context/triple/go-client/conf/dubbogo.yml
@@ -0,0 +1,13 @@
+dubbo:
+  registries:
+    "demoZK":
+      protocol: "zookeeper"
+      timeout: "3s"
+      address: "127.0.0.1:2181"
+  consumer:
+    registry:
+      - demoZK
+    references:
+      "greeterImpl":
+        protocol: "tri"
+        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/configcenter/nacos/go-server/pkg/user.go b/context/triple/go-server/cmd/server.go
similarity index 56%
rename from configcenter/nacos/go-server/pkg/user.go
rename to context/triple/go-server/cmd/server.go
index 75d0916..cf1fe46 100644
--- a/configcenter/nacos/go-server/pkg/user.go
+++ b/context/triple/go-server/cmd/server.go
@@ -15,48 +15,35 @@
  * limitations under the License.
  */
 
-package pkg
+package main
 
 import (
 	"context"
-	"time"
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/config"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+	tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
 )
 
-func init() {
-	config.SetProviderService(new(UserProvider))
-	// ------for hessian2------
-	hessian.RegisterPOJO(&User{})
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-}
+import (
+	"github.com/apache/dubbo-go-samples/api"
+)
 
-func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
-	gxlog.CInfo("req:%#v", req)
-	rsp := User{"A001", "Alex Stocks", 18, time.Now()}
-	gxlog.CInfo("rsp:%#v", rsp)
-	return &rsp, nil
+type GreeterProvider struct {
+	api.GreeterProviderBase
 }
 
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
+func (s *GreeterProvider) SayHello(ctx context.Context, in *api.HelloRequest) (*api.User, error) {
+	logger.Infof("get triple user attachment = %s", ctx.Value(tripleConstant.CtxAttachmentKey))
+	logger.Infof("Dubbo3 GreeterProvider get user name = %s\n", in.Name)
+	return &api.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
 }
 
-func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
+func main() {
+	config.SetProviderService(&GreeterProvider{})
+	config.Load()
+	select {}
 }
diff --git a/context/triple/go-server/conf/dubbogo.yml b/context/triple/go-server/conf/dubbogo.yml
new file mode 100644
index 0000000..5e9cfb4
--- /dev/null
+++ b/context/triple/go-server/conf/dubbogo.yml
@@ -0,0 +1,17 @@
+dubbo:
+  registries:
+    "demoZK":
+      protocol: "zookeeper"
+      timeout: "3s"
+      address: "127.0.0.1:2181"
+  protocols:
+    "triple":
+      name: "tri"
+      port: 20000
+  provider:
+    registry:
+      - demoZK
+    services:
+      "greeterImpl":
+        protocol: "triple"
+        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/go.mod b/go.mod
index 16b4114..12ed8d4 100644
--- a/go.mod
+++ b/go.mod
@@ -1,14 +1,14 @@
 module github.com/apache/dubbo-go-samples
 
 require (
-	dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210821071019-8cb93935d529
+	dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210822082425-1bfface3303e
 	github.com/alibaba/sentinel-golang v1.0.2
 	github.com/apache/dubbo-getty v1.4.3
 	github.com/apache/dubbo-go-hessian2 v1.9.2
 	github.com/bwmarrin/snowflake v0.3.0
 	github.com/dubbogo/gost v1.11.16
 	github.com/dubbogo/net v0.0.3
-	github.com/dubbogo/triple v1.0.5
+	github.com/dubbogo/triple v1.0.6-0.20210822081945-0b88cc0d10df
 	github.com/emicklei/go-restful/v3 v3.4.0
 	github.com/golang/protobuf v1.5.2
 	github.com/opentracing/opentracing-go v1.2.0
diff --git a/go.sum b/go.sum
index 89d7e37..559bd3c 100644
--- a/go.sum
+++ b/go.sum
@@ -12,8 +12,8 @@ cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqCl
 cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
 cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210821071019-8cb93935d529 h1:bIIKczliDGFh9ZHVwOr5NPZKvbAF5XLNeHRDc2/ifsA=
-dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210821071019-8cb93935d529/go.mod h1:EE3h5Dj/YxLm4hDnMsJ3MI50jHqZ3HJqE6IkdUKg4wc=
+dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210822082425-1bfface3303e h1:TnZXDmootOlIL+DZZkS7opNDwbFG2gT+Z9YeSLwKXy0=
+dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210822082425-1bfface3303e/go.mod h1:quHg7AMGZichyo/h2msHsjregY4oL0lEJlljPbpwgs0=
 github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
 github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
 github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
@@ -21,7 +21,6 @@ github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxB
 github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
 github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
 github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
-github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
@@ -71,7 +70,6 @@ github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN
 github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
-github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
 github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA=
@@ -79,15 +77,11 @@ github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edY
 github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
 github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23 h1:D21IyuvjDCshj1/qq+pCNd3VZOAEI9jy6Bi131YlXgI=
 github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
-github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
 github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
 github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
 github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
-github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40 h1:xvUo53O5MRZhVMJAxWCJcS5HHrqAiAG9SJ1LpMu6aAI=
 github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA=
-github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
 github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
-github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
 github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
@@ -97,13 +91,9 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX
 github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
 github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
 github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
-github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5 h1:xD/lrqdvwsc+O2bjSSi3YqY73Ke3LAiSCx49aCesA0E=
 github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo=
-github.com/cockroachdb/errors v1.2.4 h1:Lap807SXTH5tri2TivECb/4abUkMZC9zRoLarvcKDqs=
 github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA=
-github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY=
 github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI=
-github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w=
 github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
 github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
 github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
@@ -144,17 +134,14 @@ github.com/dubbogo/go-zookeeper v1.0.3 h1:UkuY+rBsxdT7Bs63QAzp9z7XqQ53W1j8E5rwl8
 github.com/dubbogo/go-zookeeper v1.0.3/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c=
 github.com/dubbogo/gost v1.9.0/go.mod h1:pPTjVyoJan3aPxBPNUX0ADkXjPibLo+/Ib0/fADXSG8=
 github.com/dubbogo/gost v1.10.1/go.mod h1:+mQGS51XQEUWZP2JeGZTxJwipjRKtJO7Tr+FOg+72rI=
-github.com/dubbogo/gost v1.11.13/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
 github.com/dubbogo/gost v1.11.16 h1:fvOw8aKQ0BuUYuD+MaXAYFvT7tg2l7WAS5SL5gZJpFs=
 github.com/dubbogo/gost v1.11.16/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
 github.com/dubbogo/jsonparser v1.0.1/go.mod h1:tYAtpctvSP/tWw4MeelsowSPgXQRVHHWbqL6ynps8jU=
 github.com/dubbogo/net v0.0.3 h1:2k53mh+1U8h1gFjJ8ykzyP4wNdAdgjc5moD+xVHI/AE=
 github.com/dubbogo/net v0.0.3/go.mod h1:B6/ka3g8VzcyrmdCH4VkHP1K0aHeI37FmclS+TCwIBU=
-github.com/dubbogo/triple v1.0.1/go.mod h1:O6vQD2XLCWugzAk0P27HTW4+Uhkd8sjaQn0BZijdGzU=
-github.com/dubbogo/triple v1.0.5 h1:bDASS3u0ILC+KaUmWaDDuZ7/pVZcljyO/1TkwXMvcsM=
-github.com/dubbogo/triple v1.0.5/go.mod h1:tCl0mV54+V8Br9z71sFbS1IQUG41QKZUrW6FGaLheM0=
+github.com/dubbogo/triple v1.0.6-0.20210822081945-0b88cc0d10df h1:YSfvAnU0ebwLqWnD+5HTTsFhqA+aE4Si2c10zBsUW7c=
+github.com/dubbogo/triple v1.0.6-0.20210822081945-0b88cc0d10df/go.mod h1:tCl0mV54+V8Br9z71sFbS1IQUG41QKZUrW6FGaLheM0=
 github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
 github.com/dvyukov/go-fuzz v0.0.0-20210429054444-fca39067bc72/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw=
 github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
@@ -171,20 +158,16 @@ github.com/envoyproxy/go-control-plane v0.8.0/go.mod h1:GSSbY9P1neVhdY7G4wu+IK1r
 github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 h1:Ghm4eQYC0nEPnSJdVkTrXpu9KtoVCSo1hg7mtI7G9KU=
 github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw=
 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
 github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
-github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk=
 github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
 github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
 github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
-github.com/frankban/quicktest v1.4.1 h1:Wv2VwvNn73pAdFIVUQRXYDFp31lXKbqblIXo/Q5GPSg=
 github.com/frankban/quicktest v1.4.1/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
-github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JYMGs=
 github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
 github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
@@ -215,7 +198,6 @@ github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+
 github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
 github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
 github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
-github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
 github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
 github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
 github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
@@ -228,7 +210,6 @@ github.com/go-redis/redis v6.15.5+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8w
 github.com/go-resty/resty/v2 v2.3.0 h1:JOOeAvjSlapTT92p8xiS19Zxev1neGikoHsXJeOq8So=
 github.com/go-resty/resty/v2 v2.3.0/go.mod h1:UpN9CgLZNsv4e9XG50UU8xdI0F43UQ4HmxLBDwaroHU=
 github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
-github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=
 github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
@@ -250,7 +231,6 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU
 github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
 github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
@@ -279,14 +259,12 @@ github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8l
 github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
 github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
@@ -304,11 +282,9 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m
 github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
 github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99 h1:twflg0XRTjwKpxb/jFExr4HGq6on2dEOmnL6FV+fgPw=
 github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
 github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
 github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
 github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
 github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
@@ -317,13 +293,10 @@ github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad
 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
 github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
 github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
-github.com/grpc-ecosystem/go-grpc-middleware v1.2.2 h1:FlFbCRLd5Jr4iYXZufAvgWN6Ao0JrI5chLINnUXDDr0=
 github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI=
-github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
 github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
-github.com/grpc-ecosystem/grpc-gateway v1.14.6 h1:8ERzHx8aj1Sc47mu9n/AksaKCSWrMchFtkdrS4BIj5o=
 github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw=
 github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU=
 github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
@@ -357,7 +330,6 @@ github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09
 github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
 github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
 github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
@@ -378,16 +350,13 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt
 github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
 github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ=
 github.com/jackc/pgx v3.6.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
-github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 h1:IPJ3dvxmJ4uczJe5YQdrYB16oTJlGSC/OyZDqUk9xX4=
 github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag=
 github.com/jinzhu/copier v0.0.0-20190625015134-976e0346caa8 h1:mGIXW/lubQ4B+3bXTLxcTMTjUNDqoF6T/HUW9LbFx9s=
 github.com/jinzhu/copier v0.0.0-20190625015134-976e0346caa8/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s=
 github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
 github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
-github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
 github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
-github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=
 github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
 github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
 github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
@@ -399,11 +368,9 @@ github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u
 github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
 github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
-github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
 github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
-github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 h1:uC1QfSlInpQF+M0ao65imhwqKnz3Q2z/d8PWZRMQvDM=
 github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=
 github.com/k0kubun/pp v3.0.1+incompatible h1:3tqvf7QgUnZ5tXO6pNAZlrvHgl6DvifjDrd9g2S9Z40=
 github.com/k0kubun/pp v3.0.1+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg=
@@ -418,15 +385,12 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
 github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
 github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
-github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570 h1:0iQektZGS248WXmGIYOwRXSQhD4qn3icjMpuxwO7qlo=
 github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570/go.mod h1:BLt8L9ld7wVsvEWQbuLrUZnCMnUmLZ+CGDzKtclrTlE=
 github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f h1:sgUSP4zdTUZYZgAGGtN5Lxk92rK+JUFOwf+FT99EEI4=
 github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f/go.mod h1:UGmTpUd3rjbtfIpwAPrcfmGf/Z1HS95TATB+m57TPB8=
@@ -455,7 +419,6 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky
 github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/mattn/go-sqlite3 v2.0.1+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
-github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
 github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
@@ -498,7 +461,6 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE
 github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
 github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
 github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
-github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
 github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
 github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
@@ -514,23 +476,19 @@ github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
 github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
-github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU=
 github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
 github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
 github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
 github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
 github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
 github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
-github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 h1:ZCnq+JUrvXcDVhX/xRolRBZifmabN1HcS1wrPSvxhrU=
 github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA=
 github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
 github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
-github.com/openzipkin/zipkin-go v0.2.2 h1:nY8Hti+WKaP0cRsSeQ026wU03QsM762XBeCXBb9NAWI=
 github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
 github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
 github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
 github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
-github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
 github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
 github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
@@ -545,16 +503,12 @@ github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi
 github.com/pierrec/lz4 v2.2.6+incompatible h1:6aCX4/YZ9v8q69hTyiR7dNLnTA3fgtKHVVW5BCd5Znw=
 github.com/pierrec/lz4 v2.2.6+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
 github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8/go.mod h1:B1+S9LNcuMyLH/4HMTViQOJevkGiik3wW2AN9zb2fNQ=
-github.com/pingcap/check v0.0.0-20200212061837-5e12011dc712 h1:R8gStypOBmpnHEx1qi//SaqxJVI4inOqljg/Aj5/390=
 github.com/pingcap/check v0.0.0-20200212061837-5e12011dc712/go.mod h1:PYMCGwN0JHjoqGr3HrZoD+b8Tgx8bKnArhSq8YVzUMc=
 github.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
 github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
-github.com/pingcap/errors v0.11.5-0.20190809092503-95897b64e011 h1:58naV4XMEqm0hl9LcYo6cZoGBGiLtefMQMF/vo3XLgQ=
 github.com/pingcap/errors v0.11.5-0.20190809092503-95897b64e011/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
 github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8=
-github.com/pingcap/log v0.0.0-20200117041106-d28c14d3b1cd h1:CV3VsP3Z02MVtdpTMfEgRJ4T9NGgGTxdHpJerent7rM=
 github.com/pingcap/log v0.0.0-20200117041106-d28c14d3b1cd/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8=
-github.com/pingcap/parser v0.0.0-20200424075042-8222d8b724a4 h1:1dFbm4zVXWvdwjEdyjMlu1PCxnlxK+JfNq+HhbGjDtc=
 github.com/pingcap/parser v0.0.0-20200424075042-8222d8b724a4/go.mod h1:9v0Edh8IbgjGYW2ArJr19E+bvL8zKahsFp+ixWeId+4=
 github.com/pingcap/tipb v0.0.0-20190428032612-535e1abaa330/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -563,7 +517,6 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
 github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
@@ -574,13 +527,11 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn
 github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
 github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
 github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.9.0 h1:Rrch9mh17XcxvEu9D9DEpb4isxjGBtcevQjKvxPRQIU=
 github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
 github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
 github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
@@ -590,7 +541,6 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8
 github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
 github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
-github.com/prometheus/common v0.15.0 h1:4fgOnadei3EZvgRwxJ7RMpG1k1pOZth5Pc13tyspaKM=
 github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
@@ -599,7 +549,6 @@ github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7z
 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
 github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
 github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4=
 github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
 github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
 github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
@@ -617,7 +566,6 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0
 github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b h1:gQZ0qzfKHQIybLANtM3mBXNUtOfsCFXeTsnBqCsx1KM=
 github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
-github.com/shima-park/agollo v1.2.6 h1:5COt4poF4kWPLE7iean0hsnKZPrDQz9nRLqvU9Qwmi8=
 github.com/shima-park/agollo v1.2.6/go.mod h1:pbHN4SgHDd84eTKyhCvG2LjQ+6mcZq/fEkElxL+oRYk=
 github.com/shirou/gopsutil v3.20.11-0.20201116082039-2fb5da2f2449+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
 github.com/shirou/gopsutil v3.20.11+incompatible h1:LJr4ZQK4mPpIV5gOa4jCOKOGb4ty4DZO54I4FGqIpto=
@@ -627,15 +575,11 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
-github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
 github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
-github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
-github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
-github.com/soheilhy/cmux v0.1.5-0.20210205191134-5ec6847320e5 h1:GJTW+uNMIV1RKwox+T4aN0/sQlYRg78uHZf2H0aBcDw=
 github.com/soheilhy/cmux v0.1.5-0.20210205191134-5ec6847320e5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0=
 github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
 github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
@@ -663,7 +607,6 @@ github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3
 github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
 github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
 github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
@@ -671,27 +614,20 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
 github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
-github.com/tebeka/strftime v0.1.3 h1:5HQXOqWKYRFfNyBMNVc9z5+QzuBtIXy03psIhtdJYto=
 github.com/tebeka/strftime v0.1.3/go.mod h1:7wJm3dZlpr4l/oVK0t1HYIc4rMzQ2XJlOMIUJUJH6XQ=
-github.com/tevid/gohamcrest v1.1.1 h1:ou+xSqlIw1xfGTg1uq1nif/htZ2S3EzRqLm2BP+tYU0=
 github.com/tevid/gohamcrest v1.1.1/go.mod h1:3UvtWlqm8j5JbwYZh80D/PVBt0mJ1eJiYgZMibh0H/k=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
-github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 h1:uruHq4dN7GR16kFc5fp3d1RIYzJW5onx8Ybykw2YQFA=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/toolkits/concurrent v0.0.0-20150624120057-a4371d70e3e3 h1:kF/7m/ZU+0D4Jj5eZ41Zm3IH/J8OElK1Qtd7tVKAwLk=
 github.com/toolkits/concurrent v0.0.0-20150624120057-a4371d70e3e3/go.mod h1:QDlpd3qS71vYtakd2hmdpqhJ9nwv6mD6A30bQ1BPBFE=
-github.com/transaction-wg/seata-golang v0.2.0 h1:Thoe2omQUiwE/uSKNj4Hr4JMoSaeFxU0Q/it5hvHd88=
 github.com/transaction-wg/seata-golang v0.2.0/go.mod h1:L9vMoZxvLX4BuXQ13vFPCwFfXRLP0Bhr97z+6jm49Dw=
 github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
-github.com/uber/jaeger-client-go v2.22.1+incompatible h1:NHcubEkVbahf9t3p75TOCR83gdUHXjRJvjoBh1yACsM=
 github.com/uber/jaeger-client-go v2.22.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
-github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw=
 github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
 github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
 github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
@@ -703,7 +639,6 @@ github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxW
 github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
 github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
 github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ=
-github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -714,21 +649,17 @@ github.com/zouyx/agollo/v3 v3.4.5 h1:7YCxzY9ZYaH9TuVUBvmI6Tk0mwMggikah+cfbYogcHQ
 github.com/zouyx/agollo/v3 v3.4.5/go.mod h1:LJr3kDmm23QSW+F1Ol4TMHDa7HvJvscMdVxJ2IpUTVc=
 go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
-go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0=
 go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
 go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0=
 go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
 go.etcd.io/etcd/api/v3 v3.5.0-alpha.0 h1:+e5nrluATIy3GP53znpkHMFzPTHGYyzvJGFCbuI6ZLc=
 go.etcd.io/etcd/api/v3 v3.5.0-alpha.0/go.mod h1:mPcW6aZJukV6Aa81LSKpBjQXTWlXB5r74ymPoSWa3Sw=
-go.etcd.io/etcd/client/v2 v2.305.0-alpha.0 h1:jZepGpOeJATxsbMNBZczDS2jHdK/QVHM1iPe9jURJ8o=
 go.etcd.io/etcd/client/v2 v2.305.0-alpha.0/go.mod h1:kdV+xzCJ3luEBSIeQyB/OEKkWKd8Zkux4sbDeANrosU=
 go.etcd.io/etcd/client/v3 v3.5.0-alpha.0 h1:dr1EOILak2pu4Nf5XbRIOCNIBjcz6UmkQd7hHRXwxaM=
 go.etcd.io/etcd/client/v3 v3.5.0-alpha.0/go.mod h1:wKt7jgDgf/OfKiYmCq5WFGxOFAkVMLxiiXgLDFhECr8=
 go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0 h1:3yLUEC0nFCxw/RArImOyRUI4OAFbg4PFpBbAhSNzKNY=
 go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0/go.mod h1:tV31atvwzcybuqejDoY3oaNRTtlD2l/Ot78Pc9w7DMY=
-go.etcd.io/etcd/raft/v3 v3.5.0-alpha.0 h1:DvYJotxV9q1Lkn7pknzAbFO/CLtCVidCr2K9qRLJ8pA=
 go.etcd.io/etcd/raft/v3 v3.5.0-alpha.0/go.mod h1:FAwse6Zlm5v4tEWZaTjmNhe17Int4Oxbu7+2r0DiD3w=
-go.etcd.io/etcd/server/v3 v3.5.0-alpha.0 h1:fYv7CmmdyuIu27UmKQjS9K/1GtcCa+XnPKqiKBbQkrk=
 go.etcd.io/etcd/server/v3 v3.5.0-alpha.0/go.mod h1:tsKetYpt980ZTpzl/gb+UOJj9RkIyCb1u4wjzMg90BQ=
 go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
 go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
@@ -746,7 +677,6 @@ go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+
 go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
 go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A=
 go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
-go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
 go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
 go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
 go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
@@ -785,7 +715,6 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl
 golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=
 golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
 golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
 golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
@@ -794,7 +723,6 @@ golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -830,7 +758,6 @@ golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -899,7 +826,6 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
 golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -934,12 +860,10 @@ golang.org/x/tools v0.0.0-20200325203130-f53864d0dba1/go.mod h1:Sl4aGygMT6LrqrWc
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20200928182047-19e03678916f/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
 golang.org/x/tools v0.0.0-20201014170642-d1624618ad65/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
 google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
@@ -952,7 +876,6 @@ google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I=
 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -1009,20 +932,17 @@ gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUy
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
-gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM=
 gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
 gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
 gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
-gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
 gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
 gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
 gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
@@ -1038,9 +958,7 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
 gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
 honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -1048,14 +966,11 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh
 honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
-honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 istio.io/gogo-genproto v0.0.0-20190124151557-6d926a6e6feb/go.mod h1:eIDJ6jNk/IeJz6ODSksHl5Aiczy5JUq6vFhJWI5OtiI=
-k8s.io/api v0.16.9 h1:3vCx0WX9qcg1Hv4aQ/G1tiIKectGVuimvPVTJU4VOCA=
 k8s.io/api v0.16.9/go.mod h1:Y7dZNHs1Xy0mSwSlzL9QShi6qkljnN41yR8oWCRTDe8=
 k8s.io/apimachinery v0.16.9 h1:ESUZ4hMBUKF2kn2HBFL5zM/wQv4j/0uRbR7AjgqGJ4o=
 k8s.io/apimachinery v0.16.9/go.mod h1:Xk2vD2TRRpuWYLQNM6lT9R7DSFZUYG03SarNkbGrnKE=
-k8s.io/client-go v0.16.9 h1:6Eh4lMDxFtDzBkqid1AOL3bQ/pPYrulx8l23DXw4mRU=
 k8s.io/client-go v0.16.9/go.mod h1:ThjPlh7Kx+XoBFOCt775vx5J7atwY7F/zaFzTco5gL0=
 k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
 k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
@@ -1064,17 +979,13 @@ k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
 k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
 k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
 k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
-k8s.io/utils v0.0.0-20190801114015-581e00157fb1 h1:+ySTxfHnfzZb9ys375PXNlLhkJPLKgHajBU0N62BDvE=
 k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
 sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
 sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
-sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
 sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
-vimagination.zapto.org/byteio v0.0.0-20200222190125-d27cba0f0b10 h1:pxt6fVJP67Hxo1qk8JalUghLlk3abYByl+3e0JYfUlE=
 vimagination.zapto.org/byteio v0.0.0-20200222190125-d27cba0f0b10/go.mod h1:fl9OF22g6MTKgvHA1hqMXe/L7+ULWofVTwbC9loGu7A=
-vimagination.zapto.org/memio v0.0.0-20200222190306-588ebc67b97d h1:Mp6WiHHuiwHaknxTdxJ8pvC9/B4pOgW1PamKGexG7Fs=
 vimagination.zapto.org/memio v0.0.0-20200222190306-588ebc67b97d/go.mod h1:zHGDKp2tyvF4IAfLti4pKYqCJucXYmmKMb3UMrCHK/4=
 xorm.io/builder v0.3.6/go.mod h1:LEFAPISnRzG+zxaxj2vPicRwz67BdhFreKg8yv8/TgU=
 xorm.io/core v0.7.2-0.20190928055935-90aeac8d08eb/go.mod h1:jJfd0UAEzZ4t87nbQYtVjmqpIODugN6PD2D9E+dJvdM=
diff --git a/config-api/go-server/docker/docker-compose.yml b/integrate_test/config-api/configcenter/docker/docker-compose.yml
similarity index 100%
rename from config-api/go-server/docker/docker-compose.yml
rename to integrate_test/config-api/configcenter/docker/docker-compose.yml
diff --git a/config-api/go-server/tests/integration/main_test.go b/integrate_test/config-api/configcenter/tests/integration/main_test.go
similarity index 75%
copy from config-api/go-server/tests/integration/main_test.go
copy to integrate_test/config-api/configcenter/tests/integration/main_test.go
index d028c55..d8a0568 100644
--- a/config-api/go-server/tests/integration/main_test.go
+++ b/integrate_test/config-api/configcenter/tests/integration/main_test.go
@@ -20,7 +20,6 @@
 package integration
 
 import (
-	"context"
 	"os"
 	"testing"
 	"time"
@@ -36,36 +35,18 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+)
 
-	hessian "github.com/apache/dubbo-go-hessian2"
+import (
+	dubbo3pb "github.com/apache/dubbo-go-samples/api"
 )
 
-var userProvider = new(UserProvider)
+var greeterProvider = new(dubbo3pb.GreeterClientImpl)
 
 func TestMain(m *testing.M) {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&User{})
+	config.SetConsumerService(greeterProvider)
 	config.Load()
 	time.Sleep(3 * time.Second)
 
 	os.Exit(m.Run())
 }
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/config-api/go-server/tests/integration/userprovider_test.go b/integrate_test/config-api/configcenter/tests/integration/userprovider_test.go
similarity index 67%
rename from config-api/go-server/tests/integration/userprovider_test.go
rename to integrate_test/config-api/configcenter/tests/integration/userprovider_test.go
index 7183e64..992c55d 100644
--- a/config-api/go-server/tests/integration/userprovider_test.go
+++ b/integrate_test/config-api/configcenter/tests/integration/userprovider_test.go
@@ -28,12 +28,24 @@ import (
 	"github.com/stretchr/testify/assert"
 )
 
-func TestGetUser(t *testing.T) {
-	user := &User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
+import (
+	dubbo3pb "github.com/apache/dubbo-go-samples/api"
+)
+
+func TestSayHello(t *testing.T) {
+	req := &dubbo3pb.HelloRequest{
+		Name: "laurence",
+	}
+
+	reply := &dubbo3pb.User{}
+
+	ctx := context.Background()
+	ctx = context.WithValue(ctx, "tri-req-id", "test_value_XXXXXXXX")
+
+	err := greeterProvider.SayHello(ctx, req, reply)
+
 	assert.Nil(t, err)
-	assert.Equal(t, "A001", user.ID)
-	assert.Equal(t, "Alex Stocks", user.Name)
-	assert.Equal(t, int32(18), user.Age)
-	assert.NotNil(t, user.Time)
+	assert.Equal(t, "Hello laurence", reply.Name)
+	assert.Equal(t, "12345", reply.Id)
+	assert.Equal(t, int32(21), reply.Age)
 }
diff --git a/context/go-server/docker/docker-compose.yml b/integrate_test/config-api/rpc/triple/docker/docker-compose.yml
similarity index 100%
copy from context/go-server/docker/docker-compose.yml
copy to integrate_test/config-api/rpc/triple/docker/docker-compose.yml
diff --git a/config-api/go-server/tests/integration/main_test.go b/integrate_test/config-api/rpc/triple/tests/integration/main_test.go
similarity index 75%
rename from config-api/go-server/tests/integration/main_test.go
rename to integrate_test/config-api/rpc/triple/tests/integration/main_test.go
index d028c55..d8a0568 100644
--- a/config-api/go-server/tests/integration/main_test.go
+++ b/integrate_test/config-api/rpc/triple/tests/integration/main_test.go
@@ -20,7 +20,6 @@
 package integration
 
 import (
-	"context"
 	"os"
 	"testing"
 	"time"
@@ -36,36 +35,18 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+)
 
-	hessian "github.com/apache/dubbo-go-hessian2"
+import (
+	dubbo3pb "github.com/apache/dubbo-go-samples/api"
 )
 
-var userProvider = new(UserProvider)
+var greeterProvider = new(dubbo3pb.GreeterClientImpl)
 
 func TestMain(m *testing.M) {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&User{})
+	config.SetConsumerService(greeterProvider)
 	config.Load()
 	time.Sleep(3 * time.Second)
 
 	os.Exit(m.Run())
 }
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/config-api/go-client/pkg/user.go b/integrate_test/config-api/rpc/triple/tests/integration/userprovider_test.go
similarity index 59%
rename from config-api/go-client/pkg/user.go
rename to integrate_test/config-api/rpc/triple/tests/integration/userprovider_test.go
index 7733ea4..992c55d 100644
--- a/config-api/go-client/pkg/user.go
+++ b/integrate_test/config-api/rpc/triple/tests/integration/userprovider_test.go
@@ -1,3 +1,5 @@
+// +build integration
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -15,28 +17,35 @@
  * limitations under the License.
  */
 
-package pkg
+package integration
 
 import (
 	"context"
-	"time"
+	"testing"
 )
 
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
+import (
+	"github.com/stretchr/testify/assert"
+)
 
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
+import (
+	dubbo3pb "github.com/apache/dubbo-go-samples/api"
+)
 
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
+func TestSayHello(t *testing.T) {
+	req := &dubbo3pb.HelloRequest{
+		Name: "laurence",
+	}
+
+	reply := &dubbo3pb.User{}
+
+	ctx := context.Background()
+	ctx = context.WithValue(ctx, "tri-req-id", "test_value_XXXXXXXX")
+
+	err := greeterProvider.SayHello(ctx, req, reply)
 
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
+	assert.Nil(t, err)
+	assert.Equal(t, "Hello laurence", reply.Name)
+	assert.Equal(t, "12345", reply.Id)
+	assert.Equal(t, int32(21), reply.Age)
 }
diff --git a/configcenter/nacos/go-server/conf/client.yml b/integrate_test/configcenter/nacos/conf/client.yml
similarity index 100%
rename from configcenter/nacos/go-server/conf/client.yml
rename to integrate_test/configcenter/nacos/conf/client.yml
diff --git a/configcenter/nacos/go-server/conf/log.yml b/integrate_test/configcenter/nacos/conf/log.yml
similarity index 100%
rename from configcenter/nacos/go-server/conf/log.yml
rename to integrate_test/configcenter/nacos/conf/log.yml
diff --git a/configcenter/nacos/go-server/conf/server.yml b/integrate_test/configcenter/nacos/conf/server.yml
similarity index 100%
rename from configcenter/nacos/go-server/conf/server.yml
rename to integrate_test/configcenter/nacos/conf/server.yml
diff --git a/configcenter/nacos/go-server/docker/docker-compose.yml b/integrate_test/configcenter/nacos/docker/docker-compose.yml
similarity index 100%
rename from configcenter/nacos/go-server/docker/docker-compose.yml
rename to integrate_test/configcenter/nacos/docker/docker-compose.yml
diff --git a/configcenter/nacos/go-server/docker/docker-health-check.sh b/integrate_test/configcenter/nacos/docker/docker-health-check.sh
similarity index 100%
rename from configcenter/nacos/go-server/docker/docker-health-check.sh
rename to integrate_test/configcenter/nacos/docker/docker-health-check.sh
diff --git a/configcenter/nacos/go-server/tests/integration/main_test.go b/integrate_test/configcenter/nacos/tests/integration/main_test.go
similarity index 100%
rename from configcenter/nacos/go-server/tests/integration/main_test.go
rename to integrate_test/configcenter/nacos/tests/integration/main_test.go
diff --git a/configcenter/nacos/go-server/tests/integration/userprovider_test.go b/integrate_test/configcenter/nacos/tests/integration/userprovider_test.go
similarity index 100%
rename from configcenter/nacos/go-server/tests/integration/userprovider_test.go
rename to integrate_test/configcenter/nacos/tests/integration/userprovider_test.go
diff --git a/context/go-server/conf/client.yml b/integrate_test/context/dubbo/conf/client.yml
similarity index 100%
rename from context/go-server/conf/client.yml
rename to integrate_test/context/dubbo/conf/client.yml
diff --git a/config-api/go-server/conf/log.yml b/integrate_test/context/dubbo/conf/log.yml
similarity index 100%
rename from config-api/go-server/conf/log.yml
rename to integrate_test/context/dubbo/conf/log.yml
diff --git a/context/go-server/conf/server.yml b/integrate_test/context/dubbo/conf/server.yml
similarity index 100%
rename from context/go-server/conf/server.yml
rename to integrate_test/context/dubbo/conf/server.yml
diff --git a/context/go-server/pkg/user.go b/integrate_test/context/dubbo/pkg/user.go
similarity index 100%
rename from context/go-server/pkg/user.go
rename to integrate_test/context/dubbo/pkg/user.go
diff --git a/context/go-server/tests/integration/main_test.go b/integrate_test/context/dubbo/tests/integration/main_test.go
similarity index 100%
rename from context/go-server/tests/integration/main_test.go
rename to integrate_test/context/dubbo/tests/integration/main_test.go
diff --git a/context/go-server/tests/integration/userprovider_test.go b/integrate_test/context/dubbo/tests/integration/userprovider_test.go
similarity index 100%
rename from context/go-server/tests/integration/userprovider_test.go
rename to integrate_test/context/dubbo/tests/integration/userprovider_test.go
diff --git a/context/go-server/docker/docker-compose.yml b/integrate_test/helloworld/docker/docker-compose.yml~merged
similarity index 100%
copy from context/go-server/docker/docker-compose.yml
copy to integrate_test/helloworld/docker/docker-compose.yml~merged
diff --git a/context/go-server/docker/docker-compose.yml b/integrate_test/registry/zookeeper/docker/docker-compose.yml~merged
similarity index 100%
copy from context/go-server/docker/docker-compose.yml
copy to integrate_test/registry/zookeeper/docker/docker-compose.yml~merged
diff --git a/config-api/go-server/docker/docker-health-check.sh b/integrate_test/registry/zookeeper/docker/docker-health-check.sh~merged
similarity index 100%
rename from config-api/go-server/docker/docker-health-check.sh
rename to integrate_test/registry/zookeeper/docker/docker-health-check.sh~merged
diff --git a/context/go-server/docker/docker-compose.yml b/rpc/dubbo/go-server/docker/docker-compose.yml~merged
similarity index 100%
copy from context/go-server/docker/docker-compose.yml
copy to rpc/dubbo/go-server/docker/docker-compose.yml~merged
diff --git a/context/go-server/docker/docker-health-check.sh b/rpc/dubbo/go-server/docker/docker-health-check.sh~merged
similarity index 100%
rename from context/go-server/docker/docker-health-check.sh
rename to rpc/dubbo/go-server/docker/docker-health-check.sh~merged
diff --git a/context/go-server/docker/docker-compose.yml b/rpc/dubbo3/codec-extension/go-server/docker/docker-compose.yml~merged
similarity index 100%
copy from context/go-server/docker/docker-compose.yml
copy to rpc/dubbo3/codec-extension/go-server/docker/docker-compose.yml~merged
diff --git a/context/go-server/docker/docker-compose.yml b/rpc/dubbo3/hessian2/go-server/docker/docker-compose.yml~merged
similarity index 100%
copy from context/go-server/docker/docker-compose.yml
copy to rpc/dubbo3/hessian2/go-server/docker/docker-compose.yml~merged
diff --git a/context/go-server/docker/docker-compose.yml b/rpc/dubbo3/msgpack/go-server/docker/docker-compose.yml~merged
similarity index 100%
copy from context/go-server/docker/docker-compose.yml
copy to rpc/dubbo3/msgpack/go-server/docker/docker-compose.yml~merged
diff --git a/context/go-server/docker/docker-compose.yml b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/docker/docker-compose.yml~merged
similarity index 100%
copy from context/go-server/docker/docker-compose.yml
copy to rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/docker/docker-compose.yml~merged
diff --git a/context/go-server/docker/docker-compose.yml b/rpc/dubbo3/pb/dubbogo-java/go-server/docker/docker-compose.yml~merged
similarity index 100%
copy from context/go-server/docker/docker-compose.yml
copy to rpc/dubbo3/pb/dubbogo-java/go-server/docker/docker-compose.yml~merged
diff --git a/config-api/go-client/conf/log.yml b/rpc/grpc/go-client/conf/log.yml~merged
similarity index 100%
rename from config-api/go-client/conf/log.yml
rename to rpc/grpc/go-client/conf/log.yml~merged
diff --git a/context/go-server/conf/log.yml b/rpc/grpc/go-server/conf/log.yml~merged
similarity index 100%
rename from context/go-server/conf/log.yml
rename to rpc/grpc/go-server/conf/log.yml~merged
diff --git a/context/go-server/docker/docker-compose.yml b/rpc/rest/go-client/docker/docker-compose.yml~merged
similarity index 100%
copy from context/go-server/docker/docker-compose.yml
copy to rpc/rest/go-client/docker/docker-compose.yml~merged
diff --git a/context/go-server/docker/docker-compose.yml b/rpc/rest/go-server/docker/docker-compose.yml~merged
similarity index 100%
rename from context/go-server/docker/docker-compose.yml
rename to rpc/rest/go-server/docker/docker-compose.yml~merged

[dubbo-go-samples] 06/14: update triple user api to standard, add hessian2 samples (#211)

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git

commit 1320da55ef88da7b6716203843b4ef38b256cd5b
Author: Laurence <45...@users.noreply.github.com>
AuthorDate: Thu Aug 26 22:23:04 2021 +0800

    update triple user api to standard, add hessian2 samples  (#211)
    
    * fix
    
    * fix: init helloworld and registry zk
    
    * fix: change general to rpc
    
    * fix: add some samples
    
    * fix: update triple user api to standard, add hessian2 samples
---
 .run/triple/triplego-hessian-client.run.xml        |  15 ---
 .run/triple/triplego-hessian-server.run.xml        |   3 +-
 api/samples_api.pb.go                              |  13 +-
 config-api/configcenter/go-client/cmd/client.go    |   4 +-
 config-api/configcenter/go-server/cmd/server.go    |   2 +-
 config-api/rpc/triple/go-client/cmd/client.go      |   4 +-
 configcenter/nacos/go-client/cmd/client.go         |   4 +-
 context/dubbo/go-client/cmd/client.go              |   5 +-
 context/dubbo/go-server/cmd/server.go              |   5 +-
 context/triple/go-client/cmd/client.go             |   3 +-
 context/triple/go-server/cmd/server.go             |   1 +
 game/go-server-game/cmd/server.go                  |  16 +--
 game/go-server-game/tests/integration/main_test.go |   1 +
 game/go-server-gate/cmd/server.go                  |   1 +
 generic/protobufjson/go-client/cmd/client.go       |   9 +-
 generic/protobufjson/go-server/cmd/server.go       |   8 +-
 generic/protobufjson/go-server/pkg/user.pb.go      |   8 +-
 .../go-server/tests/integration/main_test.go       |  12 +-
 .../tests/integration/userprovider_test.go         |   5 +-
 go.mod                                             |  15 ++-
 go.sum                                             | 134 +++++++++++++++++++
 helloworld/go-client/cmd/client.go                 |   4 +-
 helloworld/go-server/cmd/server.go                 |   1 +
 .../rpc/hessian2}/conf/client.yml                  |   0
 .../rpc/hessian2}/conf/log.yml                     |   0
 .../rpc/hessian2}/conf/server.yml                  |   0
 .../rpc/hessian2}/docker/docker-compose.yml        |   0
 .../rpc/hessian2}/docker/docker-compose.yml~merged |   0
 .../rpc/hessian2}/docker/docker-health-check.sh    |   0
 .../rpc/hessian2}/tests/integration/main_test.go   |   0
 .../tests/integration/userprovider_test.go         |   0
 .../go-server-hz/tests/integration/main_test.go    |   1 +
 .../tests/integration/userprovider_test.go         |   1 +
 .../go-server-sh/tests/integration/main_test.go    |   1 +
 .../tests/integration/userprovider_test.go         |   1 +
 .../servicediscovery/etcd/go-client/cmd/client.go  |   2 +
 .../servicediscovery/etcd/go-server/cmd/server.go  |   4 +-
 .../servicediscovery/etcd/go-server/pkg/user.go    |   7 +-
 .../etcd/go-server/tests/integration/main_test.go  |  15 ++-
 .../tests/integration/userprovider_test.go         |   1 +
 registry/zookeeper/go-client/cmd/client.go         |   4 +-
 rpc/dubbo/go-client/pkg/user.go                    |  10 +-
 rpc/dubbo3/hessian2/go-client/cmd/client.go        | 142 ++++++++++++++++++---
 .../hessian2/go-client/cmd/complex_service.go      |  66 ++++++++++
 .../hessian2/go-client/cmd/simple_service.go       |  19 +++
 rpc/dubbo3/hessian2/go-client/conf/client.yml      |  32 -----
 rpc/dubbo3/hessian2/go-client/conf/dubbogo.yml     |  18 +++
 rpc/dubbo3/hessian2/go-client/conf/log.yml         |  27 ----
 rpc/dubbo3/hessian2/go-client/pkg/hello.go         |  40 ------
 .../hessian2/go-server/cmd/complex_service.go      | 104 +++++++++++++++
 rpc/dubbo3/hessian2/go-server/cmd/server.go        |  27 ++--
 .../hessian2/go-server/cmd/simple_service.go       |  29 +++++
 rpc/dubbo3/hessian2/go-server/conf/dubbogo.yml     |  22 ++++
 rpc/dubbo3/hessian2/go-server/pkg/greeter.go       |  57 ---------
 rpc/dubbo3/hessian2/java-client/pom.xml            |   2 +-
 .../com/apache/dubbo/sample/basic/ApiConsumer.java |  54 +++++---
 .../com/apache/dubbo/sample/basic/ComplexData.java |  21 +++
 .../apache/dubbo/sample/basic/ComplexProvider.java |  11 ++
 rpc/dubbo3/hessian2/java-server/pom.xml            |   2 +-
 .../com/apache/dubbo/sample/basic/ApiProvider.java |   6 +-
 .../com/apache/dubbo/sample/basic/ComplexData.java |  37 ++++++
 .../apache/dubbo/sample/basic/ComplexProvider.java |  10 ++
 .../dubbo/sample/basic/ComplexProviderImpl.java    |  35 +++++
 .../pb/dubbogo-grpc/server/grpcgo-server/main.go   |   1 -
 .../pb/dubbogo-java/protobuf/helloworld.pb.go      |   1 -
 .../dubbo/go-server/tests/integration/main_test.go |   6 +-
 .../tests/integration/userprovider_test.go         |   9 +-
 tracing/grpc/go-server/app/helloworld.pb.go        |   4 +-
 68 files changed, 795 insertions(+), 307 deletions(-)

diff --git a/.run/triple/triplego-hessian-client.run.xml b/.run/triple/triplego-hessian-client.run.xml
deleted file mode 100644
index 542d476..0000000
--- a/.run/triple/triplego-hessian-client.run.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="triplego-hessian-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="triple">
-    <module name="dubbo-go-samples" />
-    <working_directory value="$PROJECT_DIR$" />
-    <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/hessian2/go-client/conf/log.yml" />
-      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/hessian2/go-client/conf/client.yml" />
-    </envs>
-    <kind value="PACKAGE" />
-    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/hessian2/go-client/cmd" />
-    <directory value="$PROJECT_DIR$" />
-    <filePath value="$PROJECT_DIR$/general/dubbo3/hessian2/go-client/cmd/client.go" />
-    <method v="2" />
-  </configuration>
-</component>
\ No newline at end of file
diff --git a/.run/triple/triplego-hessian-server.run.xml b/.run/triple/triplego-hessian-server.run.xml
index 5d0d252..2d43990 100644
--- a/.run/triple/triplego-hessian-server.run.xml
+++ b/.run/triple/triplego-hessian-server.run.xml
@@ -3,8 +3,7 @@
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$//general/dubbo3/hessian2/go-server/conf/log.yml" />
-      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/hessian2/go-server/conf/server.yml" />
+      <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/rpc/dubbo3/hessian2/go-server/conf/dubbogo.yml" />
     </envs>
     <kind value="PACKAGE" />
     <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/hessian2/go-server/cmd" />
diff --git a/api/samples_api.pb.go b/api/samples_api.pb.go
index cf48c46..5451e2c 100644
--- a/api/samples_api.pb.go
+++ b/api/samples_api.pb.go
@@ -6,10 +6,6 @@ package api
 import (
 	context "context"
 	fmt "fmt"
-	proto "github.com/golang/protobuf/proto"
-	grpc "google.golang.org/grpc"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 	math "math"
 )
 
@@ -17,8 +13,15 @@ import (
 	"dubbo.apache.org/dubbo-go/v3/protocol"
 	dgrpc "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
 	"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
+
 	tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
 	dubbo3 "github.com/dubbogo/triple/pkg/triple"
+
+	proto "github.com/golang/protobuf/proto"
+
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
 )
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -171,7 +174,7 @@ func (c *greeterDubbo3Client) SayHello(ctx context.Context, in *HelloRequest, op
 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
 type GreeterClientImpl struct {
 	// Sends a greeting
-	SayHello func(ctx context.Context, in *HelloRequest, out *User) error
+	SayHello func(ctx context.Context, in *HelloRequest) (*User, error)
 }
 
 func (c *GreeterClientImpl) Reference() string {
diff --git a/config-api/configcenter/go-client/cmd/client.go b/config-api/configcenter/go-client/cmd/client.go
index 823642a..827a88f 100644
--- a/config-api/configcenter/go-client/cmd/client.go
+++ b/config-api/configcenter/go-client/cmd/client.go
@@ -58,8 +58,8 @@ func main() {
 	req := &api.HelloRequest{
 		Name: "laurence",
 	}
-	reply := &api.User{}
-	if err := grpcGreeterImpl.SayHello(context.Background(), req, reply); err != nil {
+	reply, err := grpcGreeterImpl.SayHello(context.Background(), req)
+	if err != nil {
 		logger.Error(err)
 	}
 	logger.Infof("client response result: %v\n", reply)
diff --git a/config-api/configcenter/go-server/cmd/server.go b/config-api/configcenter/go-server/cmd/server.go
index 0b511ac..4f3a374 100644
--- a/config-api/configcenter/go-server/cmd/server.go
+++ b/config-api/configcenter/go-server/cmd/server.go
@@ -19,11 +19,11 @@ package main
 
 import (
 	"context"
-	"dubbo.apache.org/dubbo-go/v3/config"
 )
 
 import (
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
+	"dubbo.apache.org/dubbo-go/v3/config"
 	_ "dubbo.apache.org/dubbo-go/v3/imports"
 )
 
diff --git a/config-api/rpc/triple/go-client/cmd/client.go b/config-api/rpc/triple/go-client/cmd/client.go
index c17c6ba..827bba1 100644
--- a/config-api/rpc/triple/go-client/cmd/client.go
+++ b/config-api/rpc/triple/go-client/cmd/client.go
@@ -65,8 +65,8 @@ func main() {
 	req := &api.HelloRequest{
 		Name: "laurence",
 	}
-	reply := &api.User{}
-	if err := tripleGreeterImpl.SayHello(context.Background(), req, reply); err != nil {
+	reply, err := tripleGreeterImpl.SayHello(context.Background(), req)
+	if err != nil {
 		logger.Error(err)
 	}
 	logger.Infof("client response result: %v\n", reply)
diff --git a/configcenter/nacos/go-client/cmd/client.go b/configcenter/nacos/go-client/cmd/client.go
index 68fe2c0..2c0c7ad 100644
--- a/configcenter/nacos/go-client/cmd/client.go
+++ b/configcenter/nacos/go-client/cmd/client.go
@@ -47,8 +47,8 @@ func main() {
 	req := &api.HelloRequest{
 		Name: "laurence",
 	}
-	reply := &api.User{}
-	if err := grpcGreeterImpl.SayHello(context.Background(), req, reply); err != nil {
+	reply, err := grpcGreeterImpl.SayHello(context.Background(), req)
+	if err != nil {
 		logger.Error(err)
 	}
 	logger.Infof("client response result: %v\n", reply)
diff --git a/context/dubbo/go-client/cmd/client.go b/context/dubbo/go-client/cmd/client.go
index b1a62d9..f6fd0a2 100644
--- a/context/dubbo/go-client/cmd/client.go
+++ b/context/dubbo/go-client/cmd/client.go
@@ -19,7 +19,6 @@ package main
 
 import (
 	"context"
-	pkg2 "github.com/apache/dubbo-go-samples/context/dubbo/go-client/pkg"
 	"os"
 	"time"
 )
@@ -40,6 +39,10 @@ import (
 	"github.com/dubbogo/gost/log"
 )
 
+import (
+	pkg2 "github.com/apache/dubbo-go-samples/context/dubbo/go-client/pkg"
+)
+
 var userProvider = new(pkg2.UserProvider)
 
 func init() {
diff --git a/context/dubbo/go-server/cmd/server.go b/context/dubbo/go-server/cmd/server.go
index b72dec1..8586f22 100644
--- a/context/dubbo/go-server/cmd/server.go
+++ b/context/dubbo/go-server/cmd/server.go
@@ -19,7 +19,6 @@ package main
 
 import (
 	"fmt"
-	pkg2 "github.com/apache/dubbo-go-samples/context/dubbo/go-server/pkg"
 	"os"
 	"os/signal"
 	"syscall"
@@ -40,6 +39,10 @@ import (
 	hessian "github.com/apache/dubbo-go-hessian2"
 )
 
+import (
+	pkg2 "github.com/apache/dubbo-go-samples/context/dubbo/go-server/pkg"
+)
+
 var (
 	survivalTimeout = int(3e9)
 )
diff --git a/context/triple/go-client/cmd/client.go b/context/triple/go-client/cmd/client.go
index da318b6..f3f19d3 100644
--- a/context/triple/go-client/cmd/client.go
+++ b/context/triple/go-client/cmd/client.go
@@ -19,7 +19,6 @@ package main
 
 import (
 	"context"
-	tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
 	"time"
 )
 
@@ -27,6 +26,8 @@ import (
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/config"
 	_ "dubbo.apache.org/dubbo-go/v3/imports"
+
+	tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
 )
 
 import (
diff --git a/context/triple/go-server/cmd/server.go b/context/triple/go-server/cmd/server.go
index cf1fe46..fdd3916 100644
--- a/context/triple/go-server/cmd/server.go
+++ b/context/triple/go-server/cmd/server.go
@@ -25,6 +25,7 @@ import (
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/config"
 	_ "dubbo.apache.org/dubbo-go/v3/imports"
+
 	tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
 )
 
diff --git a/game/go-server-game/cmd/server.go b/game/go-server-game/cmd/server.go
index e0853a8..e45b268 100755
--- a/game/go-server-game/cmd/server.go
+++ b/game/go-server-game/cmd/server.go
@@ -5,26 +5,24 @@ import (
 	"os/signal"
 	"syscall"
 	"time"
+)
 
-	hessian "github.com/apache/dubbo-go-hessian2"
-
+import (
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
-
 	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
-
 	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-
 	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/local"
-
 	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+
+	hessian "github.com/apache/dubbo-go-hessian2"
+)
+
+import (
 	"github.com/apache/dubbo-go-samples/game/go-server-game/pkg"
 	"github.com/apache/dubbo-go-samples/game/pkg/pojo"
 )
diff --git a/game/go-server-game/tests/integration/main_test.go b/game/go-server-game/tests/integration/main_test.go
index 057d58f..dc7a38e 100755
--- a/game/go-server-game/tests/integration/main_test.go
+++ b/game/go-server-game/tests/integration/main_test.go
@@ -16,6 +16,7 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+
 	hessian "github.com/apache/dubbo-go-hessian2"
 )
 
diff --git a/game/go-server-gate/cmd/server.go b/game/go-server-gate/cmd/server.go
index 976445c..5fd64fc 100755
--- a/game/go-server-gate/cmd/server.go
+++ b/game/go-server-gate/cmd/server.go
@@ -23,6 +23,7 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+
 	hessian "github.com/apache/dubbo-go-hessian2"
 )
 
diff --git a/generic/protobufjson/go-client/cmd/client.go b/generic/protobufjson/go-client/cmd/client.go
index b2964cf..146cbb4 100644
--- a/generic/protobufjson/go-client/cmd/client.go
+++ b/generic/protobufjson/go-client/cmd/client.go
@@ -27,11 +27,6 @@ import (
 )
 
 import (
-	hessian "github.com/apache/dubbo-go-hessian2"
-	"github.com/dubbogo/gost/log"
-)
-
-import (
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
@@ -41,6 +36,10 @@ import (
 	"dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+
+	hessian "github.com/apache/dubbo-go-hessian2"
+
+	"github.com/dubbogo/gost/log"
 )
 
 var (
diff --git a/generic/protobufjson/go-server/cmd/server.go b/generic/protobufjson/go-server/cmd/server.go
index 87a9d5f..5d78ee0 100644
--- a/generic/protobufjson/go-server/cmd/server.go
+++ b/generic/protobufjson/go-server/cmd/server.go
@@ -26,10 +26,6 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/generic/protobufjson/go-server/pkg"
-)
-
-import (
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
@@ -41,6 +37,10 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
+import (
+	"github.com/apache/dubbo-go-samples/generic/protobufjson/go-server/pkg"
+)
+
 func init() {
 	config.SetProviderService(new(pkg.UserProvider))
 }
diff --git a/generic/protobufjson/go-server/pkg/user.pb.go b/generic/protobufjson/go-server/pkg/user.pb.go
index 1c1ef8b..1166267 100644
--- a/generic/protobufjson/go-server/pkg/user.pb.go
+++ b/generic/protobufjson/go-server/pkg/user.pb.go
@@ -7,12 +7,16 @@
 package pkg
 
 import (
-	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
 	reflect "reflect"
 	sync "sync"
 )
 
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+)
+
 const (
 	// Verify that this generated code is sufficiently up-to-date.
 	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
diff --git a/generic/protobufjson/go-server/tests/integration/main_test.go b/generic/protobufjson/go-server/tests/integration/main_test.go
index 0c776e7..44153bd 100644
--- a/generic/protobufjson/go-server/tests/integration/main_test.go
+++ b/generic/protobufjson/go-server/tests/integration/main_test.go
@@ -20,6 +20,12 @@
 package integration
 
 import (
+	"os"
+	"testing"
+	"time"
+)
+
+import (
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
@@ -31,12 +37,6 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
-import (
-	"os"
-	"testing"
-	"time"
-)
-
 var appName = "UserConsumerTest"
 var referenceConfig = config.ReferenceConfig{
 	InterfaceName: "org.apache.dubbo.UserProvider",
diff --git a/generic/protobufjson/go-server/tests/integration/userprovider_test.go b/generic/protobufjson/go-server/tests/integration/userprovider_test.go
index 43ef763..0ad6d74 100644
--- a/generic/protobufjson/go-server/tests/integration/userprovider_test.go
+++ b/generic/protobufjson/go-server/tests/integration/userprovider_test.go
@@ -21,12 +21,15 @@ package integration
 
 import (
 	"context"
-	"github.com/stretchr/testify/assert"
 	"testing"
 )
+
 import (
 	"dubbo.apache.org/dubbo-go/v3/config"
+
 	hessian "github.com/apache/dubbo-go-hessian2"
+
+	"github.com/stretchr/testify/assert"
 )
 
 func TestGetUser(t *testing.T) {
diff --git a/go.mod b/go.mod
index 12ed8d4..550d8f4 100644
--- a/go.mod
+++ b/go.mod
@@ -1,28 +1,31 @@
 module github.com/apache/dubbo-go-samples
 
 require (
-	dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210822082425-1bfface3303e
+	dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210826094458-8ef173e7a77b
 	github.com/alibaba/sentinel-golang v1.0.2
-	github.com/apache/dubbo-getty v1.4.3
+	github.com/apache/dubbo-getty v1.4.5
 	github.com/apache/dubbo-go-hessian2 v1.9.2
 	github.com/bwmarrin/snowflake v0.3.0
 	github.com/dubbogo/gost v1.11.16
 	github.com/dubbogo/net v0.0.3
-	github.com/dubbogo/triple v1.0.6-0.20210822081945-0b88cc0d10df
-	github.com/emicklei/go-restful/v3 v3.4.0
+	github.com/dubbogo/triple v1.0.6-0.20210826093718-8b877016f3bf
+	github.com/emicklei/go-restful/v3 v3.5.2
+	github.com/fsnotify/fsnotify v1.5.1 // indirect
 	github.com/golang/protobuf v1.5.2
 	github.com/opentracing/opentracing-go v1.2.0
 	github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5
 	github.com/openzipkin/zipkin-go v0.2.2
 	github.com/pkg/errors v0.9.1
-	github.com/prometheus/client_golang v1.9.0
+	github.com/prometheus/client_golang v1.11.0
+	github.com/satori/go.uuid v1.2.0 // indirect
+	github.com/stretchr/objx v0.2.0 // indirect
 	github.com/stretchr/testify v1.7.0
 	github.com/transaction-wg/seata-golang v0.2.0
 	github.com/uber/jaeger-client-go v2.22.1+incompatible
 	github.com/uber/jaeger-lib v2.2.0+incompatible // indirect
-	golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect
 	google.golang.org/grpc v1.38.0
 	google.golang.org/protobuf v1.27.1
+	k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a // indirect
 )
 
 replace github.com/envoyproxy/go-control-plane => github.com/envoyproxy/go-control-plane v0.8.0
diff --git a/go.sum b/go.sum
index 559bd3c..a608633 100644
--- a/go.sum
+++ b/go.sum
@@ -1,3 +1,4 @@
+bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
@@ -14,6 +15,9 @@ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiy
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210822082425-1bfface3303e h1:TnZXDmootOlIL+DZZkS7opNDwbFG2gT+Z9YeSLwKXy0=
 dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210822082425-1bfface3303e/go.mod h1:quHg7AMGZichyo/h2msHsjregY4oL0lEJlljPbpwgs0=
+dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210826094458-8ef173e7a77b h1:swahNLXhkWgQtnkgafdaHPaEWcC51PvEalPY+ovZ6JQ=
+dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210826094458-8ef173e7a77b/go.mod h1:truc+fGVX3f/luIG6lAc8D49JXETiRtWDF5CVkG7ZMY=
+github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
 github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
 github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
 github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
@@ -26,6 +30,8 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym
 github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
 github.com/Julusian/godocdown v0.0.0-20170816220326-6d19f8ff2df8/go.mod h1:INZr5t32rG59/5xeltqoCJoNY7e5x/3xoY9WSWVWg74=
 github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
+github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
+github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8=
 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
 github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
@@ -53,6 +59,8 @@ github.com/aliyun/alibaba-cloud-sdk-go v1.61.18/go.mod h1:v8ESoHo4SyHmuB4b1tJqDH
 github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
 github.com/apache/dubbo-getty v1.4.3 h1:PCKpryDasKOxwT5MBC6MIMO+0NLOaHF6Xco9YXQw7HI=
 github.com/apache/dubbo-getty v1.4.3/go.mod h1:ansXgKxxyhCOiQL29nO5ce1MDcEKmCyZuNR9oMs3hek=
+github.com/apache/dubbo-getty v1.4.5 h1:MptKbjC0n2Mo/8eFPwirSInH2BfdNG4IZch43PdNvIM=
+github.com/apache/dubbo-getty v1.4.5/go.mod h1:mcDyiu7M/TVrYDyL8TxDemQkOdvEqqHSQ4jOuYejY1w=
 github.com/apache/dubbo-go-hessian2 v1.9.1/go.mod h1:xQUjE7F8PX49nm80kChFvepA/AvqAZ0oh/UaB6+6pBE=
 github.com/apache/dubbo-go-hessian2 v1.9.2 h1:XuI8KvENSfKiAhiCBS4RNihmQDoPNmGWKT3gTui0p9A=
 github.com/apache/dubbo-go-hessian2 v1.9.2/go.mod h1:xQUjE7F8PX49nm80kChFvepA/AvqAZ0oh/UaB6+6pBE=
@@ -62,11 +70,14 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC
 github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
 github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
 github.com/armon/go-metrics v0.3.0/go.mod h1:zXjbSimjXTd7vOpY8B0/2LpvNvDoXBuplAD+gJD3GYs=
+github.com/armon/go-metrics v0.3.3/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
 github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
+github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
 github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
 github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
 github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
 github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
+github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
 github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
@@ -95,6 +106,16 @@ github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h
 github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA=
 github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI=
 github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
+github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko=
+github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
+github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.3.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
+github.com/containerd/continuity v0.0.0-20200709052629-daa8e1ccc0bc/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo=
+github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
+github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
+github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
+github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc=
 github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
 github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
 github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
@@ -106,6 +127,8 @@ github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9
 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
 github.com/coreos/go-systemd/v22 v22.1.0 h1:kq/SbG2BCKLkDKkjQf5OWwKWUKj1lgs3lFI4PxnR5lg=
 github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
+github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
+github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
 github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
 github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
@@ -129,11 +152,16 @@ github.com/denisenkom/go-mssqldb v0.0.0-20190707035753-2be1aa521ff4/go.mod h1:zA
 github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
+github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
+github.com/docker/docker v1.4.2-0.20200319182547-c7ad2b866182/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
+github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
 github.com/dubbogo/go-zookeeper v1.0.3 h1:UkuY+rBsxdT7Bs63QAzp9z7XqQ53W1j8E5rwl83me8g=
 github.com/dubbogo/go-zookeeper v1.0.3/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c=
 github.com/dubbogo/gost v1.9.0/go.mod h1:pPTjVyoJan3aPxBPNUX0ADkXjPibLo+/Ib0/fADXSG8=
 github.com/dubbogo/gost v1.10.1/go.mod h1:+mQGS51XQEUWZP2JeGZTxJwipjRKtJO7Tr+FOg+72rI=
+github.com/dubbogo/gost v1.11.12/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
 github.com/dubbogo/gost v1.11.16 h1:fvOw8aKQ0BuUYuD+MaXAYFvT7tg2l7WAS5SL5gZJpFs=
 github.com/dubbogo/gost v1.11.16/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
 github.com/dubbogo/jsonparser v1.0.1/go.mod h1:tYAtpctvSP/tWw4MeelsowSPgXQRVHHWbqL6ynps8jU=
@@ -141,6 +169,8 @@ github.com/dubbogo/net v0.0.3 h1:2k53mh+1U8h1gFjJ8ykzyP4wNdAdgjc5moD+xVHI/AE=
 github.com/dubbogo/net v0.0.3/go.mod h1:B6/ka3g8VzcyrmdCH4VkHP1K0aHeI37FmclS+TCwIBU=
 github.com/dubbogo/triple v1.0.6-0.20210822081945-0b88cc0d10df h1:YSfvAnU0ebwLqWnD+5HTTsFhqA+aE4Si2c10zBsUW7c=
 github.com/dubbogo/triple v1.0.6-0.20210822081945-0b88cc0d10df/go.mod h1:tCl0mV54+V8Br9z71sFbS1IQUG41QKZUrW6FGaLheM0=
+github.com/dubbogo/triple v1.0.6-0.20210826093718-8b877016f3bf h1:lj0hNwbjk7UpqyEYo6Kz4poTH4w5UfyqI4Gl6x3HEqo=
+github.com/dubbogo/triple v1.0.6-0.20210826093718-8b877016f3bf/go.mod h1:tCl0mV54+V8Br9z71sFbS1IQUG41QKZUrW6FGaLheM0=
 github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
 github.com/dvyukov/go-fuzz v0.0.0-20210429054444-fca39067bc72/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw=
@@ -154,6 +184,8 @@ github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633 h1:H2pdYOb3KQ1
 github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
 github.com/emicklei/go-restful/v3 v3.4.0 h1:IIDhql3oyWZj1ay2xBZGb4sTOWMad0HVW8rwhVxN/Yk=
 github.com/emicklei/go-restful/v3 v3.4.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+github.com/emicklei/go-restful/v3 v3.5.2 h1:RCNMSbcGIVafG4ZfgIXIEHTaV59ZRsi41IvZ7RC9+ls=
+github.com/emicklei/go-restful/v3 v3.5.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/envoyproxy/go-control-plane v0.8.0/go.mod h1:GSSbY9P1neVhdY7G4wu+IK1rk/dqhiCC/4ExuWJZVuk=
 github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
@@ -165,9 +197,13 @@ github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD
 github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
 github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
 github.com/frankban/quicktest v1.4.1/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ=
+github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/fsnotify/fsnotify v1.5.0/go.mod h1:BX0DCEr5pT4jm2CnQdVP1lFV521fcCNcyEeNp4DQQDk=
+github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
+github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
 github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
 github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
@@ -186,8 +222,10 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
+github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
 github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc=
 github.com/go-ldap/ldap/v3 v3.1.3/go.mod h1:3rbOH3jRS2u6jg2rJnKAMLE/xQyCKIveG2Sa/Cohzb8=
+github.com/go-ldap/ldap/v3 v3.1.10/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q=
 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
 github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
@@ -211,11 +249,15 @@ github.com/go-resty/resty/v2 v2.3.0 h1:JOOeAvjSlapTT92p8xiS19Zxev1neGikoHsXJeOq8
 github.com/go-resty/resty/v2 v2.3.0/go.mod h1:UpN9CgLZNsv4e9XG50UU8xdI0F43UQ4HmxLBDwaroHU=
 github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
 github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
+github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
+github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
 github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:56xuuqnHyryaerycW3BfssRdxQstACi0Epw/yC5E2xM=
 github.com/go-xorm/xorm v0.7.9/go.mod h1:XiVxrMMIhFkwSkh96BW7PACl7UhLtx2iJIHMdmjh5sQ=
+github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
 github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
 github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
@@ -265,6 +307,7 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
 github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
@@ -286,6 +329,7 @@ github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORR
 github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
 github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
 github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
 github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
 github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
 github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
@@ -298,6 +342,7 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf
 github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
 github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU=
 github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
 github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
@@ -310,14 +355,20 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng
 github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
 github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
 github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
+github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
 github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
+github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
 github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
+github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
 github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jUIEJnBlbgKS1N2Q61QkHiZyR1g=
 github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
 github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
+github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
 github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
 github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
 github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
+github.com/hashicorp/go-retryablehttp v0.6.2/go.mod h1:gEx6HMUGxYYhJScX7W1Il64m6cc2C1mDaW3NQ9sY1FY=
+github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
 github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
 github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
 github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
@@ -331,6 +382,7 @@ github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09
 github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
 github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
 github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
@@ -338,9 +390,13 @@ github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0m
 github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
 github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
 github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q=
+github.com/hashicorp/vault/api v1.0.5-0.20200519221902-385fac77e20f/go.mod h1:euTFbi2YJgwcju3imEt919lhJKF68nN1cQPq3aA+kBE=
 github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M=
+github.com/hashicorp/vault/sdk v0.1.14-0.20200519221530-14615acda45f/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
 github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267 h1:e1ok06zGrWJW91rzRroyl5nRNqraaBe4d5hiKcVZuHM=
 github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
+github.com/hashicorp/vault/sdk v0.2.1 h1:S4O6Iv/dyKlE9AUTXGa7VOvZmsCvg36toPKgV4f2P4M=
+github.com/hashicorp/vault/sdk v0.2.1/go.mod h1:WfUiO1vYzfBkz1TmoE4ZGU7HD0T0Cl/rZwaxjBkgN4U=
 github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
 github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
@@ -353,8 +409,12 @@ github.com/jackc/pgx v3.6.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGk
 github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag=
 github.com/jinzhu/copier v0.0.0-20190625015134-976e0346caa8 h1:mGIXW/lubQ4B+3bXTLxcTMTjUNDqoF6T/HUW9LbFx9s=
 github.com/jinzhu/copier v0.0.0-20190625015134-976e0346caa8/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s=
+github.com/jinzhu/copier v0.3.2 h1:QdBOCbaouLDYaIPFfi1bKv5F5tPpeTwXe4sD0jqtz5w=
+github.com/jinzhu/copier v0.3.2/go.mod h1:24xnZezI2Yqac9J61UC6/dG/k76ttpq0DdJI3QmUvro=
 github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
 github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc=
+github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
 github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
@@ -367,6 +427,8 @@ github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u
 github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
 github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ=
+github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
@@ -408,6 +470,7 @@ github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPK
 github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
 github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
 github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw=
 github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
 github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
@@ -434,6 +497,7 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4
 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
 github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag=
 github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
@@ -446,6 +510,8 @@ github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lN
 github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
+github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
 github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM=
 github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw=
 github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
@@ -454,6 +520,8 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
 github.com/nacos-group/nacos-sdk-go v1.0.8 h1:8pEm05Cdav9sQgJSv5kyvlgfz0SzFUUGI3pWX6SiSnM=
 github.com/nacos-group/nacos-sdk-go v1.0.8/go.mod h1:hlAPn3UdzlxIlSILAyOXKxjFSvDJ9oLzTJ9hLAK1KzA=
+github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM=
+github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk=
 github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
 github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
 github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
@@ -476,6 +544,13 @@ github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
 github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
+github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
+github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
+github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
 github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
 github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
 github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
@@ -502,6 +577,8 @@ github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0
 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
 github.com/pierrec/lz4 v2.2.6+incompatible h1:6aCX4/YZ9v8q69hTyiR7dNLnTA3fgtKHVVW5BCd5Znw=
 github.com/pierrec/lz4 v2.2.6+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI=
+github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
 github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8/go.mod h1:B1+S9LNcuMyLH/4HMTViQOJevkGiik3wW2AN9zb2fNQ=
 github.com/pingcap/check v0.0.0-20200212061837-5e12011dc712/go.mod h1:PYMCGwN0JHjoqGr3HrZoD+b8Tgx8bKnArhSq8YVzUMc=
 github.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
@@ -512,6 +589,7 @@ github.com/pingcap/log v0.0.0-20200117041106-d28c14d3b1cd/go.mod h1:4rbK1p9ILyIf
 github.com/pingcap/parser v0.0.0-20200424075042-8222d8b724a4/go.mod h1:9v0Edh8IbgjGYW2ArJr19E+bvL8zKahsFp+ixWeId+4=
 github.com/pingcap/tipb v0.0.0-20190428032612-535e1abaa330/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -525,9 +603,11 @@ github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod
 github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
 github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
+github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
 github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
 github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
 github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU=
+github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
@@ -542,6 +622,8 @@ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt2
 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
 github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
 github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
+github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
+github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
@@ -550,6 +632,7 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT
 github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
 github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
 github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
 github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
 github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
@@ -563,6 +646,8 @@ github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb
 github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
 github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
 github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
+github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
+github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
 github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b h1:gQZ0qzfKHQIybLANtM3mBXNUtOfsCFXeTsnBqCsx1KM=
 github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
@@ -572,7 +657,9 @@ github.com/shirou/gopsutil v3.20.11+incompatible h1:LJr4ZQK4mPpIV5gOa4jCOKOGb4ty
 github.com/shirou/gopsutil v3.20.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
 github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
+github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
 github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
@@ -588,11 +675,13 @@ github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
 github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
 github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
 github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
 github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
 github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
 github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
 github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
@@ -636,6 +725,7 @@ github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn
 github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
 github.com/ugorji/go/codec v1.2.6 h1:7kbGefxLoDBuYXOms4yD7223OpNMMPNPZxXk5TvFcyQ=
 github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw=
+github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
 github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
 github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
 github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ=
@@ -644,6 +734,7 @@ github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:
 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
 github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
 github.com/zouyx/agollo/v3 v3.4.5 h1:7YCxzY9ZYaH9TuVUBvmI6Tk0mwMggikah+cfbYogcHQ=
 github.com/zouyx/agollo/v3 v3.4.5/go.mod h1:LJr3kDmm23QSW+F1Ol4TMHDa7HvJvscMdVxJ2IpUTVc=
@@ -654,9 +745,15 @@ go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0
 go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
 go.etcd.io/etcd/api/v3 v3.5.0-alpha.0 h1:+e5nrluATIy3GP53znpkHMFzPTHGYyzvJGFCbuI6ZLc=
 go.etcd.io/etcd/api/v3 v3.5.0-alpha.0/go.mod h1:mPcW6aZJukV6Aa81LSKpBjQXTWlXB5r74ymPoSWa3Sw=
+go.etcd.io/etcd/api/v3 v3.5.0 h1:GsV3S+OfZEOCNXdtNkBSR7kgLobAa/SO6tCxRa0GAYw=
+go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
+go.etcd.io/etcd/client/pkg/v3 v3.5.0 h1:2aQv6F436YnN7I4VbI8PPYrBhu+SmrTaADcf8Mi/6PU=
+go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
 go.etcd.io/etcd/client/v2 v2.305.0-alpha.0/go.mod h1:kdV+xzCJ3luEBSIeQyB/OEKkWKd8Zkux4sbDeANrosU=
 go.etcd.io/etcd/client/v3 v3.5.0-alpha.0 h1:dr1EOILak2pu4Nf5XbRIOCNIBjcz6UmkQd7hHRXwxaM=
 go.etcd.io/etcd/client/v3 v3.5.0-alpha.0/go.mod h1:wKt7jgDgf/OfKiYmCq5WFGxOFAkVMLxiiXgLDFhECr8=
+go.etcd.io/etcd/client/v3 v3.5.0 h1:62Eh0XOro+rDwkrypAGDfgmNh5Joq+z+W9HZdlXMzek=
+go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0=
 go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0 h1:3yLUEC0nFCxw/RArImOyRUI4OAFbg4PFpBbAhSNzKNY=
 go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0/go.mod h1:tV31atvwzcybuqejDoY3oaNRTtlD2l/Ot78Pc9w7DMY=
 go.etcd.io/etcd/raft/v3 v3.5.0-alpha.0/go.mod h1:FAwse6Zlm5v4tEWZaTjmNhe17Int4Oxbu7+2r0DiD3w=
@@ -677,6 +774,8 @@ go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+
 go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
 go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A=
 go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
+go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
+go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
 go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
 go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
 go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
@@ -685,6 +784,9 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
 go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
 go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM=
 go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
+go.uber.org/zap v1.17.0 h1:MTjgFu6ZLKvY6Pvaqk97GlxNBuMpV4Hy/3P6tRGlI2U=
+go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
+golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -697,6 +799,7 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE=
 golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -716,6 +819,7 @@ golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHl
 golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
 golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
 golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
 golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
@@ -724,6 +828,7 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
 golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -746,15 +851,19 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw=
 golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=
+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -767,6 +876,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -787,11 +898,13 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190508220229-2d0786266e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -805,6 +918,7 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -813,6 +927,13 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201223074533-0d417f636930 h1:vRgIt+nup/B/BwIS0g2oC0haq0iqbV3ZA+u6+0TlNCo=
 golang.org/x/sys v0.0.0-20201223074533-0d417f636930/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -821,10 +942,13 @@ golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5f
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
+golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -843,6 +967,7 @@ golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBn
 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -861,6 +986,7 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY
 golang.org/x/tools v0.0.0-20200928182047-19e03678916f/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
 golang.org/x/tools v0.0.0-20201014170642-d1624618ad65/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -894,6 +1020,8 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY
 google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20210106152847-07624b53cd92 h1:jOTk2Z6KYaWoptUFqZ167cS8peoUPjFEXrsqfVkkCGc=
 google.golang.org/genproto v0.0.0-20210106152847-07624b53cd92/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0=
+google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
 google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
 google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
@@ -910,6 +1038,7 @@ google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8
 google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
 google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
 google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
 google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0=
 google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
@@ -927,6 +1056,7 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
 google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -937,6 +1067,7 @@ gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
+gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
 gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
@@ -946,6 +1077,7 @@ gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
 gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
 gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
 gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
@@ -959,7 +1091,9 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
 honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/helloworld/go-client/cmd/client.go b/helloworld/go-client/cmd/client.go
index 68fe2c0..2c0c7ad 100644
--- a/helloworld/go-client/cmd/client.go
+++ b/helloworld/go-client/cmd/client.go
@@ -47,8 +47,8 @@ func main() {
 	req := &api.HelloRequest{
 		Name: "laurence",
 	}
-	reply := &api.User{}
-	if err := grpcGreeterImpl.SayHello(context.Background(), req, reply); err != nil {
+	reply, err := grpcGreeterImpl.SayHello(context.Background(), req)
+	if err != nil {
 		logger.Error(err)
 	}
 	logger.Infof("client response result: %v\n", reply)
diff --git a/helloworld/go-server/cmd/server.go b/helloworld/go-server/cmd/server.go
index 4f23c26..ef49a5a 100644
--- a/helloworld/go-server/cmd/server.go
+++ b/helloworld/go-server/cmd/server.go
@@ -40,6 +40,7 @@ func (s *GreeterProvider) SayHello(ctx context.Context, in *api.HelloRequest) (*
 	return &api.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
 }
 
+// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/helloworld/go-server/conf/dubbogo.yml
 func main() {
 	config.SetProviderService(&GreeterProvider{})
 	config.Load()
diff --git a/rpc/dubbo3/hessian2/go-server/conf/client.yml b/integrate_test/rpc/hessian2/conf/client.yml
similarity index 100%
rename from rpc/dubbo3/hessian2/go-server/conf/client.yml
rename to integrate_test/rpc/hessian2/conf/client.yml
diff --git a/rpc/dubbo3/hessian2/go-server/conf/log.yml b/integrate_test/rpc/hessian2/conf/log.yml
similarity index 100%
rename from rpc/dubbo3/hessian2/go-server/conf/log.yml
rename to integrate_test/rpc/hessian2/conf/log.yml
diff --git a/rpc/dubbo3/hessian2/go-server/conf/server.yml b/integrate_test/rpc/hessian2/conf/server.yml
similarity index 100%
rename from rpc/dubbo3/hessian2/go-server/conf/server.yml
rename to integrate_test/rpc/hessian2/conf/server.yml
diff --git a/rpc/dubbo3/hessian2/go-server/docker/docker-compose.yml b/integrate_test/rpc/hessian2/docker/docker-compose.yml
similarity index 100%
rename from rpc/dubbo3/hessian2/go-server/docker/docker-compose.yml
rename to integrate_test/rpc/hessian2/docker/docker-compose.yml
diff --git a/rpc/dubbo3/hessian2/go-server/docker/docker-compose.yml~merged b/integrate_test/rpc/hessian2/docker/docker-compose.yml~merged
similarity index 100%
rename from rpc/dubbo3/hessian2/go-server/docker/docker-compose.yml~merged
rename to integrate_test/rpc/hessian2/docker/docker-compose.yml~merged
diff --git a/rpc/dubbo3/hessian2/go-server/docker/docker-health-check.sh b/integrate_test/rpc/hessian2/docker/docker-health-check.sh
similarity index 100%
rename from rpc/dubbo3/hessian2/go-server/docker/docker-health-check.sh
rename to integrate_test/rpc/hessian2/docker/docker-health-check.sh
diff --git a/rpc/dubbo3/hessian2/go-server/tests/integration/main_test.go b/integrate_test/rpc/hessian2/tests/integration/main_test.go
similarity index 100%
rename from rpc/dubbo3/hessian2/go-server/tests/integration/main_test.go
rename to integrate_test/rpc/hessian2/tests/integration/main_test.go
diff --git a/rpc/dubbo3/hessian2/go-server/tests/integration/userprovider_test.go b/integrate_test/rpc/hessian2/tests/integration/userprovider_test.go
similarity index 100%
rename from rpc/dubbo3/hessian2/go-server/tests/integration/userprovider_test.go
rename to integrate_test/rpc/hessian2/tests/integration/userprovider_test.go
diff --git a/multi-zone/go-server-hz/tests/integration/main_test.go b/multi-zone/go-server-hz/tests/integration/main_test.go
index 9a3edab..d028c55 100644
--- a/multi-zone/go-server-hz/tests/integration/main_test.go
+++ b/multi-zone/go-server-hz/tests/integration/main_test.go
@@ -36,6 +36,7 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+
 	hessian "github.com/apache/dubbo-go-hessian2"
 )
 
diff --git a/multi-zone/go-server-hz/tests/integration/userprovider_test.go b/multi-zone/go-server-hz/tests/integration/userprovider_test.go
index 89988b7..a506b8d 100644
--- a/multi-zone/go-server-hz/tests/integration/userprovider_test.go
+++ b/multi-zone/go-server-hz/tests/integration/userprovider_test.go
@@ -23,6 +23,7 @@ import (
 	"context"
 	"testing"
 )
+
 import (
 	"github.com/stretchr/testify/assert"
 )
diff --git a/multi-zone/go-server-sh/tests/integration/main_test.go b/multi-zone/go-server-sh/tests/integration/main_test.go
index 9a3edab..d028c55 100644
--- a/multi-zone/go-server-sh/tests/integration/main_test.go
+++ b/multi-zone/go-server-sh/tests/integration/main_test.go
@@ -36,6 +36,7 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+
 	hessian "github.com/apache/dubbo-go-hessian2"
 )
 
diff --git a/multi-zone/go-server-sh/tests/integration/userprovider_test.go b/multi-zone/go-server-sh/tests/integration/userprovider_test.go
index c8d3dd8..04ab061 100644
--- a/multi-zone/go-server-sh/tests/integration/userprovider_test.go
+++ b/multi-zone/go-server-sh/tests/integration/userprovider_test.go
@@ -23,6 +23,7 @@ import (
 	"context"
 	"testing"
 )
+
 import (
 	"github.com/stretchr/testify/assert"
 )
diff --git a/registry/servicediscovery/etcd/go-client/cmd/client.go b/registry/servicediscovery/etcd/go-client/cmd/client.go
index 41a0038..866126c 100644
--- a/registry/servicediscovery/etcd/go-client/cmd/client.go
+++ b/registry/servicediscovery/etcd/go-client/cmd/client.go
@@ -37,7 +37,9 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/registry/etcdv3"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/servicediscovery"
+
 	hessian "github.com/apache/dubbo-go-hessian2"
+
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/registry/servicediscovery/etcd/go-server/cmd/server.go b/registry/servicediscovery/etcd/go-server/cmd/server.go
index 1f3c38e..b32906c 100644
--- a/registry/servicediscovery/etcd/go-server/cmd/server.go
+++ b/registry/servicediscovery/etcd/go-server/cmd/server.go
@@ -26,8 +26,6 @@ import (
 )
 
 import (
-	hessian "github.com/apache/dubbo-go-hessian2"
-
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
@@ -42,6 +40,8 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/registry/etcdv3"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/servicediscovery"
+
+	hessian "github.com/apache/dubbo-go-hessian2"
 )
 
 import (
diff --git a/registry/servicediscovery/etcd/go-server/pkg/user.go b/registry/servicediscovery/etcd/go-server/pkg/user.go
index bda7344..75d0916 100644
--- a/registry/servicediscovery/etcd/go-server/pkg/user.go
+++ b/registry/servicediscovery/etcd/go-server/pkg/user.go
@@ -23,12 +23,11 @@ import (
 )
 
 import (
-	"github.com/dubbogo/gost/log"
-)
-
-import (
 	"dubbo.apache.org/dubbo-go/v3/config"
+
 	hessian "github.com/apache/dubbo-go-hessian2"
+
+	"github.com/dubbogo/gost/log"
 )
 
 func init() {
diff --git a/registry/servicediscovery/etcd/go-server/tests/integration/main_test.go b/registry/servicediscovery/etcd/go-server/tests/integration/main_test.go
index ff9821e..b34dd03 100644
--- a/registry/servicediscovery/etcd/go-server/tests/integration/main_test.go
+++ b/registry/servicediscovery/etcd/go-server/tests/integration/main_test.go
@@ -20,6 +20,13 @@
 package integration
 
 import (
+	"context"
+	"os"
+	"testing"
+	"time"
+)
+
+import (
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
@@ -33,14 +40,8 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/registry/etcdv3"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/servicediscovery"
-	hessian "github.com/apache/dubbo-go-hessian2"
-)
 
-import (
-	"context"
-	"os"
-	"testing"
-	"time"
+	hessian "github.com/apache/dubbo-go-hessian2"
 )
 
 var userProvider = new(UserProvider)
diff --git a/registry/servicediscovery/etcd/go-server/tests/integration/userprovider_test.go b/registry/servicediscovery/etcd/go-server/tests/integration/userprovider_test.go
index dc29d9a..7183e64 100644
--- a/registry/servicediscovery/etcd/go-server/tests/integration/userprovider_test.go
+++ b/registry/servicediscovery/etcd/go-server/tests/integration/userprovider_test.go
@@ -23,6 +23,7 @@ import (
 	"context"
 	"testing"
 )
+
 import (
 	"github.com/stretchr/testify/assert"
 )
diff --git a/registry/zookeeper/go-client/cmd/client.go b/registry/zookeeper/go-client/cmd/client.go
index a7cb8cd..88b7c39 100644
--- a/registry/zookeeper/go-client/cmd/client.go
+++ b/registry/zookeeper/go-client/cmd/client.go
@@ -50,8 +50,8 @@ func main() {
 	req := &api.HelloRequest{
 		Name: "laurence",
 	}
-	reply := &api.User{}
-	if err := grpcGreeterImpl.SayHello(context.Background(), req, reply); err != nil {
+	reply, err := grpcGreeterImpl.SayHello(context.Background(), req)
+	if err != nil {
 		logger.Error(err)
 	}
 	logger.Infof("client response result: %v\n", reply)
diff --git a/rpc/dubbo/go-client/pkg/user.go b/rpc/dubbo/go-client/pkg/user.go
index 59998af..14ef525 100644
--- a/rpc/dubbo/go-client/pkg/user.go
+++ b/rpc/dubbo/go-client/pkg/user.go
@@ -88,9 +88,13 @@ func (User) JavaClassName() string {
 }
 
 type UserProvider struct {
-	GetUsers  func(req []interface{}) ([]interface{}, error)
-	GetErr    func(ctx context.Context, req []interface{}, rsp *User) error
-	GetUser   func(ctx context.Context, req []interface{}, rsp *User) error
+	GetUsers func(req []interface{}) ([]interface{}, error)
+	GetErr   func(ctx context.Context, req []interface{}, rsp *User) error
+
+	GetUserOld func(ctx context.Context, req []interface{}, rsp *User) error
+
+	GetUserNew func(ctx context.Context, req1, req2 *User) (*User, error)
+
 	GetUser0  func(id string, name string) (User, error)
 	GetUser1  func(ctx context.Context, req []interface{}, rsp *User) error
 	GetUser2  func(ctx context.Context, req []interface{}, rsp *User) error `dubbo:"getUser"`
diff --git a/rpc/dubbo3/hessian2/go-client/cmd/client.go b/rpc/dubbo3/hessian2/go-client/cmd/client.go
index 8e664c3..5516d1b 100644
--- a/rpc/dubbo3/hessian2/go-client/cmd/client.go
+++ b/rpc/dubbo3/hessian2/go-client/cmd/client.go
@@ -19,46 +19,43 @@ package main
 
 import (
 	"context"
+	"encoding/json"
 	"os"
 	"time"
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/grpc"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 
 	hessian "github.com/apache/dubbo-go-hessian2"
 
 	"github.com/dubbogo/gost/log"
 )
 
-import (
-	"github.com/apache/dubbo-go-samples/general/dubbo3/hessian2/go-client/pkg"
-)
-
-var userProvider = new(pkg.UserProvider)
+var userProvider = new(UserProvider)
+var complexProvider = new(ComplexProvider)
 
 func init() {
 	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&pkg.User{})
+	config.SetConsumerService(complexProvider)
+	hessian.RegisterPOJO(&User{})
+	hessian.RegisterPOJO(&ComplexData{})
 }
 
 // need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
 func main() {
-	hessian.RegisterPOJO(&pkg.User{})
 	config.Load()
 	time.Sleep(3 * time.Second)
 
 	gxlog.CInfo("\n\n\nstart to test dubbo")
-	user := &pkg.User{}
-	err := userProvider.GetUser(context.TODO(), &pkg.User{Name: "laurence"}, user)
+	testNormalService()
+
+	testComplexService()
+}
+
+func testNormalService() {
+	user, err := userProvider.GetUser(context.TODO(), &User{Name: "laurence"})
 	if err != nil {
 		gxlog.CError("error: %v\n", err)
 		os.Exit(1)
@@ -66,3 +63,114 @@ func main() {
 	}
 	gxlog.CInfo("response result: %v\n", user)
 }
+
+func testComplexService() {
+	// test with normal data
+
+	//test without rsp and request
+	err := complexProvider.InvokeWithEmptyReq(context.TODO())
+	if err != nil {
+		gxlog.CError("error: %v\n", err)
+		os.Exit(1)
+		return
+	}
+
+	// test without response
+	err = complexProvider.InvokeWithSingleString(context.TODO(), "request string")
+	if err != nil {
+		gxlog.CError("error: %v\n", err)
+		os.Exit(1)
+		return
+	}
+
+	err = complexProvider.InvokeWithStringList(context.TODO(), []string{"myfirststring", "mysecondstring"})
+	if err != nil {
+		gxlog.CError("error: %v\n", err)
+		os.Exit(1)
+		return
+	}
+
+	err = complexProvider.InvokeWithMultiString(context.TODO(), "first string", "secondString", "third str")
+	if err != nil {
+		gxlog.CError("error: %v\n", err)
+		os.Exit(1)
+		return
+	}
+
+	// test without request
+	rsp, err := complexProvider.InvokeWithEmptyReqStringRsp(context.TODO())
+	if err != nil {
+		gxlog.CError("error: %v\n", err)
+		os.Exit(1)
+		return
+	}
+	gxlog.CInfo("get InvokeWithEmptyReqStringRsp rsp = %+v", rsp)
+
+	// complex data
+	stringIntMapData := make(map[string]int)
+	stringIntMapData["test1"] = 1
+	stringIntMapData["test2"] = 2
+
+	stringStringMapData := make(map[string]string)
+	stringStringMapData["test1"] = "1"
+	stringStringMapData["test2"] = "2"
+
+	stringUserMapData := make(map[string]User)
+	stringUserMapData["test1"] = User{Name: "1"}
+	stringUserMapData["test2"] = User{Name: "2"}
+
+	stringUintMapData := make(map[string]uint32)
+	stringUintMapData["test1"] = 1
+	stringUintMapData["test2"] = 2
+
+	stringUserPtrMapData := make(map[string]*User)
+	stringUserPtrMapData["test1"] = &User{Name: "1"}
+	stringUserPtrMapData["test2"] = &User{Name: "2"}
+
+	intStringMapData := make(map[int]string)
+	intStringMapData[1] = "1"
+	intStringMapData[2] = "2"
+
+	data, _ := json.Marshal(User{Name: "myJson", Age: 19, Id: "jsonID"})
+
+	cplexData := &ComplexData{
+		BooleanData: true,
+		StringData:  "testString",
+		//UIntData: 8,
+		UInt8Data:  8,
+		UInt16Data: 16,
+		UInt32Data: 32,
+		UInt64Data: 64,
+		Int8Data:   8,
+		Int16Data:  16,
+		Int32Data:  32,
+		Int64Data:  64,
+		IntData:    8,
+		//StringIntMapData: stringIntMapData,
+		StringStringMapData: stringStringMapData,
+		//StringUserDefinedMapData:stringUserMapData,
+		//StringUIntMapData: stringUintMapData,
+		StringUserDefinedPtrMapData: stringUserPtrMapData,
+		//IntStringMapData: intStringMapData,
+		UserDefinedData:         User{Name: "myuser", Age: 18, Id: "testid"},
+		UserDefinedDataPtr:      &User{Name: "myuserPtr", Age: 18, Id: "testid"},
+		ByteData:                data,
+		ArrayListData:           []string{"string1", "string2", "string3"},
+		ArrayUserDefinedData:    []User{{Name: "name1", Id: "id1", Age: 19}, {Name: "name1", Id: "id1", Age: 19}, {Name: "name1", Id: "id1", Age: 19}},
+		ArrayUserDefinedPtrData: []*User{{Name: "name1", Id: "id1", Age: 19}, {Name: "name1", Id: "id1", Age: 19}, {Name: "name1", Id: "id1", Age: 19}},
+	}
+
+	cplxRsp, err := complexProvider.InvokeWithComplexReqComplexRspPtr(context.TODO(), cplexData)
+	if err != nil {
+		gxlog.CError("error: %v\n", err)
+		os.Exit(1)
+		return
+	}
+	gxlog.CInfo("get InvokeWithComplexReqComplexRspPtr rsp = %+v", cplxRsp)
+
+	intRsp, err := complexProvider.InvokeWithMultiBasicData(context.TODO(), "reqstr", []byte{1, 2, 4}, 32, true)
+	if err != nil {
+		panic(err)
+	}
+	gxlog.CInfo("get InvokeWithMultiBasicData rsp = %d", intRsp)
+}
diff --git a/rpc/dubbo3/hessian2/go-client/cmd/complex_service.go b/rpc/dubbo3/hessian2/go-client/cmd/complex_service.go
new file mode 100644
index 0000000..e5b6239
--- /dev/null
+++ b/rpc/dubbo3/hessian2/go-client/cmd/complex_service.go
@@ -0,0 +1,66 @@
+package main
+
+import (
+	"context"
+)
+
+import (
+	"dubbo.apache.org/dubbo-go/v3/config"
+
+	hessian "github.com/apache/dubbo-go-hessian2"
+)
+
+func init() {
+	// ------for hessian2------
+	hessian.RegisterPOJO(&User{})
+	config.SetProviderService(new(UserProvider))
+}
+
+type ComplexData struct {
+	BooleanData bool
+
+	StringData string
+
+	//UIntData   uint
+	UInt8Data  uint8
+	UInt16Data uint16
+	UInt32Data uint32
+	UInt64Data uint64
+
+	IntData   int
+	Int8Data  int8
+	Int16Data int16
+	Int32Data int32
+	Int64Data int64
+
+	StringStringMapData map[string]string
+	//StringIntMapData            map[string]int
+	//StringUIntMapData           map[string]uint32
+	//IntStringMapData            map[int]string
+	//StringUserDefinedMapData    map[string]User
+	StringUserDefinedPtrMapData map[string]*User
+
+	UserDefinedData    User
+	UserDefinedDataPtr *User
+
+	ByteData []byte
+
+	ArrayListData           []string
+	ArrayUserDefinedData    []User
+	ArrayUserDefinedPtrData []*User
+}
+
+type ComplexProvider struct {
+	InvokeWithEmptyReq                func(ctx context.Context) error
+	InvokeWithSingleString            func(ctx context.Context, req string) error
+	InvokeWithMultiString             func(ctx context.Context, req, req2, req3 string) error
+	InvokeWithStringList              func(ctx context.Context, req []string) error
+	InvokeWithEmptyReqStringRsp       func(ctx context.Context) (string, error)
+	InvokeWithComplexReqComplexRspPtr func(ctx context.Context, req *ComplexData) (*ComplexData, error)
+	InvokeWithMultiBasicData          func(ctx context.Context, str string, data []byte, num int, boolValue bool) (int, error)
+	//InvokeWithStringMap func(ctx context.Context, req map[string]string) (map[string]string,error)
+}
+
+func (u ComplexData) JavaClassName() string {
+	return "com.apache.dubbo.sample.basic.ComplexData"
+}
diff --git a/rpc/dubbo3/hessian2/go-client/cmd/simple_service.go b/rpc/dubbo3/hessian2/go-client/cmd/simple_service.go
new file mode 100644
index 0000000..3a1c829
--- /dev/null
+++ b/rpc/dubbo3/hessian2/go-client/cmd/simple_service.go
@@ -0,0 +1,19 @@
+package main
+
+import (
+	"context"
+)
+
+type User struct {
+	Id   string
+	Name string
+	Age  int32
+}
+
+type UserProvider struct {
+	GetUser func(ctx context.Context, req *User) (*User, error)
+}
+
+func (u *User) JavaClassName() string {
+	return "com.apache.dubbo.sample.basic.User"
+}
diff --git a/rpc/dubbo3/hessian2/go-client/conf/client.yml b/rpc/dubbo3/hessian2/go-client/conf/client.yml
deleted file mode 100644
index c9761ef..0000000
--- a/rpc/dubbo3/hessian2/go-client/conf/client.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserProvider"
-  module: "dubbo-go3.0 client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "tri"
-    serialization: "hessian2"
-    interface: "org.apache.dubbo.UserProvider"
\ No newline at end of file
diff --git a/rpc/dubbo3/hessian2/go-client/conf/dubbogo.yml b/rpc/dubbo3/hessian2/go-client/conf/dubbogo.yml
new file mode 100644
index 0000000..c1cfa67
--- /dev/null
+++ b/rpc/dubbo3/hessian2/go-client/conf/dubbogo.yml
@@ -0,0 +1,18 @@
+dubbo:
+  registries:
+    "demoZK":
+      protocol: "zookeeper"
+      timeout: "3s"
+      address: "127.0.0.1:2181"
+  consumer:
+    registry:
+      - demoZK
+    references:
+      "ComplexProvider":
+        protocol: "tri"
+        serialization: "hessian2"
+        interface: "com.apache.dubbo.sample.basic.ComplexProvider" # must be compatible with grpc or dubbo-java
+      "UserProvider":
+        protocol: "tri"
+        serialization: "hessian2"
+        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/rpc/dubbo3/hessian2/go-client/conf/log.yml b/rpc/dubbo3/hessian2/go-client/conf/log.yml
deleted file mode 100644
index 8c3f700..0000000
--- a/rpc/dubbo3/hessian2/go-client/conf/log.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-level: "info"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/rpc/dubbo3/hessian2/go-client/pkg/hello.go b/rpc/dubbo3/hessian2/go-client/pkg/hello.go
deleted file mode 100644
index 092fe0e..0000000
--- a/rpc/dubbo3/hessian2/go-client/pkg/hello.go
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-)
-
-type User struct {
-	Id   string
-	Name string
-	Age  int32
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req *User, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/rpc/dubbo3/hessian2/go-server/cmd/complex_service.go b/rpc/dubbo3/hessian2/go-server/cmd/complex_service.go
new file mode 100644
index 0000000..56c503d
--- /dev/null
+++ b/rpc/dubbo3/hessian2/go-server/cmd/complex_service.go
@@ -0,0 +1,104 @@
+package main
+
+import (
+	"context"
+)
+
+import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
+	"dubbo.apache.org/dubbo-go/v3/config"
+
+	hessian "github.com/apache/dubbo-go-hessian2"
+)
+
+func init() {
+	// ------for hessian2------
+	hessian.RegisterPOJO(&User{})
+	config.SetProviderService(new(UserProvider))
+}
+
+type ComplexData struct {
+	BooleanData bool
+
+	StringData string
+
+	//UIntData   uint
+	UInt8Data  uint8
+	UInt16Data uint16
+	UInt32Data uint32
+	UInt64Data uint64
+
+	IntData   int
+	Int8Data  int8
+	Int16Data int16
+	Int32Data int32
+	Int64Data int64
+
+	StringStringMapData map[string]string
+	//StringIntMapData            map[string]int
+	//StringUIntMapData           map[string]uint32
+	//IntStringMapData            map[int]string
+	//StringUserDefinedMapData    map[string]User
+	StringUserDefinedPtrMapData map[string]*User
+
+	UserDefinedData    User
+	UserDefinedDataPtr *User
+
+	ByteData []byte
+
+	ArrayListData           []string
+	ArrayUserDefinedData    []User
+	ArrayUserDefinedPtrData []*User
+}
+
+func (u *ComplexData) JavaClassName() string {
+	return "com.apache.dubbo.sample.basic.ComplexData"
+}
+
+type ComplexProvider struct {
+}
+
+func (u *ComplexProvider) InvokeWithMultiBasicData(ctx context.Context, str string, data []byte, num int, boolValue bool) (int, error) {
+	logger.Info("InvokeWithMultiBasicData", str, " ", data, " ", num, " ", boolValue)
+	return num, nil
+}
+
+func (u *ComplexProvider) InvokeWithEmptyReq(ctx context.Context) error {
+	logger.Info("InvokeWithEmptyReq")
+	return nil
+}
+
+func (u *ComplexProvider) InvokeWithSingleString(ctx context.Context, req string) error {
+	logger.Infof("InvokeWithSingleString, req = %s", req)
+	return nil
+}
+
+func (u *ComplexProvider) InvokeWithMultiString(ctx context.Context, req, req2, req3 string) error {
+	logger.Info("InvokeWithMultiString, req = ", req, req2, req3)
+	return nil
+}
+
+func (u *ComplexProvider) InvokeWithStringList(ctx context.Context, req []string) error {
+	logger.Infof("InvokeWithStringList, req = %s", req)
+	return nil
+}
+
+//func (u *ComplexProvider) InvokeWithStringMap(ctx context.Context, req map[string]string) (map[string]string,error) {
+//	logger.Infof("InvokeWithStringList, req = %s", req)
+//	return req, nil
+//}
+
+func (u *ComplexProvider) InvokeWithEmptyReqStringRsp(ctx context.Context) (string, error) {
+	logger.Infof("InvokeWithEmptyReqStringRsp")
+	return "success rsp", nil
+}
+
+func (u *ComplexProvider) InvokeWithEmptyReqMultiStringRsp(ctx context.Context) (string, string, string, error) {
+	logger.Infof("InvokeWithEmptyReqMultiStringRsp")
+	return "success rsp1", "success rsp2", "success rsp3", nil
+}
+
+func (u *ComplexProvider) InvokeWithComplexReqComplexRspPtr(ctx context.Context, req *ComplexData) (*ComplexData, error) {
+	logger.Infof("InvokeWithComplexReqComplexRsp req = %+v", req)
+	return req, nil
+}
diff --git a/rpc/dubbo3/hessian2/go-server/cmd/server.go b/rpc/dubbo3/hessian2/go-server/cmd/server.go
index 311bb76..299d554 100644
--- a/rpc/dubbo3/hessian2/go-server/cmd/server.go
+++ b/rpc/dubbo3/hessian2/go-server/cmd/server.go
@@ -26,22 +26,11 @@ import (
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/nacos"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 
-	_ "github.com/dubbogo/triple/pkg/triple"
-)
-
-import (
-	"github.com/apache/dubbo-go-samples/general/dubbo3/hessian2/go-server/pkg"
+	hessian "github.com/apache/dubbo-go-hessian2"
 )
 
 var (
@@ -49,12 +38,18 @@ var (
 )
 
 func init() {
-	config.SetProviderService(new(pkg.UserProvider))
+	// ------for hessian2------
+	hessian.RegisterPOJO(&User{})
+	hessian.RegisterPOJO(&ComplexData{})
+	config.SetProviderService(new(UserProvider))
+	config.SetProviderService(new(ComplexProvider))
 }
 
-// need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
+// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/rpc/dubbo3/hessian2/go-server/conf/dubbogo.yml
 func main() {
-	config.Load()
+	if err := config.Load(); err != nil {
+		panic(err)
+	}
 	initSignal()
 }
 
diff --git a/rpc/dubbo3/hessian2/go-server/cmd/simple_service.go b/rpc/dubbo3/hessian2/go-server/cmd/simple_service.go
new file mode 100644
index 0000000..93dc772
--- /dev/null
+++ b/rpc/dubbo3/hessian2/go-server/cmd/simple_service.go
@@ -0,0 +1,29 @@
+package main
+
+import (
+	"context"
+)
+
+import (
+	gxlog "github.com/dubbogo/gost/log"
+)
+
+type User struct {
+	Id   string
+	Name string
+	Age  int32
+}
+
+func (u *User) JavaClassName() string {
+	return "com.apache.dubbo.sample.basic.User"
+}
+
+type UserProvider struct {
+}
+
+func (u *UserProvider) GetUser(ctx context.Context, usr *User) (*User, error) {
+	gxlog.CInfo("req:%#v", usr)
+	rsp := User{"12345", "" + usr.Name, 18}
+	gxlog.CInfo("rsp:%#v", rsp)
+	return &rsp, nil
+}
diff --git a/rpc/dubbo3/hessian2/go-server/conf/dubbogo.yml b/rpc/dubbo3/hessian2/go-server/conf/dubbogo.yml
new file mode 100644
index 0000000..b7c6359
--- /dev/null
+++ b/rpc/dubbo3/hessian2/go-server/conf/dubbogo.yml
@@ -0,0 +1,22 @@
+dubbo:
+  registries:
+    "demoZK":
+      protocol: "zookeeper"
+      timeout: "3s"
+      address: "127.0.0.1:2181"
+  protocols:
+    "triple":
+      name: "tri"
+      port: 20000
+  provider:
+    registry:
+      - demoZK
+    services:
+      "UserProvider":
+        protocol: "triple"
+        serialization: "hessian2"
+        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
+      "ComplexProvider":
+        protocol: "triple"
+        serialization: "hessian2"
+        interface: "com.apache.dubbo.sample.basic.ComplexProvider" # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/rpc/dubbo3/hessian2/go-server/pkg/greeter.go b/rpc/dubbo3/hessian2/go-server/pkg/greeter.go
deleted file mode 100644
index d890a95..0000000
--- a/rpc/dubbo3/hessian2/go-server/pkg/greeter.go
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-)
-
-import (
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log"
-)
-
-func init() {
-	// ------for hessian2------
-	hessian.RegisterPOJO(&User{})
-}
-
-type User struct {
-	Id   string
-	Name string
-	Age  int32
-}
-
-type UserProvider struct {
-}
-
-func (u *UserProvider) GetUser(ctx context.Context, usr *User) (*User, error) {
-	gxlog.CInfo("req:%#v", usr)
-	rsp := User{"12345", "" + usr.Name, 18}
-	gxlog.CInfo("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/rpc/dubbo3/hessian2/java-client/pom.xml b/rpc/dubbo3/hessian2/java-client/pom.xml
index 9812b42..aff1e73 100644
--- a/rpc/dubbo3/hessian2/java-client/pom.xml
+++ b/rpc/dubbo3/hessian2/java-client/pom.xml
@@ -27,7 +27,7 @@
     <properties>
         <source.level>1.8</source.level>
         <target.level>1.8</target.level>
-        <dubbo.version>3.0.0-SNAPSHOT</dubbo.version>
+        <dubbo.version>3.0.2</dubbo.version>
         <junit.version>4.12</junit.version>
         <spring-test.version>4.3.16.RELEASE</spring-test.version>
         <maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
diff --git a/rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java b/rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java
index d80df27..2dc8cad 100644
--- a/rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java
+++ b/rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java
@@ -24,36 +24,56 @@ import org.apache.dubbo.config.RegistryConfig;
 import org.apache.dubbo.sample.hello.Helloworld;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 public class ApiConsumer {
     public static void main(String[] args) throws InterruptedException, IOException {
-        ReferenceConfig<IGreeter> ref = new ReferenceConfig<>();
-        ref.setInterface(IGreeter.class);
-        ref.setCheck(false);
-        ref.setInterface(IGreeter.class);
+        ReferenceConfig<ComplexProvider> ref = new ReferenceConfig<>();
+        ref.setInterface(ComplexProvider.class);
         ref.setCheck(false);
         ref.setProtocol(CommonConstants.TRIPLE);
         ref.setLazy(true);
         ref.setTimeout(100000);
         ref.setApplication(new ApplicationConfig("demo-consumer"));
+
         ref.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
-        final IGreeter iGreeter = ref.get();
+        final ComplexProvider complexProvider = ref.get();
+
+//        complexProvider.invokeWithEmptyReq();
+//        complexProvider.invokeWithSingleString("single string");
+//        complexProvider.invokeWithMultiString("string1", "string2", "string3");
+//        String [] strList = new String []{"first string"," second string"};
+//        complexProvider.invokeWithStringList(strList );
+//       String rsp = complexProvider.invokeWithEmptyReqStringRsp();
+//       System.out.println("get rsp = "+  rsp);
 
-        System.out.println("dubbo ref started");
-        int i = 0;
-        for(  i = 0; i < 10; i++){
-            try {
 
-                    final User reply = iGreeter.getUser("laurence");
-                    TimeUnit.SECONDS.sleep(1);
-                    System.out.println("Reply:" + reply.name + reply.age + reply.id);
+       ComplexData cpxData = new ComplexData();
+       cpxData.booleanData = true;
+       cpxData.stringData = "test string";
+       cpxData.byteData =  new byte[] {1, 12, 4, 3, 3,3};
+       cpxData.int16Data =16;
+       cpxData.intData = 32;
+       cpxData.int64Data = 64;
+       cpxData.arrayListData = new String[]{"array1", "array2"};
+//       cpxData.arrayUserData = new User[]{new User(), new User(), new User()};
+        cpxData.userDefinedData = new User();
+        cpxData.userDefinedData.age = 18;
+        cpxData.userDefinedData.id = "iojfioj";
+        cpxData.stringStringHashMap = new HashMap<>();
+//        cpxData.stringStringHashMap.put("key1", "value");
+//        cpxData.stringStringHashMap.put("key2", "value");
+//        cpxData.stringUserDefinedPtrMapData = new HashMap<>();
+//        cpxData.stringUserDefinedPtrMapData.put("key1", new User());
+//        cpxData.stringUserDefinedPtrMapData.put("key2", new User());
 
-            } catch (Throwable t) {
-                t.printStackTrace();
-            }
+//        ComplexData response = complexProvider.invokeWithComplexReqComplexRspPtr(cpxData);
+//        System.out.println("get complex = "+  response);
 
-        }
-        System.in.read();
+        int rsp = complexProvider.invokeWithMultiBasicData("str",new byte[]{1, 3, 4,6,7}, 32, true);
+        System.out.println("get multi basic rsp = "+  rsp);
     }
 }
diff --git a/rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ComplexData.java b/rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ComplexData.java
new file mode 100644
index 0000000..c3b51d1
--- /dev/null
+++ b/rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ComplexData.java
@@ -0,0 +1,21 @@
+package com.apache.dubbo.sample.basic;
+
+import java.io.Serializable;
+import java.util.HashMap;
+
+public class ComplexData implements Serializable {
+    boolean booleanData;
+    String stringData;
+
+    short int16Data;
+    int intData;
+    long int64Data;
+
+    User userDefinedData;
+    byte [] byteData;
+    HashMap<String, String> stringStringHashMap;
+//    HashMap<String, User> stringUserDefinedPtrMapData;
+    String[] arrayListData;
+//    User[] arrayUserData;
+
+}
diff --git a/rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ComplexProvider.java b/rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ComplexProvider.java
new file mode 100644
index 0000000..c486e89
--- /dev/null
+++ b/rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ComplexProvider.java
@@ -0,0 +1,11 @@
+package com.apache.dubbo.sample.basic;
+
+public interface ComplexProvider {
+    void invokeWithEmptyReq();
+    void invokeWithSingleString(String req);
+    void invokeWithStringList(String[] req);
+    void invokeWithMultiString(String str1, String str2, String str3);
+    String invokeWithEmptyReqStringRsp ();
+    ComplexData invokeWithComplexReqComplexRspPtr(ComplexData complexData);
+    int invokeWithMultiBasicData (String str, byte[]data, int num, boolean boolValue);
+}
diff --git a/rpc/dubbo3/hessian2/java-server/pom.xml b/rpc/dubbo3/hessian2/java-server/pom.xml
index a6c41b5..82f616d 100644
--- a/rpc/dubbo3/hessian2/java-server/pom.xml
+++ b/rpc/dubbo3/hessian2/java-server/pom.xml
@@ -29,7 +29,7 @@
     <properties>
         <source.level>1.8</source.level>
         <target.level>1.8</target.level>
-        <dubbo.version>3.0.0-SNAPSHOT</dubbo.version>
+        <dubbo.version>3.0.0-ding-SNAPSHOT</dubbo.version>
         <junit.version>4.12</junit.version>
         <spring-test.version>4.3.16.RELEASE</spring-test.version>
         <maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
diff --git a/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java b/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java
index 8a6f7f2..fcd180c 100644
--- a/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java
+++ b/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java
@@ -26,9 +26,9 @@ import java.util.concurrent.CountDownLatch;
 
 public class ApiProvider {
     public static void main(String[] args) throws InterruptedException {
-        ServiceConfig<IGreeter> service = new ServiceConfig<>();
-        service.setInterface(IGreeter.class);
-        service.setRef(new IGreeter1Impl());
+        ServiceConfig<ComplexProvider> service = new ServiceConfig<>();
+        service.setInterface(ComplexProvider.class);
+        service.setRef(new ComplexProviderImpl());
         service.setProtocol(new ProtocolConfig(CommonConstants.TRIPLE, 50053));
         service.setApplication(new ApplicationConfig("demo-provider"));
         service.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
diff --git a/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ComplexData.java b/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ComplexData.java
new file mode 100644
index 0000000..52bf428
--- /dev/null
+++ b/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ComplexData.java
@@ -0,0 +1,37 @@
+package com.apache.dubbo.sample.basic;
+
+import java.io.Serializable;
+import java.util.HashMap;
+
+public class ComplexData implements Serializable {
+    boolean booleanData;
+    String stringData;
+
+    short int16Data;
+    int intData;
+    long int64Data;
+
+    User userDefinedData;
+    byte [] byteData;
+    HashMap<String, String> stringStringHashMap;
+    HashMap<String, User> stringUserDefinedPtrMapData;
+    String[] arrayListData;
+    User[] arrayUserData;
+
+    public String GetString(){
+        String result = "";
+        result += booleanData;
+        result += stringData;
+        result += int16Data;
+        result += intData;
+        result += int64Data;
+        result += userDefinedData;
+        result += byteData;
+        result += stringStringHashMap;
+        result += stringUserDefinedPtrMapData;
+        result += arrayUserData;
+        result += arrayListData;
+        return result;
+    }
+
+}
diff --git a/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ComplexProvider.java b/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ComplexProvider.java
new file mode 100644
index 0000000..a1965dd
--- /dev/null
+++ b/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ComplexProvider.java
@@ -0,0 +1,10 @@
+package com.apache.dubbo.sample.basic;
+
+public interface ComplexProvider {
+    void invokeWithEmptyReq();
+    void invokeWithSingleString(String req);
+    void invokeWithStringList(String[] req);
+    void invokeWithMultiString(String str1, String str2, String str3);
+    String invokeWithEmptyReqStringRsp ();
+    ComplexData invokeWithComplexReqComplexRspPtr(ComplexData complexData);
+}
diff --git a/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ComplexProviderImpl.java b/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ComplexProviderImpl.java
new file mode 100644
index 0000000..79106cd
--- /dev/null
+++ b/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ComplexProviderImpl.java
@@ -0,0 +1,35 @@
+package com.apache.dubbo.sample.basic;
+
+public class ComplexProviderImpl implements ComplexProvider {
+    @Override
+    public void invokeWithEmptyReq() {
+        System.out.println("invokeWithEmptyReq");
+    }
+
+    @Override
+    public void invokeWithSingleString(String req) {
+        System.out.println("invokeWithEmptyReq" + req);
+    }
+
+    @Override
+    public void invokeWithStringList(String[] req) {
+        System.out.println("invokeWithEmptyReq" + req);
+    }
+
+    @Override
+    public void invokeWithMultiString(String str1, String str2, String str3) {
+        System.out.println("invokeWithEmptyReq" + str1 + str2 + str3);
+    }
+
+    @Override
+    public String invokeWithEmptyReqStringRsp() {
+        System.out.println("invokeWithEmptyReq");
+        return "invoke success";
+    }
+
+    @Override
+    public ComplexData invokeWithComplexReqComplexRspPtr(ComplexData complexData) {
+        System.out.println("invokeWithComplexReqComplexRspPtr = "+ complexData.GetString());
+        return complexData;
+    }
+}
diff --git a/rpc/dubbo3/pb/dubbogo-grpc/server/grpcgo-server/main.go b/rpc/dubbo3/pb/dubbogo-grpc/server/grpcgo-server/main.go
index 87f308b..4041fb7 100644
--- a/rpc/dubbo3/pb/dubbogo-grpc/server/grpcgo-server/main.go
+++ b/rpc/dubbo3/pb/dubbogo-grpc/server/grpcgo-server/main.go
@@ -28,7 +28,6 @@ import (
 
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/reflection"
-
 	"google.golang.org/grpc/reflection"
 )
 
diff --git a/rpc/dubbo3/pb/dubbogo-java/protobuf/helloworld.pb.go b/rpc/dubbo3/pb/dubbogo-java/protobuf/helloworld.pb.go
index 89625a4..dc13874 100644
--- a/rpc/dubbo3/pb/dubbogo-java/protobuf/helloworld.pb.go
+++ b/rpc/dubbo3/pb/dubbogo-java/protobuf/helloworld.pb.go
@@ -21,7 +21,6 @@ import (
 
 	grpc "google.golang.org/grpc"
 	codes "google.golang.org/grpc/codes"
-
 	status "google.golang.org/grpc/status"
 )
 
diff --git a/tracing/dubbo/go-server/tests/integration/main_test.go b/tracing/dubbo/go-server/tests/integration/main_test.go
index f29ce68..ee19ca1 100644
--- a/tracing/dubbo/go-server/tests/integration/main_test.go
+++ b/tracing/dubbo/go-server/tests/integration/main_test.go
@@ -27,10 +27,6 @@ import (
 )
 
 import (
-	hessian "github.com/apache/dubbo-go-hessian2"
-)
-
-import (
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
@@ -44,6 +40,8 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/servicediscovery"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+
+	hessian "github.com/apache/dubbo-go-hessian2"
 )
 
 var userProvider = new(UserProvider)
diff --git a/tracing/dubbo/go-server/tests/integration/userprovider_test.go b/tracing/dubbo/go-server/tests/integration/userprovider_test.go
index d795eb9..537111f 100644
--- a/tracing/dubbo/go-server/tests/integration/userprovider_test.go
+++ b/tracing/dubbo/go-server/tests/integration/userprovider_test.go
@@ -23,15 +23,20 @@ import (
 	"context"
 	"testing"
 )
+
 import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
+
 	"github.com/dubbogo/gost/log"
+
 	"github.com/opentracing/opentracing-go"
+
 	zipkinot "github.com/openzipkin-contrib/zipkin-go-opentracing"
+
 	"github.com/openzipkin/zipkin-go"
 	zipkinhttp "github.com/openzipkin/zipkin-go/reporter/http"
-	"github.com/stretchr/testify/assert"
 
-	"dubbo.apache.org/dubbo-go/v3/common/logger"
+	"github.com/stretchr/testify/assert"
 )
 
 func TestGetUser(t *testing.T) {
diff --git a/tracing/grpc/go-server/app/helloworld.pb.go b/tracing/grpc/go-server/app/helloworld.pb.go
index 43c9335..a6baf5c 100644
--- a/tracing/grpc/go-server/app/helloworld.pb.go
+++ b/tracing/grpc/go-server/app/helloworld.pb.go
@@ -18,10 +18,8 @@ import (
 
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/codes"
-	"google.golang.org/grpc/status"
-
 	"google.golang.org/grpc/codes"
-
+	"google.golang.org/grpc/status"
 	"google.golang.org/grpc/status"
 )
 

[dubbo-go-samples] 14/14: fix: triple attachment ci (#221)

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git

commit 7dfa08b3a19ba53a8f050b5d39f933567159a505
Author: Laurence <45...@users.noreply.github.com>
AuthorDate: Sat Sep 4 15:05:42 2021 +0800

    fix: triple attachment ci (#221)
---
 api/generate.sh       |   4 +-
 api/samples_api.pb.go | 137 +++++++++++++--------------------------------
 go.mod                |   7 ++-
 go.sum                | 150 +++++++++++++++++++++++++++++++++++++++++++++++++-
 4 files changed, 194 insertions(+), 104 deletions(-)

diff --git a/api/generate.sh b/api/generate.sh
index 23c7b71..8b37203 100644
--- a/api/generate.sh
+++ b/api/generate.sh
@@ -1,4 +1,4 @@
 export GO111MODULE="on"
 export GOPROXY="http://goproxy.io"
-go get -u github.com/dubbogo/tools/cmd/protoc-gen-dubbo3@3.0
-protoc -I . samples_api.proto --dubbo3_out=plugins=grpc+dubbo:.
\ No newline at end of file
+go get -u github.com/dubbogo/tools/cmd/protoc-gen-triple
+protoc -I . samples_api.proto --triple_out=plugins=triple:.
\ No newline at end of file
diff --git a/api/samples_api.pb.go b/api/samples_api.pb.go
index 5451e2c..a8ae83b 100644
--- a/api/samples_api.pb.go
+++ b/api/samples_api.pb.go
@@ -6,6 +6,8 @@ package api
 import (
 	context "context"
 	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	grpc "google.golang.org/grpc"
 	math "math"
 )
 
@@ -13,15 +15,9 @@ import (
 	"dubbo.apache.org/dubbo-go/v3/protocol"
 	dgrpc "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
 	"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
-
+	"github.com/dubbogo/triple/pkg/common"
 	tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
 	dubbo3 "github.com/dubbogo/triple/pkg/triple"
-
-	proto "github.com/golang/protobuf/proto"
-
-	grpc "google.golang.org/grpc"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -159,24 +155,45 @@ type greeterDubbo3Client struct {
 func NewGreeterDubbo3Client(cc *dubbo3.TripleConn) GreeterClient {
 	return &greeterDubbo3Client{cc}
 }
-func (c *greeterDubbo3Client) SayHello(ctx context.Context, in *HelloRequest, opt ...grpc.CallOption) (*User, error) {
+func (c *greeterDubbo3Client) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*User, common.ErrorWithAttachment) {
 	out := new(User)
 	interfaceKey := ctx.Value(tripleConstant.InterfaceKey).(string)
-	err := c.cc.Invoke(ctx, "/"+interfaceKey+"/SayHello", in, out)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
+	return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/SayHello", in, out)
 }
 
 // GreeterClientImpl is the client API for Greeter service.
 //
 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GreeterClient interface {
+	// Sends a greeting
+	SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*User, common.ErrorWithAttachment)
+}
+
 type GreeterClientImpl struct {
 	// Sends a greeting
 	SayHello func(ctx context.Context, in *HelloRequest) (*User, error)
 }
 
+type Greeter_SayHelloClient interface {
+	CloseAndRecv() (*User, error)
+	grpc.ClientStream
+}
+
+type greeterSayHelloClient struct {
+	grpc.ClientStream
+}
+
+func (x *greeterSayHelloClient) CloseAndRecv() (*User, error) {
+	if err := x.ClientStream.CloseSend(); err != nil {
+		return nil, err
+	}
+	m := new(User)
+	if err := x.ClientStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
 func (c *GreeterClientImpl) Reference() string {
 	return "greeterImpl"
 }
@@ -185,6 +202,12 @@ func (c *GreeterClientImpl) GetDubboStub(cc *dubbo3.TripleConn) GreeterClient {
 	return NewGreeterDubbo3Client(cc)
 }
 
+// GreeterServer is the server API for Greeter service.
+type GreeterServer interface {
+	// Sends a greeting
+	SayHello(context.Context, *HelloRequest) (*User, error)
+}
+
 type GreeterProviderBase struct {
 	proxyImpl protocol.Invoker
 }
@@ -201,7 +224,7 @@ func (c *GreeterProviderBase) Reference() string {
 	return "greeterImpl"
 }
 
-func _DUBBO_Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+func _Triple_Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(HelloRequest)
 	if err := dec(in); err != nil {
 		return nil, err
@@ -212,7 +235,7 @@ func _DUBBO_Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec f
 	invo := invocation.NewRPCInvocation("SayHello", args, nil)
 	if interceptor == nil {
 		result := base.GetProxyImpl().Invoke(ctx, invo)
-		return result.Result(), result.Error()
+		return result, result.Error()
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
@@ -232,92 +255,10 @@ func (s *GreeterProviderBase) ServiceDesc() *grpc.ServiceDesc {
 		Methods: []grpc.MethodDesc{
 			{
 				MethodName: "SayHello",
-				Handler:    _DUBBO_Greeter_SayHello_Handler,
+				Handler:    _Triple_Greeter_SayHello_Handler,
 			},
 		},
 		Streams:  []grpc.StreamDesc{},
 		Metadata: "samples_api.proto",
 	}
 }
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ context.Context
-var _ grpc.ClientConnInterface
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-const _ = grpc.SupportPackageIsVersion6
-
-// GreeterClient is the client API for Greeter service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
-type GreeterClient interface {
-	// Sends a greeting
-	SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*User, error)
-}
-
-type greeterClient struct {
-	cc grpc.ClientConnInterface
-}
-
-func NewGreeterClient(cc grpc.ClientConnInterface) GreeterClient {
-	return &greeterClient{cc}
-}
-
-func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*User, error) {
-	out := new(User)
-	err := c.cc.Invoke(ctx, "/api.Greeter/SayHello", in, out, opts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
-// GreeterServer is the server API for Greeter service.
-type GreeterServer interface {
-	// Sends a greeting
-	SayHello(context.Context, *HelloRequest) (*User, error)
-}
-
-// UnimplementedGreeterServer can be embedded to have forward compatible implementations.
-type UnimplementedGreeterServer struct {
-}
-
-func (*UnimplementedGreeterServer) SayHello(ctx context.Context, req *HelloRequest) (*User, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method SayHello not implemented")
-}
-
-func RegisterGreeterServer(s *grpc.Server, srv GreeterServer) {
-	s.RegisterService(&_Greeter_serviceDesc, srv)
-}
-
-func _Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(HelloRequest)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	if interceptor == nil {
-		return srv.(GreeterServer).SayHello(ctx, in)
-	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: "/api.Greeter/SayHello",
-	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(GreeterServer).SayHello(ctx, req.(*HelloRequest))
-	}
-	return interceptor(ctx, in, info, handler)
-}
-
-var _Greeter_serviceDesc = grpc.ServiceDesc{
-	ServiceName: "api.Greeter",
-	HandlerType: (*GreeterServer)(nil),
-	Methods: []grpc.MethodDesc{
-		{
-			MethodName: "SayHello",
-			Handler:    _Greeter_SayHello_Handler,
-		},
-	},
-	Streams:  []grpc.StreamDesc{},
-	Metadata: "samples_api.proto",
-}
diff --git a/go.mod b/go.mod
index 19e3050..a940510 100644
--- a/go.mod
+++ b/go.mod
@@ -1,14 +1,15 @@
 module github.com/apache/dubbo-go-samples
 
 require (
-	dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210901104537-ddabb2e957aa
+	dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210904062533-3e0412eab250
 	github.com/alibaba/sentinel-golang v1.0.2
 	github.com/apache/dubbo-getty v1.4.5
 	github.com/apache/dubbo-go-hessian2 v1.9.2
 	github.com/bwmarrin/snowflake v0.3.0
 	github.com/dubbogo/gost v1.11.16
-	github.com/dubbogo/net v0.0.3
-	github.com/dubbogo/triple v1.0.6-0.20210826093718-8b877016f3bf
+	github.com/dubbogo/net v0.0.4
+	github.com/dubbogo/tools v0.0.0-20210904063948-bc36609f1519 // indirect
+	github.com/dubbogo/triple v1.0.6-0.20210904050749-5721796f3fd6
 	github.com/emicklei/go-restful/v3 v3.5.2
 	github.com/fsnotify/fsnotify v1.5.1 // indirect
 	github.com/golang/protobuf v1.5.2
diff --git a/go.sum b/go.sum
index df43e51..a395bf9 100644
--- a/go.sum
+++ b/go.sum
@@ -7,12 +7,14 @@ cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6A
 cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
 cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
 cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
+cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
 cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
 cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
 cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
 cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
 cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2/go.mod h1:2l+IXuSuJvEk2g/ze1la8t1sX+yJH220aHo6JJVriM8=
 dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210822082425-1bfface3303e h1:TnZXDmootOlIL+DZZkS7opNDwbFG2gT+Z9YeSLwKXy0=
 dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210822082425-1bfface3303e/go.mod h1:quHg7AMGZichyo/h2msHsjregY4oL0lEJlljPbpwgs0=
 dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210826094458-8ef173e7a77b h1:swahNLXhkWgQtnkgafdaHPaEWcC51PvEalPY+ovZ6JQ=
@@ -21,22 +23,40 @@ dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210901104537-ddabb2e957aa h1:xpWQD2H
 dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210901104537-ddabb2e957aa/go.mod h1:truc+fGVX3f/luIG6lAc8D49JXETiRtWDF5CVkG7ZMY=
 dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210902110215-82e825c9c36a h1:MQe72C0+cCE3ra6Bk/MtmK3PTrNhNWvnopcOsTW7dP4=
 dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210902110215-82e825c9c36a/go.mod h1:truc+fGVX3f/luIG6lAc8D49JXETiRtWDF5CVkG7ZMY=
+dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210904062533-3e0412eab250 h1:/OcfAvqXX0MAeylJnI+zeGYlG5icXrnxKjNvil6jjEA=
+dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210904062533-3e0412eab250/go.mod h1:qzYPQolHmB+cfNhO0fUGTCWbBRdEnvyssdF8zNIiPLQ=
+github.com/Azure/azure-sdk-for-go v40.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
 github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
 github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
+github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0=
+github.com/Azure/go-autorest/autorest v0.10.0/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630=
 github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
+github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc=
+github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q=
+github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q=
+github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM=
+github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw=
 github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
+github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g=
 github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
 github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
+github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM=
+github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA=
+github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI=
 github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
 github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
 github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
 github.com/Julusian/godocdown v0.0.0-20170816220326-6d19f8ff2df8/go.mod h1:INZr5t32rG59/5xeltqoCJoNY7e5x/3xoY9WSWVWg74=
 github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
+github.com/Microsoft/go-winio v0.4.3/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
 github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
 github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8=
 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
+github.com/NYTimes/gziphandler v1.0.1/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
+github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
 github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
@@ -44,11 +64,13 @@ github.com/RoaringBitmap/roaring v0.7.1 h1:HkcLv8q/kwGJnhEWe+vinu+04DGDdQ7nVivMh
 github.com/RoaringBitmap/roaring v0.7.1/go.mod h1:jdT9ykXwHFNdJbEtxePexlFYH9LXucApeS0/+/g+p1I=
 github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
 github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
+github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
 github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk=
 github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
 github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
 github.com/Workiva/go-datastructures v1.0.52 h1:PLSK6pwn8mYdaoaCZEMsXBpBotr4HHn9abU0yMQt0NI=
 github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA=
+github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af/go.mod h1:5Jv4cbFiHJMsVxt52+i0Ha45fjshj6wxYr1r19tB9bw=
 github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw=
 github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
@@ -73,6 +95,7 @@ github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb
 github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
 github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
 github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
+github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg=
 github.com/armon/go-metrics v0.3.0/go.mod h1:zXjbSimjXTd7vOpY8B0/2LpvNvDoXBuplAD+gJD3GYs=
 github.com/armon/go-metrics v0.3.3/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
 github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
@@ -80,6 +103,7 @@ github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgI
 github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
 github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
 github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
+github.com/aws/aws-sdk-go v1.25.41/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
 github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
 github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
 github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
@@ -90,6 +114,7 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB
 github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA=
 github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
 github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
+github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
 github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23 h1:D21IyuvjDCshj1/qq+pCNd3VZOAEI9jy6Bi131YlXgI=
 github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
 github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
@@ -120,9 +145,12 @@ github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv
 github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
 github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
 github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc=
+github.com/coredns/coredns v1.1.2/go.mod h1:zASH/MVDgR6XZTbxvOnsZfffS+31vg6Ackf/wo1+AM0=
 github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
 github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
 github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
+github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
 github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
 github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
@@ -135,6 +163,7 @@ github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzA
 github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
 github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
 github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
 github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
 github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
@@ -154,10 +183,17 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/denisenkom/go-mssqldb v0.0.0-20190707035753-2be1aa521ff4/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM=
 github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
+github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
+github.com/digitalocean/godo v1.1.1/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU=
+github.com/digitalocean/godo v1.10.0/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU=
+github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8=
+github.com/dnaeon/go-vcr v0.0.0-20180814043457-aafff18a5cc2/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
+github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
 github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
 github.com/docker/docker v1.4.2-0.20200319182547-c7ad2b866182/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
 github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
 github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
@@ -165,16 +201,26 @@ github.com/dubbogo/go-zookeeper v1.0.3 h1:UkuY+rBsxdT7Bs63QAzp9z7XqQ53W1j8E5rwl8
 github.com/dubbogo/go-zookeeper v1.0.3/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c=
 github.com/dubbogo/gost v1.9.0/go.mod h1:pPTjVyoJan3aPxBPNUX0ADkXjPibLo+/Ib0/fADXSG8=
 github.com/dubbogo/gost v1.10.1/go.mod h1:+mQGS51XQEUWZP2JeGZTxJwipjRKtJO7Tr+FOg+72rI=
+github.com/dubbogo/gost v1.11.11/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
 github.com/dubbogo/gost v1.11.12/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
 github.com/dubbogo/gost v1.11.16 h1:fvOw8aKQ0BuUYuD+MaXAYFvT7tg2l7WAS5SL5gZJpFs=
 github.com/dubbogo/gost v1.11.16/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
 github.com/dubbogo/jsonparser v1.0.1/go.mod h1:tYAtpctvSP/tWw4MeelsowSPgXQRVHHWbqL6ynps8jU=
 github.com/dubbogo/net v0.0.3 h1:2k53mh+1U8h1gFjJ8ykzyP4wNdAdgjc5moD+xVHI/AE=
 github.com/dubbogo/net v0.0.3/go.mod h1:B6/ka3g8VzcyrmdCH4VkHP1K0aHeI37FmclS+TCwIBU=
+github.com/dubbogo/net v0.0.4 h1:Rn9aMPZwOiRE22YhtxmDEE3H0Q3cfVRNhuEjNMelJ/8=
+github.com/dubbogo/net v0.0.4/go.mod h1:1CGOnM7X3he+qgGNqjeADuE5vKZQx/eMSeUkpU3ujIc=
+github.com/dubbogo/tools v0.0.0-20210904062635-52955e96a32f h1:lkv9d9aqTUZ9tflQTFFI4ua0vvPWWC1SRYOdYxX58Fw=
+github.com/dubbogo/tools v0.0.0-20210904062635-52955e96a32f/go.mod h1:Sm3d16Zjq/7VoCSWboQYv4X9suHpkj+FsMdEDApf1pc=
+github.com/dubbogo/tools v0.0.0-20210904063948-bc36609f1519 h1:hFnavSFYADrEdk+2deWsXAKhtCd1HDzIUeTwIxVgm50=
+github.com/dubbogo/tools v0.0.0-20210904063948-bc36609f1519/go.mod h1:4khZ5JiSe4cYdLLYkxoOTW+Ccsffw7ic6TnAqHWpSyo=
+github.com/dubbogo/triple v1.0.1/go.mod h1:O6vQD2XLCWugzAk0P27HTW4+Uhkd8sjaQn0BZijdGzU=
 github.com/dubbogo/triple v1.0.6-0.20210822081945-0b88cc0d10df h1:YSfvAnU0ebwLqWnD+5HTTsFhqA+aE4Si2c10zBsUW7c=
 github.com/dubbogo/triple v1.0.6-0.20210822081945-0b88cc0d10df/go.mod h1:tCl0mV54+V8Br9z71sFbS1IQUG41QKZUrW6FGaLheM0=
 github.com/dubbogo/triple v1.0.6-0.20210826093718-8b877016f3bf h1:lj0hNwbjk7UpqyEYo6Kz4poTH4w5UfyqI4Gl6x3HEqo=
 github.com/dubbogo/triple v1.0.6-0.20210826093718-8b877016f3bf/go.mod h1:tCl0mV54+V8Br9z71sFbS1IQUG41QKZUrW6FGaLheM0=
+github.com/dubbogo/triple v1.0.6-0.20210904050749-5721796f3fd6 h1:ZrCFQ/a0rgK5EBF9FiiSYvCmtC2sLzOoFAbqBVmsA94=
+github.com/dubbogo/triple v1.0.6-0.20210904050749-5721796f3fd6/go.mod h1:KbfU/uZDv+fJEqXYK3qI8m1iuBQ309QxiC0tvTf2pog=
 github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
 github.com/dvyukov/go-fuzz v0.0.0-20210429054444-fca39067bc72/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw=
@@ -182,6 +228,7 @@ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5m
 github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
 github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
 github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
+github.com/elazarl/go-bindata-assetfs v0.0.0-20160803192304-e1a2a7ec64b0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
 github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
 github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
 github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633 h1:H2pdYOb3KQ1/YsqVWoWNLQO+fusocsw354rqGTZtAgw=
@@ -196,6 +243,7 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
 github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
 github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw=
 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
+github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
 github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
 github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
 github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
@@ -222,6 +270,7 @@ github.com/go-co-op/gocron v0.1.1/go.mod h1:Y9PWlYqDChf2Nbgg7kfS+ZsXHDTZbMZYPEQ0
 github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w=
 github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
 github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
@@ -234,6 +283,7 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9
 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
 github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
 github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
+github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
 github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI=
 github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
 github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
@@ -313,6 +363,8 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
 github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
+github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
 github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
 github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -320,6 +372,7 @@ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXi
 github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
 github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+github.com/google/tcpproxy v0.0.0-20180808230851-dfa16c61dad2/go.mod h1:DavVbd41y+b7ukKDmlnPR4nGYmkWXR6vHUkjQNiHPBs=
 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
@@ -327,7 +380,9 @@ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
 github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
+github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
 github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
+github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
@@ -349,37 +404,51 @@ github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4G
 github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
 github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU=
 github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
+github.com/hashicorp/consul v1.8.0/go.mod h1:Gg9/UgAQ9rdY3CTvzQZ6g2jcIb7NlIfjI+0pvLk5D1A=
 github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
 github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
+github.com/hashicorp/consul/api v1.5.0/go.mod h1:LqwrLNW876eYSuUOo4ZLHBcdKc038txr/IMfbLPATa4=
 github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
 github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
+github.com/hashicorp/consul/sdk v0.5.0/go.mod h1:fY08Y9z5SvJqevyZNy6WWPXiG3KwBPAvlcdx16zZ0fM=
 github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
 github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-bexpr v0.1.2/go.mod h1:ANbpTX1oAql27TZkKVeW8p1w8NTdnyzPe/0qqPCKohU=
+github.com/hashicorp/go-checkpoint v0.0.0-20171009173528-1545e56e46de/go.mod h1:xIwEieBHERyEvaeKF/TcHh1Hu+lxPM+n2vT1+g9I4m4=
 github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
 github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
+github.com/hashicorp/go-connlimit v0.2.0/go.mod h1:OUj9FGL1tPIhl/2RCfzYHrIiWj+VVPGNyVPnUX8AqS0=
+github.com/hashicorp/go-discover v0.0.0-20200501174627-ad1e96bde088/go.mod h1:vZu6Opqf49xX5lsFAu7iFNewkcVF1sn/wyapZh5ytlg=
 github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
 github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
+github.com/hashicorp/go-hclog v0.9.1/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
 github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
 github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
 github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
 github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
 github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
 github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jUIEJnBlbgKS1N2Q61QkHiZyR1g=
+github.com/hashicorp/go-memdb v1.0.3/go.mod h1:LWQ8R70vPrS4OEY9k28D2z8/Zzyu34NVzeRibGAzHO0=
 github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
+github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
 github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
 github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
 github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
+github.com/hashicorp/go-raftchunking v0.6.1/go.mod h1:cGlg3JtDy7qy6c/3Bu660Mic1JF+7lWqIwCFSb08fX0=
+github.com/hashicorp/go-raftchunking v0.6.3-0.20191002164813-7e9e8525653a/go.mod h1:xbXnmKqX9/+RhPkJ4zrEx4738HacP72aaUPlT2RZ4sU=
 github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
 github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
 github.com/hashicorp/go-retryablehttp v0.6.2/go.mod h1:gEx6HMUGxYYhJScX7W1Il64m6cc2C1mDaW3NQ9sY1FY=
 github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
 github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
 github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
+github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
 github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
 github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A=
 github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
 github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
 github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-uuid v1.0.2-0.20191001231223-f32f5fe8d6a8/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
 github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
 github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
 github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
@@ -389,27 +458,45 @@ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
 github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
 github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/hashicorp/hil v0.0.0-20160711231837-1e86c6b523c5/go.mod h1:KHvg/R2/dPtaePb16oW4qIyzkMxXOL38xjRN64adsts=
 github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
 github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
+github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY=
 github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
+github.com/hashicorp/memberlist v0.2.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
+github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
+github.com/hashicorp/net-rpc-msgpackrpc v0.0.0-20151116020338-a14192a58a69/go.mod h1:/z+jUGRBlwVpUZfjute9jWaF6/HuhjuFQuL1YXzVD1Q=
+github.com/hashicorp/raft v1.1.1/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8=
+github.com/hashicorp/raft v1.1.2-0.20191002163536-9c6bd3e3eb17/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8=
+github.com/hashicorp/raft v1.1.2/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8=
+github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea/go.mod h1:pNv7Wc3ycL6F5oOWn+tPGo2gWD4a5X+yp/ntwdKLjRk=
 github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
+github.com/hashicorp/serf v0.9.0/go.mod h1:YL0HO+FifKOW2u1ke99DGVu1zhcpZzNwrLIqBC7vbYU=
+github.com/hashicorp/serf v0.9.2/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk=
 github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q=
+github.com/hashicorp/vault/api v1.0.5-0.20191108163347-bdd38fca2cff/go.mod h1:Uf8LaHyrYsgVgHzO2tMZKhqRGlL3UJ6XaSwW2EA1Iqo=
 github.com/hashicorp/vault/api v1.0.5-0.20200519221902-385fac77e20f/go.mod h1:euTFbi2YJgwcju3imEt919lhJKF68nN1cQPq3aA+kBE=
 github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M=
+github.com/hashicorp/vault/sdk v0.1.14-0.20191108161836-82f2b5571044/go.mod h1:PcekaFGiPJyHnFy+NZhP6ll650zEw51Ag7g/YEa+EOU=
 github.com/hashicorp/vault/sdk v0.1.14-0.20200519221530-14615acda45f/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
 github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267 h1:e1ok06zGrWJW91rzRroyl5nRNqraaBe4d5hiKcVZuHM=
 github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
 github.com/hashicorp/vault/sdk v0.2.1 h1:S4O6Iv/dyKlE9AUTXGa7VOvZmsCvg36toPKgV4f2P4M=
 github.com/hashicorp/vault/sdk v0.2.1/go.mod h1:WfUiO1vYzfBkz1TmoE4ZGU7HD0T0Cl/rZwaxjBkgN4U=
+github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443/go.mod h1:bEpDU35nTu0ey1EXjwNwPjI9xErAsoOCmcMb9GKvyxo=
 github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
 github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
 github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
 github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
 github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
 github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ=
+github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
 github.com/jackc/pgx v3.6.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
+github.com/jarcoal/httpmock v0.0.0-20180424175123-9c70cfe4a1da/go.mod h1:ks+b9deReOc7jgqp+e7LuFiCBH6Rm5hL32cLcEAArb4=
 github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag=
 github.com/jinzhu/copier v0.0.0-20190625015134-976e0346caa8 h1:mGIXW/lubQ4B+3bXTLxcTMTjUNDqoF6T/HUW9LbFx9s=
 github.com/jinzhu/copier v0.0.0-20190625015134-976e0346caa8/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s=
@@ -422,6 +509,8 @@ github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeY
 github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
+github.com/joyent/triton-go v0.0.0-20180628001255-830d2b111e62/go.mod h1:U+RSyWxWd04xTqnuOQxnai7XGS2PrPY2cfGoDKtMHjA=
+github.com/joyent/triton-go v1.7.1-0.20200416154420-6801d15b779f/go.mod h1:KDSfL7qe5ZfQqvlDMkVjCztbmcpp/c8M77vhQP8ZPvk=
 github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
 github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
@@ -447,6 +536,7 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o
 github.com/knadh/koanf v1.1.1 h1:doO5UBvSXcmngdr/u54HKe+Uz4ZZw0/YHVzSsnE3vD4=
 github.com/knadh/koanf v1.1.1/go.mod h1:xpPTwMhsA/aaQLAilyCCqfpEiY1gpa160AiCuWHJUjY=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -466,6 +556,8 @@ github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
 github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
 github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
 github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
+github.com/linode/linodego v0.7.1/go.mod h1:ga11n3ivecUrPCHN0rANxKmfWBJVkOXfLMZinAbj2sY=
+github.com/linode/linodego v0.10.0/go.mod h1:cziNP7pbvE3mXIPneHj0oRY8L1WtGEIKlZ8LANE4eXA=
 github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
 github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
 github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
@@ -481,14 +573,19 @@ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx
 github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
 github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
 github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
+github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
 github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
 github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
 github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
+github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/mattn/go-sqlite3 v2.0.1+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
+github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
+github.com/miekg/dns v1.1.27/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
 github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
+github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
 github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
 github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
 github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
@@ -496,15 +593,21 @@ github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk
 github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
 github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
 github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
+github.com/mitchellh/go-testing-interface v1.14.0/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=
 github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
 github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
+github.com/mitchellh/hashstructure v0.0.0-20170609045927-2bca23e0e452/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ=
+github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ=
 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
 github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.2.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag=
 github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/mitchellh/pointerstructure v1.0.0/go.mod h1:k4XwG94++jLVsSiTxo7qdIfXA9pj9EAeo0QsNNJOLZ8=
 github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
 github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
 github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -533,11 +636,13 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE
 github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
 github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
 github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
+github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2/go.mod h1:TLb2Sg7HQcgGdloNxkrmtgDNR9uVYF3lfdFIN4Ro6Sk=
 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
 github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
 github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
 github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
 github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
+github.com/olekukonko/tablewriter v0.0.0-20180130162743-b8a9be070da4/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
 github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
@@ -565,6 +670,7 @@ github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxS
 github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
 github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
 github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
+github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c/go.mod h1:otzZQXgoO96RTzDB/Hycg0qZcXZsWJGJRSXbmEIJ+4M=
 github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
 github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
 github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
@@ -602,6 +708,8 @@ github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
+github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
+github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
 github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM=
 github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
@@ -639,13 +747,17 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O
 github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
 github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
 github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
+github.com/rboyer/safeio v0.2.1/go.mod h1:Cq/cEPK+YXFn622lsQ0K4KsPZSPtaptHHEldsy7Fmig=
 github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
+github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03/go.mod h1:gRAiPF5C5Nd0eyyRdqIu9qTiFSoZzpTq727b5B8fkkU=
 github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA=
 github.com/robertkrimen/godocdown v0.0.0-20130622164427-0bfa04905481/go.mod h1:C9WhFzY47SzYBIvzFqSvHIR6ROgDo4TtdTuRaOMjF/s=
 github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
 github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rs/zerolog v1.4.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
+github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
 github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
@@ -653,16 +765,20 @@ github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIH
 github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
 github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
 github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
-github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b h1:gQZ0qzfKHQIybLANtM3mBXNUtOfsCFXeTsnBqCsx1KM=
 github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
+github.com/sean-/conswriter v0.0.0-20180208195008-f5ae3917a627/go.mod h1:7zjs06qF79/FKAJpBvFx3P8Ww4UTIMAe+lpNXDHziac=
+github.com/sean-/pager v0.0.0-20180208200047-666be9bf53b5/go.mod h1:BeybITEsBEg6qbIiqJ6/Bqeq25bCLbL7YFmpaFfJDuM=
 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
 github.com/shima-park/agollo v1.2.6/go.mod h1:pbHN4SgHDd84eTKyhCvG2LjQ+6mcZq/fEkElxL+oRYk=
+github.com/shirou/gopsutil v0.0.0-20181107111621-48177ef5f880/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
 github.com/shirou/gopsutil v3.20.11-0.20201116082039-2fb5da2f2449+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
 github.com/shirou/gopsutil v3.20.11+incompatible h1:LJr4ZQK4mPpIV5gOa4jCOKOGb4ty4DZO54I4FGqIpto=
 github.com/shirou/gopsutil v3.20.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
+github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
 github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
 github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
+github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
@@ -671,17 +787,20 @@ github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d/go.mod h1:Cw4GTlQccdRGSEf6KiMju767x0NEHE0YIVPJSaXjlsw=
 github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
 github.com/soheilhy/cmux v0.1.5-0.20210205191134-5ec6847320e5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0=
 github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
 github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
+github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
 github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
 github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
 github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
 github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
 github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
 github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
 github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
@@ -691,6 +810,7 @@ github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
 github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
 github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
 github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk=
@@ -713,6 +833,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
 github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
 github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
 github.com/tebeka/strftime v0.1.3/go.mod h1:7wJm3dZlpr4l/oVK0t1HYIc4rMzQ2XJlOMIUJUJH6XQ=
+github.com/tencentcloud/tencentcloud-sdk-go v3.0.83+incompatible/go.mod h1:0PfYow01SHPMhKY31xa+EFz2RStxIqj6JFAJS+IkCi4=
+github.com/tent/http-link-go v0.0.0-20130702225549-ac974c61c2f9/go.mod h1:RHkNRtSLfOK7qBTHaeSX1D6BNpI3qw7NTxsmNr4RvN8=
 github.com/tevid/gohamcrest v1.1.1/go.mod h1:3UvtWlqm8j5JbwYZh80D/PVBt0mJ1eJiYgZMibh0H/k=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
@@ -728,6 +850,7 @@ github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGr
 github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
 github.com/ugorji/go v1.2.6 h1:tGiWC9HENWE2tqYycIqFTNorMmFRVhNwCpDOpWqnk8E=
 github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0=
+github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
 github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
 github.com/ugorji/go/codec v1.2.6 h1:7kbGefxLoDBuYXOms4yD7223OpNMMPNPZxXk5TvFcyQ=
 github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw=
@@ -735,6 +858,7 @@ github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/
 github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
 github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
 github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ=
+github.com/vmware/govmomi v0.18.0/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -795,13 +919,16 @@ go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
 golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -814,6 +941,7 @@ golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL
 golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
 golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
 golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
+golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
 golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
 golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
 golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
@@ -824,6 +952,7 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl
 golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
 golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
 golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
 golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
@@ -836,6 +965,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180611182652-db08ff08e862/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -854,7 +984,9 @@ golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR
 golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -893,6 +1025,7 @@ golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5h
 golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -905,12 +1038,16 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190508220229-2d0786266e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190523142557-0e01d883c5c5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -919,6 +1056,7 @@ golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -976,6 +1114,7 @@ golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgw
 golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -983,7 +1122,10 @@ golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtn
 golang.org/x/tools v0.0.0-20191107010934-f79515f33823/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
@@ -1003,6 +1145,7 @@ google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E
 google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
 google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
 google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -1020,6 +1163,7 @@ google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98
 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
 google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
 google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
 google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
@@ -1038,6 +1182,7 @@ google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ij
 google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
 google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
 google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
@@ -1081,8 +1226,10 @@ gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
 gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
+gopkg.in/resty.v1 v1.9.1/go.mod h1:vo52Hzryw9PnPHcJfPsBiFW62XhNx5OczbV9y+IMpgc=
 gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
 gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
 gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
@@ -1121,6 +1268,7 @@ k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
 k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
 k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
 k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
+launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM=
 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
 sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
 sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=

[dubbo-go-samples] 07/14: add triple msgpack sample (#212)

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git

commit 55184c30f26c505c1952429924ad8732da4b1320
Author: 氕氘氚 <cj...@163.com>
AuthorDate: Sat Aug 28 09:04:15 2021 +0800

    add triple msgpack sample (#212)
---
 .run/triple-msgpack-client.run.xml                 | 15 ------
 .run/triple-msgpack-server.run.xml                 | 15 ------
 .run/triple/triple-msgpack-client.run.xml          |  7 ++-
 .run/triple/triple-msgpack-server.run.xml          |  7 ++-
 rpc/dubbo3/msgpack/go-client/cmd/client.go         | 27 +++++-----
 rpc/dubbo3/msgpack/go-client/conf/client.yml       | 33 ------------
 rpc/dubbo3/msgpack/go-client/conf/dubbogo.yml      | 14 +++++
 rpc/dubbo3/msgpack/go-client/conf/log.yml          | 27 ----------
 rpc/dubbo3/msgpack/go-client/pkg/hello.go          | 36 -------------
 rpc/dubbo3/msgpack/go-server/cmd/server.go         | 35 +++++++-----
 rpc/dubbo3/msgpack/go-server/conf/client.yml       | 32 -----------
 rpc/dubbo3/msgpack/go-server/conf/dubbogo.yml      | 18 +++++++
 rpc/dubbo3/msgpack/go-server/conf/log.yml          | 27 ----------
 rpc/dubbo3/msgpack/go-server/conf/server.yml       | 30 -----------
 .../msgpack/go-server/docker/docker-compose.yml    |  9 ----
 .../go-server/docker/docker-compose.yml~merged     |  9 ----
 .../go-server/docker/docker-health-check.sh        | 10 ----
 rpc/dubbo3/msgpack/go-server/pkg/greeter.go        | 46 ----------------
 .../go-server/tests/integration/main_test.go       | 62 ----------------------
 .../tests/integration/userprovider_test.go         | 38 -------------
 20 files changed, 74 insertions(+), 423 deletions(-)

diff --git a/.run/triple-msgpack-client.run.xml b/.run/triple-msgpack-client.run.xml
deleted file mode 100644
index 76d0bf0..0000000
--- a/.run/triple-msgpack-client.run.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="triple-msgpack-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="triple">
-    <module name="dubbo-go-samples" />
-    <working_directory value="$PROJECT_DIR$" />
-    <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/msgpack/go-client/conf/log.yml" />
-      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/msgpack/go-client/conf/client.yml" />
-    </envs>
-    <kind value="PACKAGE" />
-    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/msgpack/go-client/cmd" />
-    <directory value="github.com/apache/dubbo-go-samples/general/dubbo3/api/dubbogo-grpc/server/dubbogo-server/cmd" />
-    <filePath value="$PROJECT_DIR$" />
-    <method v="2" />
-  </configuration>
-</component>
\ No newline at end of file
diff --git a/.run/triple-msgpack-server.run.xml b/.run/triple-msgpack-server.run.xml
deleted file mode 100644
index 5ff8ee6..0000000
--- a/.run/triple-msgpack-server.run.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="triple-msgpack-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="triple">
-    <module name="dubbo-go-samples" />
-    <working_directory value="$PROJECT_DIR$" />
-    <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/msgpack/go-server/conf/log.yml" />
-      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/msgpack/go-server/conf/server.yml" />
-    </envs>
-    <kind value="PACKAGE" />
-    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/msgpack/go-server/cmd" />
-    <directory value="github.com/apache/dubbo-go-samples/general/dubbo3/api/dubbogo-grpc/server/dubbogo-server/cmd" />
-    <filePath value="$PROJECT_DIR$" />
-    <method v="2" />
-  </configuration>
-</component>
\ No newline at end of file
diff --git a/.run/triple/triple-msgpack-client.run.xml b/.run/triple/triple-msgpack-client.run.xml
index d76c342..c120b23 100644
--- a/.run/triple/triple-msgpack-client.run.xml
+++ b/.run/triple/triple-msgpack-client.run.xml
@@ -3,12 +3,11 @@
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/msgpack/go-client/conf/log.yml" />
-      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/msgpack/go-client/conf/client.yml" />
+      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/rpc/dubbo3/msgpack/go-client/conf/dubbogo.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/general/dubbo3/msgpack/go-client/cmd/client.go" />
-    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/msgpack/go-client/cmd" />
+    <filePath value="$PROJECT_DIR$/rpc/dubbo3/msgpack/go-client/cmd/client.go" />
+    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/msgpack/go-client/cmd" />
     <directory value="$PROJECT_DIR$" />
     <method v="2" />
   </configuration>
diff --git a/.run/triple/triple-msgpack-server.run.xml b/.run/triple/triple-msgpack-server.run.xml
index 6e12c1c..ffdc266 100644
--- a/.run/triple/triple-msgpack-server.run.xml
+++ b/.run/triple/triple-msgpack-server.run.xml
@@ -3,12 +3,11 @@
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/msgpack/go-server/conf/log.yml" />
-      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/msgpack/go-server/conf/server.yml" />
+      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/rpc/dubbo3/msgpack/go-server/conf/dubbogo.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/general/dubbo3/msgpack/go-server/cmd/server.go" />
-    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/msgpack/go-server/cmd" />
+    <filePath value="$PROJECT_DIR$/rpc/dubbo3/msgpack/go-server/cmd/server.go" />
+    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/msgpack/go-server/cmd" />
     <directory value="$PROJECT_DIR$" />
     <method v="2" />
   </configuration>
diff --git a/rpc/dubbo3/msgpack/go-client/cmd/client.go b/rpc/dubbo3/msgpack/go-client/cmd/client.go
index 3a52862..d0bc974 100644
--- a/rpc/dubbo3/msgpack/go-client/cmd/client.go
+++ b/rpc/dubbo3/msgpack/go-client/cmd/client.go
@@ -24,24 +24,24 @@ import (
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/grpc"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	"github.com/dubbogo/gost/log"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+	gxlog "github.com/dubbogo/gost/log"
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/general/dubbo3/msgpack/go-client/pkg"
+	"github.com/apache/dubbo-go-samples/api"
 )
 
-var userProvider = new(pkg.UserProvider)
+type UserProvider struct {
+	GetUser func(ctx context.Context, req *api.User) (rsp *api.User, err error)
+}
+
+func (u *UserProvider) Reference() string {
+	return "greeterImpl"
+}
+
+var userProvider = new(UserProvider)
 
 func init() {
 	config.SetConsumerService(userProvider)
@@ -53,8 +53,7 @@ func main() {
 	time.Sleep(3 * time.Second)
 
 	gxlog.CInfo("\n\n\nstart to test dubbo")
-	user := &pkg.User{}
-	err := userProvider.GetUser(context.TODO(), &pkg.User{Name: "laurence"}, user)
+	user, err := userProvider.GetUser(context.TODO(), &api.User{Name: "laurence"})
 	if err != nil {
 		gxlog.CError("error: %v\n", err)
 		os.Exit(1)
diff --git a/rpc/dubbo3/msgpack/go-client/conf/client.yml b/rpc/dubbo3/msgpack/go-client/conf/client.yml
deleted file mode 100644
index 2a1082a..0000000
--- a/rpc/dubbo3/msgpack/go-client/conf/client.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserProvider"
-  module: "dubbo-go3.0 client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "tri"
-    serialization: "msgpack"
-#    url: "dubbo://127.0.0.1:20000" # target server ip:port
-    interface: "com.apache.dubbo.sample.basic.IGreeter"
\ No newline at end of file
diff --git a/rpc/dubbo3/msgpack/go-client/conf/dubbogo.yml b/rpc/dubbo3/msgpack/go-client/conf/dubbogo.yml
new file mode 100644
index 0000000..b33f18c
--- /dev/null
+++ b/rpc/dubbo3/msgpack/go-client/conf/dubbogo.yml
@@ -0,0 +1,14 @@
+dubbo:
+  registries:
+    "demoZK":
+      protocol: "zookeeper"
+      timeout: "3s"
+      address: "127.0.0.1:2181"
+  consumer:
+    registry:
+      - demoZK
+    references:
+      "greeterImpl":
+        protocol: "tri"
+        serialization: "msgpack"
+        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/rpc/dubbo3/msgpack/go-client/conf/log.yml b/rpc/dubbo3/msgpack/go-client/conf/log.yml
deleted file mode 100644
index 8c3f700..0000000
--- a/rpc/dubbo3/msgpack/go-client/conf/log.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-level: "info"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/rpc/dubbo3/msgpack/go-client/pkg/hello.go b/rpc/dubbo3/msgpack/go-client/pkg/hello.go
deleted file mode 100644
index da5c377..0000000
--- a/rpc/dubbo3/msgpack/go-client/pkg/hello.go
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-)
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req *User, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
diff --git a/rpc/dubbo3/msgpack/go-server/cmd/server.go b/rpc/dubbo3/msgpack/go-server/cmd/server.go
index 0664d29..9c956c0 100644
--- a/rpc/dubbo3/msgpack/go-server/cmd/server.go
+++ b/rpc/dubbo3/msgpack/go-server/cmd/server.go
@@ -18,6 +18,7 @@
 package main
 
 import (
+	"context"
 	"fmt"
 	"os"
 	"os/signal"
@@ -26,30 +27,40 @@ import (
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/nacos"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	_ "github.com/dubbogo/triple/pkg/triple"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+	gxlog "github.com/dubbogo/gost/log"
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/general/dubbo3/msgpack/go-server/pkg"
+	"github.com/apache/dubbo-go-samples/api"
 )
 
+type UserProvider struct {
+}
+
+func (u UserProvider) GetUser(ctx context.Context, user *api.User) (*api.User, error) {
+	gxlog.CInfo("req:%#v", user)
+	rsp := api.User{
+		Name:                 "12345",
+		Id:                   "Hello " + user.Name,
+		Age:                  18,
+	}
+	gxlog.CInfo("rsp:%#v", rsp)
+	return &rsp, nil
+}
+
+func (u UserProvider) Reference() string {
+	return "greeterImpl"
+}
+
 var (
 	survivalTimeout = int(3 * time.Second)
 )
 
 func init() {
-	config.SetProviderService(new(pkg.UserProvider))
+	config.SetProviderService(new(UserProvider))
 }
 
 // need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
diff --git a/rpc/dubbo3/msgpack/go-server/conf/client.yml b/rpc/dubbo3/msgpack/go-server/conf/client.yml
deleted file mode 100644
index 144bc66..0000000
--- a/rpc/dubbo3/msgpack/go-server/conf/client.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserProvider"
-  module: "dubbo-go3.0 client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "tri"
-    serialization: "msgpack"
-    interface: "com.apache.dubbo.sample.basic.IGreeter"
diff --git a/rpc/dubbo3/msgpack/go-server/conf/dubbogo.yml b/rpc/dubbo3/msgpack/go-server/conf/dubbogo.yml
new file mode 100644
index 0000000..0b208b4
--- /dev/null
+++ b/rpc/dubbo3/msgpack/go-server/conf/dubbogo.yml
@@ -0,0 +1,18 @@
+dubbo:
+  registries:
+    "demoZK":
+      protocol: "zookeeper"
+      timeout: "3s"
+      address: "127.0.0.1:2181"
+  protocols:
+    "triple":
+      name: "tri"
+      port: 20000
+  provider:
+    registry:
+      - demoZK
+    services:
+      "greeterImpl":
+        protocol: "triple"
+        serialization: "msgpack"
+        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/rpc/dubbo3/msgpack/go-server/conf/log.yml b/rpc/dubbo3/msgpack/go-server/conf/log.yml
deleted file mode 100644
index 8c3f700..0000000
--- a/rpc/dubbo3/msgpack/go-server/conf/log.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-level: "info"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/rpc/dubbo3/msgpack/go-server/conf/server.yml b/rpc/dubbo3/msgpack/go-server/conf/server.yml
deleted file mode 100644
index 8ae95f6..0000000
--- a/rpc/dubbo3/msgpack/go-server/conf/server.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-# dubbo server yaml configure file
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserProvider"
-  module: "dubbo-go3.0 greeter server"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZK":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-
-# service config
-services:
-  "UserProvider":
-    registry: "demoZK"
-    protocol: "tri" # tri is dubbo-go3.0 protocol
-    serialization: "msgpack" # msgpack is serialization type
-    interface: "com.apache.dubbo.sample.basic.IGreeter"
-
-# protocol config
-protocols:
-  "tri":
-    name: "tri"
-    port: 20001
\ No newline at end of file
diff --git a/rpc/dubbo3/msgpack/go-server/docker/docker-compose.yml b/rpc/dubbo3/msgpack/go-server/docker/docker-compose.yml
deleted file mode 100644
index 8724179..0000000
--- a/rpc/dubbo3/msgpack/go-server/docker/docker-compose.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-version: '3'
-
-services:
-  zookeeper:
-    image: zookeeper
-    ports:
-      - 2181:2181
-    restart: on-failure
-
diff --git a/rpc/dubbo3/msgpack/go-server/docker/docker-compose.yml~merged b/rpc/dubbo3/msgpack/go-server/docker/docker-compose.yml~merged
deleted file mode 100644
index 8724179..0000000
--- a/rpc/dubbo3/msgpack/go-server/docker/docker-compose.yml~merged
+++ /dev/null
@@ -1,9 +0,0 @@
-version: '3'
-
-services:
-  zookeeper:
-    image: zookeeper
-    ports:
-      - 2181:2181
-    restart: on-failure
-
diff --git a/rpc/dubbo3/msgpack/go-server/docker/docker-health-check.sh b/rpc/dubbo3/msgpack/go-server/docker/docker-health-check.sh
deleted file mode 100644
index 2cc32c2..0000000
--- a/rpc/dubbo3/msgpack/go-server/docker/docker-health-check.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-curl 127.0.0.1:2181
-res=$?
-passCode=52
-while [ "$res" != "$passCode" ];do
-  sleep 5
-  curl 127.0.0.1:2181
-  res=$?
-done
-
-sleep 5
diff --git a/rpc/dubbo3/msgpack/go-server/pkg/greeter.go b/rpc/dubbo3/msgpack/go-server/pkg/greeter.go
deleted file mode 100644
index 3283212..0000000
--- a/rpc/dubbo3/msgpack/go-server/pkg/greeter.go
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-)
-
-import (
-	"github.com/dubbogo/gost/log"
-)
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-}
-
-type UserProvider struct {
-}
-
-func (u UserProvider) GetUser(ctx context.Context, user *User) (*User, error) {
-	gxlog.CInfo("req:%#v", user)
-	rsp := User{"12345", "Hello " + user.Name, 18}
-	gxlog.CInfo("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u UserProvider) Reference() string {
-	return "UserProvider"
-}
diff --git a/rpc/dubbo3/msgpack/go-server/tests/integration/main_test.go b/rpc/dubbo3/msgpack/go-server/tests/integration/main_test.go
deleted file mode 100644
index d7edc46..0000000
--- a/rpc/dubbo3/msgpack/go-server/tests/integration/main_test.go
+++ /dev/null
@@ -1,62 +0,0 @@
-// +build integration
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package integration
-
-import (
-	"context"
-	"os"
-	"testing"
-	"time"
-)
-
-import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/local"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-)
-
-var userProvider = new(UserProvider)
-
-func TestMain(m *testing.M) {
-	config.SetConsumerService(userProvider)
-	config.Load()
-	time.Sleep(3 * time.Second)
-	os.Exit(m.Run())
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req *User, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
diff --git a/rpc/dubbo3/msgpack/go-server/tests/integration/userprovider_test.go b/rpc/dubbo3/msgpack/go-server/tests/integration/userprovider_test.go
deleted file mode 100644
index 7a08d19..0000000
--- a/rpc/dubbo3/msgpack/go-server/tests/integration/userprovider_test.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// +build integration
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package integration
-
-import (
-	"context"
-	"testing"
-)
-
-import (
-	"github.com/stretchr/testify/assert"
-)
-
-func TestGetUser(t *testing.T) {
-	user := &User{}
-	err := userProvider.GetUser(context.TODO(), &User{Name: "laurence"}, user)
-	assert.Nil(t, err)
-	assert.Equal(t, "12345", user.ID)
-	assert.Equal(t, "Hello laurence", user.Name)
-	assert.Equal(t, int32(18), user.Age)
-}

[dubbo-go-samples] 03/14: Merge pull request #190 from zhaoyunxing92/config-enhance

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git

commit 32789a2685c33d0890a188c53f13db2d5379de8e
Merge: 07bf5ee 62f6d2b
Author: zhaoyunxing <23...@qq.com>
AuthorDate: Wed Aug 4 19:58:27 2021 +0800

    Merge pull request #190 from zhaoyunxing92/config-enhance
    
    add:zk registry

 .run/helloworld-go-server.run.xml                  | 15 ----
 .run/registry/registry-zookeeper-go-client.run.xml | 11 +++
 .run/registry/registry-zookeeper-go-server.run.xml | 11 +++
 go.mod                                             |  2 +
 go.sum                                             | 31 ++++++++-
 registry/zookeeper/go-client/cmd/client.go         |  9 +--
 registry/zookeeper/go-client/conf/application.yml  | 20 ++++++
 registry/zookeeper/go-client/conf/client.yml       | 59 ----------------
 registry/zookeeper/go-client/conf/log.yml          | 27 --------
 registry/zookeeper/go-client/pkg/user.go           |  6 ++
 registry/zookeeper/go-server/cmd/server.go         | 15 ++--
 registry/zookeeper/go-server/conf/client.yml       | 59 ----------------
 registry/zookeeper/go-server/conf/log.yml          | 27 --------
 registry/zookeeper/go-server/conf/server.yml       | 79 +++++++---------------
 registry/zookeeper/go-server/pkg/user.go           |  5 ++
 15 files changed, 119 insertions(+), 257 deletions(-)

[dubbo-go-samples] 13/14: Config enhance rpc dubbo (#213)

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git

commit 9cf47225f6a03123e9f371174d47ee544f0e2be8
Author: sunrui1225 <sr...@163.com>
AuthorDate: Sat Sep 4 14:14:35 2021 +0800

    Config enhance rpc dubbo (#213)
    
    * Config enhance: rpc samples dubbo
    
    * Config enhance rpc dubbo:add README.md
    
    * Config enhance: rpc samples dubbo,reimport ,update logger, update java file
    
    * Config enhance rpc dubbo: add run.sh, update README.md
    
    * Config enhance rpc dubbo: update user provider interface specification
    
    Co-authored-by: ruishansun <ru...@creditease.cn>
---
 .../rpc/dubbo}/docker/docker-compose.yml           |   0
 .../rpc/dubbo}/docker/docker-health-check.sh       |   0
 .../rpc/dubbo}/tests/integration/main_test.go      |   0
 .../dubbo}/tests/integration/userprovider_test.go  |   0
 rpc/dubbo/README.md                                |  23 ++
 rpc/dubbo/README_zh.md                             |  22 +
 rpc/dubbo/go-client/cmd/client.go                  |  71 ++--
 rpc/dubbo/go-client/conf/client.yml                |  56 ---
 rpc/dubbo/go-client/conf/dubbogo.yml               |  15 +
 rpc/dubbo/go-client/pkg/user.go                    |  24 +-
 rpc/dubbo/go-server/cmd/server.go                  |  12 +-
 rpc/dubbo/go-server/conf/client.yml                |  58 ---
 rpc/dubbo/go-server/conf/dubbogo.yml               |  26 ++
 rpc/dubbo/go-server/conf/server.yml                |  55 ---
 rpc/dubbo/go-server/pkg/user_provider.go           |  18 +-
 rpc/dubbo/java-client/2.6/run.sh                   |   2 +
 .../src/main/java/org/apache/dubbo/Consumer.java   | 454 ++++++++++-----------
 rpc/dubbo/java-client/2.7/run.sh                   |   2 +
 .../src/main/java/org/apache/dubbo/Consumer.java   | 454 ++++++++++-----------
 rpc/dubbo/java-server/2.6/run.sh                   |   2 +
 .../main/java/org/apache/dubbo/UserProvider.java   | 102 ++---
 .../org/apache/dubbo/UserProviderAnotherImpl.java  | 290 ++++++-------
 .../java/org/apache/dubbo/UserProviderImpl.java    | 234 +++++------
 rpc/dubbo/java-server/2.7/run.sh                   |   2 +
 .../main/java/org/apache/dubbo/UserProvider.java   | 102 ++---
 .../org/apache/dubbo/UserProviderAnotherImpl.java  | 290 ++++++-------
 .../java/org/apache/dubbo/UserProviderImpl.java    | 234 +++++------
 27 files changed, 1235 insertions(+), 1313 deletions(-)

diff --git a/rpc/dubbo/go-server/docker/docker-compose.yml b/integrate_test/rpc/dubbo/docker/docker-compose.yml
similarity index 100%
rename from rpc/dubbo/go-server/docker/docker-compose.yml
rename to integrate_test/rpc/dubbo/docker/docker-compose.yml
diff --git a/rpc/dubbo/go-server/docker/docker-health-check.sh b/integrate_test/rpc/dubbo/docker/docker-health-check.sh
similarity index 100%
rename from rpc/dubbo/go-server/docker/docker-health-check.sh
rename to integrate_test/rpc/dubbo/docker/docker-health-check.sh
diff --git a/rpc/dubbo/go-server/tests/integration/main_test.go b/integrate_test/rpc/dubbo/tests/integration/main_test.go
similarity index 100%
rename from rpc/dubbo/go-server/tests/integration/main_test.go
rename to integrate_test/rpc/dubbo/tests/integration/main_test.go
diff --git a/rpc/dubbo/go-server/tests/integration/userprovider_test.go b/integrate_test/rpc/dubbo/tests/integration/userprovider_test.go
similarity index 100%
rename from rpc/dubbo/go-server/tests/integration/userprovider_test.go
rename to integrate_test/rpc/dubbo/tests/integration/userprovider_test.go
diff --git a/rpc/dubbo/README.md b/rpc/dubbo/README.md
new file mode 100644
index 0000000..c2c7fdc
--- /dev/null
+++ b/rpc/dubbo/README.md
@@ -0,0 +1,23 @@
+# RPC Dubbo for Dubbo-go 3.0
+
+For api definition and go client and server startup, please refer to [dubbo-go 3.0 quickstart](https://dubbogo.github.io/zh-cn/docs/user/quickstart/3.0/quickstart.html)
+
+## Instructions
+1. Start zookeeper
+
+2. Start the server
+
+Use goland to start rpc-dubbo-go-server
+
+or
+
+Execute `sh run.sh` in the java-server folder to start the java server
+
+3. Start the client
+
+Use goland to start rpc-dubbo-go-client
+
+or
+
+Execute `sh run.sh` under the java-client folder to start the java client
+
diff --git a/rpc/dubbo/README_zh.md b/rpc/dubbo/README_zh.md
new file mode 100644
index 0000000..56490bd
--- /dev/null
+++ b/rpc/dubbo/README_zh.md
@@ -0,0 +1,22 @@
+# RPC Dubbo for Dubbo-go 3.0
+
+api 定义以及 go 客户端、服务端启动,可以参考 [dubbo-go 3.0 快速开始](https://dubbogo.github.io/zh-cn/docs/user/quickstart/3.0/quickstart.html)
+
+## 使用方法
+1. 启动 zookeeper
+
+2. 启动服务端
+
+使用 goland 启动 rpc-dubbo-go-server
+
+或者
+
+在 java-server 文件夹下执行 `sh run.sh` 启动 java server
+
+3. 启动客户端
+
+使用 goland 启动 rpc-dubbo-go-client
+
+或者
+
+在 java-client 文件夹下执行 `sh run.sh` 启动 java client
diff --git a/rpc/dubbo/go-client/cmd/client.go b/rpc/dubbo/go-client/cmd/client.go
index dcd1939..03a78fd 100644
--- a/rpc/dubbo/go-client/cmd/client.go
+++ b/rpc/dubbo/go-client/cmd/client.go
@@ -23,18 +23,10 @@ import (
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log"
 )
 
 import (
@@ -45,7 +37,7 @@ var (
 	userProvider = new(pkg.UserProvider)
 )
 
-// need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
+// need to setup environment variable "DUBBO_GO_CONFIG_PATH" to "conf/dubbogo.yml" before run
 func main() {
 	hessian.RegisterJavaEnum(pkg.Gender(pkg.MAN))
 	hessian.RegisterJavaEnum(pkg.Gender(pkg.WOMAN))
@@ -57,84 +49,77 @@ func main() {
 
 	time.Sleep(6 * time.Second)
 
-	gxlog.CInfo("\n\ntest")
+	logger.Info("\n\ntest")
 	test()
 }
 
 func test() {
-	gxlog.CInfo("\n\n\necho")
+	logger.Info("\n\n\necho")
 	res, err := userProvider.Echo(context.TODO(), "OK")
 	if err != nil {
 		panic(err)
 	}
-	gxlog.CInfo("res: %v\n", res)
+	logger.Info("res: %v\n", res)
 
-	gxlog.CInfo("\n\n\nstart to test dubbo")
+	logger.Info("\n\n\nstart to test dubbo")
 	user := &pkg.User{}
-	err = userProvider.GetUser(context.TODO(), []interface{}{"A003"}, user)
+	user, err = userProvider.GetUser(context.TODO(), []interface{}{"A003"})
 	if err != nil {
 		panic(err)
 	}
-	gxlog.CInfo("response result: %v", user)
+	logger.Info("response result: %v", user)
 
-	gxlog.CInfo("\n\n\nstart to test dubbo - enum")
+	logger.Info("\n\n\nstart to test dubbo - enum")
 	gender, err := userProvider.GetGender(1)
 	if err != nil {
-		gxlog.CInfo("error: %v", err)
+		logger.Info("error: %v", err)
 	} else {
-		gxlog.CInfo("response result: %v", gender)
+		logger.Info("response result: %v", gender)
 	}
 
-	gxlog.CInfo("\n\n\nstart to test dubbo - GetUser0")
+	logger.Info("\n\n\nstart to test dubbo - GetUser0")
 	ret, err := userProvider.GetUser0("A003", "Moorse")
 	if err != nil {
 		panic(err)
 	}
-	gxlog.CInfo("response result: %v", ret)
+	logger.Info("response result: %v", ret)
 
-	gxlog.CInfo("\n\n\nstart to test dubbo - GetUsers")
+	logger.Info("\n\n\nstart to test dubbo - GetUsers")
 	ret1, err := userProvider.GetUsers([]interface{}{[]interface{}{"A002", "A003"}})
 	if err != nil {
 		panic(err)
 	}
-	gxlog.CInfo("response result: %v", ret1)
+	logger.Info("response result: %v", ret1)
 
-	gxlog.CInfo("\n\n\nstart to test dubbo - getUser")
+	logger.Info("\n\n\nstart to test dubbo - getUser")
 	user = &pkg.User{}
 	var i int32 = 1
-	err = userProvider.GetUser2(context.TODO(), []interface{}{i}, user)
+	user, err = userProvider.GetUser2(context.TODO(), []interface{}{i})
 	if err != nil {
 		panic(err)
 	}
-	gxlog.CInfo("response result: %v", user)
+	logger.Info("response result: %v", user)
 
-	gxlog.CInfo("\n\n\nstart to test dubbo - getUser - overload")
+	logger.Info("\n\n\nstart to test dubbo - getUser - overload")
 	user = &pkg.User{}
-	err = userProvider.GetUser2(context.TODO(), []interface{}{i, "overload"}, user)
-	if err != nil {
-		panic(err)
-	}
-	gxlog.CInfo("response result: %v", user)
-
-	gxlog.CInfo("\n\n\nstart to test dubbo - GetUser3")
-	err = userProvider.GetUser3()
+	user, err = userProvider.GetUser2(context.TODO(), []interface{}{i, "overload"})
 	if err != nil {
 		panic(err)
 	}
-	gxlog.CInfo("succ!")
+	logger.Info("response result: %v", user)
 
-	gxlog.CInfo("\n\n\nstart to test dubbo - getErr")
+	logger.Info("\n\n\nstart to test dubbo - getErr")
 	user = &pkg.User{}
-	err = userProvider.GetErr(context.TODO(), []interface{}{"A003"}, user)
+	user, err = userProvider.GetErr(context.TODO(), []interface{}{"A003"})
 	if err == nil {
 		panic("err is nil")
 	}
-	gxlog.CInfo("getErr - error: %v", err)
+	logger.Info("getErr - error: %v", err)
 
-	gxlog.CInfo("\n\n\nstart to test dubbo illegal method")
-	err = userProvider.GetUser1(context.TODO(), []interface{}{"A003"}, user)
+	logger.Info("\n\n\nstart to test dubbo illegal method")
+	user, err = userProvider.GetUser1(context.TODO(), []interface{}{"A003"})
 	if err == nil {
 		panic("err is nil")
 	}
-	gxlog.CInfo("error: %v", err)
+	logger.Info("error: %v", err)
 }
diff --git a/rpc/dubbo/go-client/conf/client.yml b/rpc/dubbo/go-client/conf/client.yml
deleted file mode 100644
index d744d39..0000000
--- a/rpc/dubbo/go-client/conf/client.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoConsumer"
-  module: "dubbo-go user-info client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/rpc/dubbo/go-client/conf/dubbogo.yml b/rpc/dubbo/go-client/conf/dubbogo.yml
new file mode 100644
index 0000000..e1e64cd
--- /dev/null
+++ b/rpc/dubbo/go-client/conf/dubbogo.yml
@@ -0,0 +1,15 @@
+# dubbo client yaml configure file
+
+dubbo:
+  registries:
+    "demoZK":
+      protocol: "zookeeper"
+      timeout: "3s"
+      address: "127.0.0.1:2181"
+  consumer:
+    registry:
+      - demoZK
+    references:
+      "UserProvider":
+        protocol: "dubbo"
+        interface: "org.apache.dubbo.UserProvider"
\ No newline at end of file
diff --git a/rpc/dubbo/go-client/pkg/user.go b/rpc/dubbo/go-client/pkg/user.go
index 14ef525..12624ac 100644
--- a/rpc/dubbo/go-client/pkg/user.go
+++ b/rpc/dubbo/go-client/pkg/user.go
@@ -89,15 +89,15 @@ func (User) JavaClassName() string {
 
 type UserProvider struct {
 	GetUsers func(req []interface{}) ([]interface{}, error)
-	GetErr   func(ctx context.Context, req []interface{}, rsp *User) error
+	GetErr   func(ctx context.Context, req []interface{}) (*User, error)
 
-	GetUserOld func(ctx context.Context, req []interface{}, rsp *User) error
+	GetUser func(ctx context.Context, req []interface{}) (*User, error)
 
 	GetUserNew func(ctx context.Context, req1, req2 *User) (*User, error)
 
 	GetUser0  func(id string, name string) (User, error)
-	GetUser1  func(ctx context.Context, req []interface{}, rsp *User) error
-	GetUser2  func(ctx context.Context, req []interface{}, rsp *User) error `dubbo:"getUser"`
+	GetUser1  func(ctx context.Context, req []interface{}) (*User, error)
+	GetUser2  func(ctx context.Context, req []interface{}) (*User, error) `dubbo:"getUser"`
 	GetUser3  func() error
 	GetGender func(i int32) (Gender, error)
 	Echo      func(ctx context.Context, req interface{}) (interface{}, error) // Echo represent EchoFilter will be used
@@ -109,11 +109,11 @@ func (u *UserProvider) Reference() string {
 
 type UserProvider1 struct {
 	GetUsers func(req []interface{}) ([]interface{}, error)
-	GetErr   func(ctx context.Context, req []interface{}, rsp *User) error
-	GetUser  func(ctx context.Context, req []interface{}, rsp *User) error
+	GetErr   func(ctx context.Context, req []interface{}) (*User, error)
+	GetUser  func(ctx context.Context, req []interface{}) (*User, error)
 	GetUser0 func(id string, name string) (User, error)
-	GetUser1 func(ctx context.Context, req []interface{}, rsp *User) error
-	GetUser2 func(ctx context.Context, req []interface{}, rsp *User) error `dubbo:"getUser"`
+	GetUser1 func(ctx context.Context, req []interface{}) (*User, error)
+	GetUser2 func(ctx context.Context, req []interface{}) (*User, error) `dubbo:"getUser"`
 	GetUser3 func() error
 	Echo     func(ctx context.Context, req interface{}) (interface{}, error) // Echo represent EchoFilter will be used
 }
@@ -124,11 +124,11 @@ func (u *UserProvider1) Reference() string {
 
 type UserProvider2 struct {
 	GetUsers func(req []interface{}) ([]interface{}, error)
-	GetErr   func(ctx context.Context, req []interface{}, rsp *User) error
-	GetUser  func(ctx context.Context, req []interface{}, rsp *User) error
+	GetErr   func(ctx context.Context, req []interface{}) (*User, error)
+	GetUser  func(ctx context.Context, req []interface{}) (*User, error)
 	GetUser0 func(id string, name string) (User, error)
-	GetUser1 func(ctx context.Context, req []interface{}, rsp *User) error
-	GetUser2 func(ctx context.Context, req []interface{}, rsp *User) error `dubbo:"getUser"`
+	GetUser1 func(ctx context.Context, req []interface{}) (*User, error)
+	GetUser2 func(ctx context.Context, req []interface{}) (*User, error) `dubbo:"getUser"`
 	GetUser3 func() error
 	Echo     func(ctx context.Context, req interface{}) (interface{}, error) // Echo represent EchoFilter will be used
 }
diff --git a/rpc/dubbo/go-server/cmd/server.go b/rpc/dubbo/go-server/cmd/server.go
index fc74d81..4ec1bbb 100644
--- a/rpc/dubbo/go-server/cmd/server.go
+++ b/rpc/dubbo/go-server/cmd/server.go
@@ -26,17 +26,9 @@ import (
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/local"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 	hessian "github.com/apache/dubbo-go-hessian2"
 )
 
@@ -48,7 +40,7 @@ var (
 	survivalTimeout = int(3e9)
 )
 
-// need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
+// need to setup environment variable "DUBBO_GO_CONFIG_PATH" to "conf/dubbogo.yml" before run
 func main() {
 
 	// ------for hessian2------
diff --git a/rpc/dubbo/go-server/conf/client.yml b/rpc/dubbo/go-server/conf/client.yml
deleted file mode 100644
index f8c56cb..0000000
--- a/rpc/dubbo/go-server/conf/client.yml
+++ /dev/null
@@ -1,58 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoTest"
-  module: "dubbo-go user-info client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/rpc/dubbo/go-server/conf/dubbogo.yml b/rpc/dubbo/go-server/conf/dubbogo.yml
new file mode 100644
index 0000000..622609d
--- /dev/null
+++ b/rpc/dubbo/go-server/conf/dubbogo.yml
@@ -0,0 +1,26 @@
+# dubbo server yaml configure file
+
+dubbo:
+  registries:
+    "demoZK":
+      protocol: "zookeeper"
+      timeout: "3s"
+      address: "127.0.0.1:2181"
+  protocols:
+    "dubbo":
+      name: "dubbo"
+      port: 20000
+  provider:
+    registry:
+      - demoZK
+    services:
+      "UserProvider":
+        protocol: "dubbo"
+        interface: "org.apache.dubbo.UserProvider"
+        loadbalance: "random"
+        warmup: "100"
+        cluster: "failover"
+        methods:
+          - name: "GetUser"
+            retries: 1
+            loadbalance: "random"
diff --git a/rpc/dubbo/go-server/conf/server.yml b/rpc/dubbo/go-server/conf/server.yml
deleted file mode 100644
index af90434..0000000
--- a/rpc/dubbo/go-server/conf/server.yml
+++ /dev/null
@@ -1,55 +0,0 @@
-# dubbo server yaml configure file
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoServer"
-  module: "dubbo-go user-info server"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-
-# service config
-services:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    loadbalance: "random"
-    warmup: "100"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 1
-        loadbalance: "random"
-
-# protocol config
-protocols:
-  "dubbo":
-    name: "dubbo"
-    port: 20000
-
-protocol_conf:
-  dubbo:
-    session_number: 700
-    session_timeout: "180s"
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "server"
diff --git a/rpc/dubbo/go-server/pkg/user_provider.go b/rpc/dubbo/go-server/pkg/user_provider.go
index 243ddd2..f65a581 100644
--- a/rpc/dubbo/go-server/pkg/user_provider.go
+++ b/rpc/dubbo/go-server/pkg/user_provider.go
@@ -49,7 +49,7 @@ func (u *UserProvider) getUser(userID string) (*User, error) {
 	return nil, fmt.Errorf("invalid user id:%s", userID)
 }
 
-func (u *UserProvider) GetUser(ctx context.Context, req []interface{}, rsp *User) error {
+func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
 	var (
 		err  error
 		user *User
@@ -58,10 +58,9 @@ func (u *UserProvider) GetUser(ctx context.Context, req []interface{}, rsp *User
 	gxlog.CInfo("req:%#v", req)
 	user, err = u.getUser(req[0].(string))
 	if err == nil {
-		*rsp = *user
-		gxlog.CInfo("rsp:%#v", rsp)
+		gxlog.CInfo("rsp:%#v", user)
 	}
-	return err
+	return user, err
 }
 
 func (u *UserProvider) GetUser0(id string, name string) (User, error) {
@@ -78,20 +77,21 @@ func (u *UserProvider) GetUser0(id string, name string) (User, error) {
 	return *user, err
 }
 
-func (u *UserProvider) GetUser2(ctx context.Context, req []interface{}, rsp *User) error {
+func (u *UserProvider) GetUser2(ctx context.Context, req []interface{}) (*User, error) {
 	var err error
 
 	gxlog.CInfo("req:%#v", req)
-	rsp.ID = strconv.Itoa(int(req[0].(int32)))
-	return err
+	user := &User{}
+	user.ID = strconv.Itoa(int(req[0].(int32)))
+	return user, err
 }
 
 func (u *UserProvider) GetUser3() error {
 	return nil
 }
 
-func (u *UserProvider) GetErr(ctx context.Context, req []interface{}, rsp *User) error {
-	return java_exception.NewThrowable("exception")
+func (u *UserProvider) GetErr(ctx context.Context, req []interface{}) (*User, error) {
+	return nil, java_exception.NewThrowable("exception")
 }
 
 func (u *UserProvider) GetUsers(req []interface{}) ([]interface{}, error) {
diff --git a/rpc/dubbo/java-client/2.6/run.sh b/rpc/dubbo/java-client/2.6/run.sh
new file mode 100644
index 0000000..df4e2f7
--- /dev/null
+++ b/rpc/dubbo/java-client/2.6/run.sh
@@ -0,0 +1,2 @@
+mvn install -DSkipTests
+mvn exec:java -Dexec.mainClass="org.apache.dubbo.Consumer"
\ No newline at end of file
diff --git a/rpc/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/Consumer.java b/rpc/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/Consumer.java
index 54e5b66..c339ad4 100644
--- a/rpc/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/Consumer.java
+++ b/rpc/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/Consumer.java
@@ -1,227 +1,227 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo;
-
-import com.alibaba.dubbo.rpc.service.EchoService;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-public class Consumer {
-    // Define a private variable (Required in Spring)
-    private static UserProvider userProvider;
-    private static UserProvider userProvider1;
-    private static UserProvider userProvider2;
-
-    public static void main(String[] args) throws Exception {
-        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo.consumer.xml"});
-        userProvider = (UserProvider)context.getBean("userProvider");
-        userProvider1 = (UserProvider)context.getBean("userProvider1");
-        userProvider2 = (UserProvider)context.getBean("userProvider2");
-
-        start();
-    }
-
-    // Start the entry function for consumer (Specified in the configuration file)
-    public static void start() throws Exception {
-        System.out.println("\n\ntest");
-        testGetUser();
-        testGetUsers();
-        System.out.println("\n\ntest1");
-        testGetUser1();
-        testGetUsers1();
-        System.out.println("\n\ntest2");
-        testGetUser2();
-        testGetUsers2();
-        Thread.sleep(2000);
-    }
-
-    private static void testGetUser() throws Exception {
-        try {
-            EchoService echoService = (EchoService)userProvider;
-            Object status = echoService.$echo("OK");
-            System.out.println("echo: "+status);
-            User user1 = userProvider.GetUser("A003");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user1.getID() + ", name:" + user1.getName() + ", sex:" + user1.getSex().toString()
-                    + ", age:" + user1.getAge() + ", time:" + user1.getTime().toString());
-            User user2 = userProvider.GetUser0("A003","Moorse");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user2.getID() + ", name:" + user2.getName() + ", sex:" + user2.getSex().toString()
-                    + ", age:" + user2.getAge() + ", time:" + user2.getTime().toString());
-            User user3 = userProvider.getUser(1);
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user3.getID() + ", name:" + user3.getName() + ", sex:" + user3.getSex().toString()
-                    + ", age:" + user3.getAge() + ", time:" + user3.getTime());
-            User user4 = userProvider.getUser(1, "name");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user4.getID() + ", name:" + user4.getName() + ", sex:" + user4.getSex().toString()
-                    + ", age:" + user4.getAge() + ", time:" + user4.getTime());
-            userProvider.GetUser3();
-            System.out.println("GetUser3 succ");
-
-            User user9 = userProvider.GetUser1("A003");
-        } catch (Throwable e) {
-            System.out.println("*************exception***********");
-            e.printStackTrace();
-        }
-        try {
-            userProvider.GetErr("A003");
-        } catch (Throwable t) {
-            System.out.println("*************exception***********");
-            t.printStackTrace();
-        }
-    }
-
-    private static void testGetUsers() throws Exception {
-        try {
-            List<String> userIDList = new ArrayList<String>();
-            userIDList.add("A001");
-            userIDList.add("A002");
-            userIDList.add("A003");
-
-            List<User> userList = userProvider.GetUsers(userIDList);
-
-            for (int i = 0; i < userList.size(); i++) {
-                User user = userList.get(i);
-                System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                        " UserInfo, ID:" + user.getID() + ", name:" + user.getName() + ", sex:" + user.getSex().toString()
-                        + ", age:" + user.getAge() + ", time:" + user.getTime().toString());
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    private static  void testGetUser1() throws Exception {
-        try {
-            EchoService echoService = (EchoService)userProvider1;
-            Object status = echoService.$echo("OK");
-            System.out.println("echo: "+status);
-            User user1 = userProvider1.GetUser("A003");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user1.getID() + ", name:" + user1.getName() + ", sex:" + user1.getSex().toString()
-                    + ", age:" + user1.getAge() + ", time:" + user1.getTime().toString());
-            User user2 = userProvider1.GetUser0("A003","Moorse");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user2.getID() + ", name:" + user2.getName() + ", sex:" + user2.getSex().toString()
-                    + ", age:" + user2.getAge() + ", time:" + user2.getTime().toString());
-            User user3 = userProvider1.getUser(1);
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user3.getID() + ", name:" + user3.getName() + ", sex:" + user3.getSex().toString()
-                    + ", age:" + user3.getAge() + ", time:" + user3.getTime());
-            User user4 = userProvider1.getUser(1, "name");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user4.getID() + ", name:" + user4.getName() + ", sex:" + user4.getSex().toString()
-                    + ", age:" + user4.getAge() + ", time:" + user4.getTime());
-            userProvider1.GetUser3();
-            System.out.println("GetUser3 succ");
-
-            User user9 = userProvider1.GetUser1("A003");
-        } catch (Throwable e) {
-            System.out.println("*************exception***********");
-            e.printStackTrace();
-        }
-        try {
-            userProvider1.GetErr("A003");
-        } catch (Throwable t) {
-            System.out.println("*************exception***********");
-            t.printStackTrace();
-        }
-    }
-
-    private static  void testGetUsers1() throws Exception {
-        try {
-            List<String> userIDList = new ArrayList<String>();
-            userIDList.add("A001");
-            userIDList.add("A002");
-            userIDList.add("A003");
-
-            List<User> userList = userProvider1.GetUsers(userIDList);
-
-            for (int i = 0; i < userList.size(); i++) {
-                User user = userList.get(i);
-                System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                        " UserInfo, ID:" + user.getID() + ", name:" + user.getName() + ", sex:" + user.getSex().toString()
-                        + ", age:" + user.getAge() + ", time:" + user.getTime().toString());
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    private static void testGetUser2() throws Exception {
-        try {
-            EchoService echoService = (EchoService)userProvider2;
-            Object status = echoService.$echo("OK");
-            System.out.println("echo: "+status);
-            User user1 = userProvider2.GetUser("A003");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user1.getID() + ", name:" + user1.getName() + ", sex:" + user1.getSex().toString()
-                    + ", age:" + user1.getAge() + ", time:" + user1.getTime().toString());
-            User user2 = userProvider2.GetUser0("A003","Moorse");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user2.getID() + ", name:" + user2.getName() + ", sex:" + user2.getSex().toString()
-                    + ", age:" + user2.getAge() + ", time:" + user2.getTime().toString());
-            User user3 = userProvider2.getUser(1);
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user3.getID() + ", name:" + user3.getName() + ", sex:" + user3.getSex().toString()
-                    + ", age:" + user3.getAge() + ", time:" + user3.getTime());
-            User user4 = userProvider2.getUser(1, "name");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user4.getID() + ", name:" + user4.getName() + ", sex:" + user4.getSex().toString()
-                    + ", age:" + user4.getAge() + ", time:" + user4.getTime());
-            userProvider2.GetUser3();
-            System.out.println("GetUser3 succ");
-
-            User user9 = userProvider2.GetUser1("A003");
-        } catch (Throwable e) {
-            System.out.println("*************exception***********");
-            e.printStackTrace();
-        }
-        try {
-            userProvider2.GetErr("A003");
-        } catch (Throwable t) {
-            System.out.println("*************exception***********");
-            t.printStackTrace();
-        }
-    }
-
-    private static void testGetUsers2() throws Exception {
-        try {
-            List<String> userIDList = new ArrayList<String>();
-            userIDList.add("A001");
-            userIDList.add("A002");
-            userIDList.add("A003");
-
-            List<User> userList = userProvider2.GetUsers(userIDList);
-
-            for (int i = 0; i < userList.size(); i++) {
-                User user = userList.get(i);
-                System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                        " UserInfo, ID:" + user.getID() + ", name:" + user.getName() + ", sex:" + user.getSex().toString()
-                        + ", age:" + user.getAge() + ", time:" + user.getTime().toString());
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo;
+
+import com.alibaba.dubbo.rpc.service.EchoService;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class Consumer {
+    // Define a private variable (Required in Spring)
+    private static UserProvider userProvider;
+    private static UserProvider userProvider1;
+    private static UserProvider userProvider2;
+
+    public static void main(String[] args) throws Exception {
+        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo.consumer.xml"});
+        userProvider = (UserProvider)context.getBean("userProvider");
+        userProvider1 = (UserProvider)context.getBean("userProvider1");
+        userProvider2 = (UserProvider)context.getBean("userProvider2");
+
+        start();
+    }
+
+    // Start the entry function for consumer (Specified in the configuration file)
+    public static void start() throws Exception {
+        System.out.println("\n\ntest");
+        testGetUser();
+        testGetUsers();
+        System.out.println("\n\ntest1");
+        testGetUser1();
+        testGetUsers1();
+        System.out.println("\n\ntest2");
+        testGetUser2();
+        testGetUsers2();
+        Thread.sleep(2000);
+    }
+
+    private static void testGetUser() throws Exception {
+        try {
+            EchoService echoService = (EchoService)userProvider;
+            Object status = echoService.$echo("OK");
+            System.out.println("echo: "+status);
+            User user1 = userProvider.GetUser("A003");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user1.getId() + ", name:" + user1.getName() + ", sex:" + user1.getSex().toString()
+                    + ", age:" + user1.getAge() + ", time:" + user1.getTime().toString());
+            User user2 = userProvider.GetUser0("A003","Moorse");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user2.getId() + ", name:" + user2.getName() + ", sex:" + user2.getSex().toString()
+                    + ", age:" + user2.getAge() + ", time:" + user2.getTime().toString());
+            User user3 = userProvider.getUser(1);
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user3.getId() + ", name:" + user3.getName() + ", sex:" + user3.getSex().toString()
+                    + ", age:" + user3.getAge() + ", time:" + user3.getTime());
+            User user4 = userProvider.getUser(1, "name");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user4.getId() + ", name:" + user4.getName() + ", sex:" + user4.getSex().toString()
+                    + ", age:" + user4.getAge() + ", time:" + user4.getTime());
+            userProvider.GetUser3();
+            System.out.println("GetUser3 succ");
+
+            User user9 = userProvider.GetUser1("A003");
+        } catch (Throwable e) {
+            System.out.println("*************exception***********");
+            e.printStackTrace();
+        }
+        try {
+            userProvider.GetErr("A003");
+        } catch (Throwable t) {
+            System.out.println("*************exception***********");
+            t.printStackTrace();
+        }
+    }
+
+    private static void testGetUsers() throws Exception {
+        try {
+            List<String> userIDList = new ArrayList<String>();
+            userIDList.add("A001");
+            userIDList.add("A002");
+            userIDList.add("A003");
+
+            List<User> userList = userProvider.GetUsers(userIDList);
+
+            for (int i = 0; i < userList.size(); i++) {
+                User user = userList.get(i);
+                System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                        " UserInfo, ID:" + user.getId() + ", name:" + user.getName() + ", sex:" + user.getSex().toString()
+                        + ", age:" + user.getAge() + ", time:" + user.getTime().toString());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static  void testGetUser1() throws Exception {
+        try {
+            EchoService echoService = (EchoService)userProvider1;
+            Object status = echoService.$echo("OK");
+            System.out.println("echo: "+status);
+            User user1 = userProvider1.GetUser("A003");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user1.getId() + ", name:" + user1.getName() + ", sex:" + user1.getSex().toString()
+                    + ", age:" + user1.getAge() + ", time:" + user1.getTime().toString());
+            User user2 = userProvider1.GetUser0("A003","Moorse");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user2.getId() + ", name:" + user2.getName() + ", sex:" + user2.getSex().toString()
+                    + ", age:" + user2.getAge() + ", time:" + user2.getTime().toString());
+            User user3 = userProvider1.getUser(1);
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user3.getId() + ", name:" + user3.getName() + ", sex:" + user3.getSex().toString()
+                    + ", age:" + user3.getAge() + ", time:" + user3.getTime());
+            User user4 = userProvider1.getUser(1, "name");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user4.getId() + ", name:" + user4.getName() + ", sex:" + user4.getSex().toString()
+                    + ", age:" + user4.getAge() + ", time:" + user4.getTime());
+            userProvider1.GetUser3();
+            System.out.println("GetUser3 succ");
+
+            User user9 = userProvider1.GetUser1("A003");
+        } catch (Throwable e) {
+            System.out.println("*************exception***********");
+            e.printStackTrace();
+        }
+        try {
+            userProvider1.GetErr("A003");
+        } catch (Throwable t) {
+            System.out.println("*************exception***********");
+            t.printStackTrace();
+        }
+    }
+
+    private static  void testGetUsers1() throws Exception {
+        try {
+            List<String> userIDList = new ArrayList<String>();
+            userIDList.add("A001");
+            userIDList.add("A002");
+            userIDList.add("A003");
+
+            List<User> userList = userProvider1.GetUsers(userIDList);
+
+            for (int i = 0; i < userList.size(); i++) {
+                User user = userList.get(i);
+                System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                        " UserInfo, ID:" + user.getId() + ", name:" + user.getName() + ", sex:" + user.getSex().toString()
+                        + ", age:" + user.getAge() + ", time:" + user.getTime().toString());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void testGetUser2() throws Exception {
+        try {
+            EchoService echoService = (EchoService)userProvider2;
+            Object status = echoService.$echo("OK");
+            System.out.println("echo: "+status);
+            User user1 = userProvider2.GetUser("A003");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user1.getId() + ", name:" + user1.getName() + ", sex:" + user1.getSex().toString()
+                    + ", age:" + user1.getAge() + ", time:" + user1.getTime().toString());
+            User user2 = userProvider2.GetUser0("A003","Moorse");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user2.getId() + ", name:" + user2.getName() + ", sex:" + user2.getSex().toString()
+                    + ", age:" + user2.getAge() + ", time:" + user2.getTime().toString());
+            User user3 = userProvider2.getUser(1);
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user3.getId() + ", name:" + user3.getName() + ", sex:" + user3.getSex().toString()
+                    + ", age:" + user3.getAge() + ", time:" + user3.getTime());
+            User user4 = userProvider2.getUser(1, "name");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user4.getId() + ", name:" + user4.getName() + ", sex:" + user4.getSex().toString()
+                    + ", age:" + user4.getAge() + ", time:" + user4.getTime());
+            userProvider2.GetUser3();
+            System.out.println("GetUser3 succ");
+
+            User user9 = userProvider2.GetUser1("A003");
+        } catch (Throwable e) {
+            System.out.println("*************exception***********");
+            e.printStackTrace();
+        }
+        try {
+            userProvider2.GetErr("A003");
+        } catch (Throwable t) {
+            System.out.println("*************exception***********");
+            t.printStackTrace();
+        }
+    }
+
+    private static void testGetUsers2() throws Exception {
+        try {
+            List<String> userIDList = new ArrayList<String>();
+            userIDList.add("A001");
+            userIDList.add("A002");
+            userIDList.add("A003");
+
+            List<User> userList = userProvider2.GetUsers(userIDList);
+
+            for (int i = 0; i < userList.size(); i++) {
+                User user = userList.get(i);
+                System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                        " UserInfo, ID:" + user.getId() + ", name:" + user.getName() + ", sex:" + user.getSex().toString()
+                        + ", age:" + user.getAge() + ", time:" + user.getTime().toString());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/rpc/dubbo/java-client/2.7/run.sh b/rpc/dubbo/java-client/2.7/run.sh
new file mode 100644
index 0000000..df4e2f7
--- /dev/null
+++ b/rpc/dubbo/java-client/2.7/run.sh
@@ -0,0 +1,2 @@
+mvn install -DSkipTests
+mvn exec:java -Dexec.mainClass="org.apache.dubbo.Consumer"
\ No newline at end of file
diff --git a/rpc/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/Consumer.java b/rpc/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/Consumer.java
index 54e5b66..c339ad4 100644
--- a/rpc/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/Consumer.java
+++ b/rpc/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/Consumer.java
@@ -1,227 +1,227 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo;
-
-import com.alibaba.dubbo.rpc.service.EchoService;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-public class Consumer {
-    // Define a private variable (Required in Spring)
-    private static UserProvider userProvider;
-    private static UserProvider userProvider1;
-    private static UserProvider userProvider2;
-
-    public static void main(String[] args) throws Exception {
-        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo.consumer.xml"});
-        userProvider = (UserProvider)context.getBean("userProvider");
-        userProvider1 = (UserProvider)context.getBean("userProvider1");
-        userProvider2 = (UserProvider)context.getBean("userProvider2");
-
-        start();
-    }
-
-    // Start the entry function for consumer (Specified in the configuration file)
-    public static void start() throws Exception {
-        System.out.println("\n\ntest");
-        testGetUser();
-        testGetUsers();
-        System.out.println("\n\ntest1");
-        testGetUser1();
-        testGetUsers1();
-        System.out.println("\n\ntest2");
-        testGetUser2();
-        testGetUsers2();
-        Thread.sleep(2000);
-    }
-
-    private static void testGetUser() throws Exception {
-        try {
-            EchoService echoService = (EchoService)userProvider;
-            Object status = echoService.$echo("OK");
-            System.out.println("echo: "+status);
-            User user1 = userProvider.GetUser("A003");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user1.getID() + ", name:" + user1.getName() + ", sex:" + user1.getSex().toString()
-                    + ", age:" + user1.getAge() + ", time:" + user1.getTime().toString());
-            User user2 = userProvider.GetUser0("A003","Moorse");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user2.getID() + ", name:" + user2.getName() + ", sex:" + user2.getSex().toString()
-                    + ", age:" + user2.getAge() + ", time:" + user2.getTime().toString());
-            User user3 = userProvider.getUser(1);
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user3.getID() + ", name:" + user3.getName() + ", sex:" + user3.getSex().toString()
-                    + ", age:" + user3.getAge() + ", time:" + user3.getTime());
-            User user4 = userProvider.getUser(1, "name");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user4.getID() + ", name:" + user4.getName() + ", sex:" + user4.getSex().toString()
-                    + ", age:" + user4.getAge() + ", time:" + user4.getTime());
-            userProvider.GetUser3();
-            System.out.println("GetUser3 succ");
-
-            User user9 = userProvider.GetUser1("A003");
-        } catch (Throwable e) {
-            System.out.println("*************exception***********");
-            e.printStackTrace();
-        }
-        try {
-            userProvider.GetErr("A003");
-        } catch (Throwable t) {
-            System.out.println("*************exception***********");
-            t.printStackTrace();
-        }
-    }
-
-    private static void testGetUsers() throws Exception {
-        try {
-            List<String> userIDList = new ArrayList<String>();
-            userIDList.add("A001");
-            userIDList.add("A002");
-            userIDList.add("A003");
-
-            List<User> userList = userProvider.GetUsers(userIDList);
-
-            for (int i = 0; i < userList.size(); i++) {
-                User user = userList.get(i);
-                System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                        " UserInfo, ID:" + user.getID() + ", name:" + user.getName() + ", sex:" + user.getSex().toString()
-                        + ", age:" + user.getAge() + ", time:" + user.getTime().toString());
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    private static  void testGetUser1() throws Exception {
-        try {
-            EchoService echoService = (EchoService)userProvider1;
-            Object status = echoService.$echo("OK");
-            System.out.println("echo: "+status);
-            User user1 = userProvider1.GetUser("A003");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user1.getID() + ", name:" + user1.getName() + ", sex:" + user1.getSex().toString()
-                    + ", age:" + user1.getAge() + ", time:" + user1.getTime().toString());
-            User user2 = userProvider1.GetUser0("A003","Moorse");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user2.getID() + ", name:" + user2.getName() + ", sex:" + user2.getSex().toString()
-                    + ", age:" + user2.getAge() + ", time:" + user2.getTime().toString());
-            User user3 = userProvider1.getUser(1);
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user3.getID() + ", name:" + user3.getName() + ", sex:" + user3.getSex().toString()
-                    + ", age:" + user3.getAge() + ", time:" + user3.getTime());
-            User user4 = userProvider1.getUser(1, "name");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user4.getID() + ", name:" + user4.getName() + ", sex:" + user4.getSex().toString()
-                    + ", age:" + user4.getAge() + ", time:" + user4.getTime());
-            userProvider1.GetUser3();
-            System.out.println("GetUser3 succ");
-
-            User user9 = userProvider1.GetUser1("A003");
-        } catch (Throwable e) {
-            System.out.println("*************exception***********");
-            e.printStackTrace();
-        }
-        try {
-            userProvider1.GetErr("A003");
-        } catch (Throwable t) {
-            System.out.println("*************exception***********");
-            t.printStackTrace();
-        }
-    }
-
-    private static  void testGetUsers1() throws Exception {
-        try {
-            List<String> userIDList = new ArrayList<String>();
-            userIDList.add("A001");
-            userIDList.add("A002");
-            userIDList.add("A003");
-
-            List<User> userList = userProvider1.GetUsers(userIDList);
-
-            for (int i = 0; i < userList.size(); i++) {
-                User user = userList.get(i);
-                System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                        " UserInfo, ID:" + user.getID() + ", name:" + user.getName() + ", sex:" + user.getSex().toString()
-                        + ", age:" + user.getAge() + ", time:" + user.getTime().toString());
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    private static void testGetUser2() throws Exception {
-        try {
-            EchoService echoService = (EchoService)userProvider2;
-            Object status = echoService.$echo("OK");
-            System.out.println("echo: "+status);
-            User user1 = userProvider2.GetUser("A003");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user1.getID() + ", name:" + user1.getName() + ", sex:" + user1.getSex().toString()
-                    + ", age:" + user1.getAge() + ", time:" + user1.getTime().toString());
-            User user2 = userProvider2.GetUser0("A003","Moorse");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user2.getID() + ", name:" + user2.getName() + ", sex:" + user2.getSex().toString()
-                    + ", age:" + user2.getAge() + ", time:" + user2.getTime().toString());
-            User user3 = userProvider2.getUser(1);
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user3.getID() + ", name:" + user3.getName() + ", sex:" + user3.getSex().toString()
-                    + ", age:" + user3.getAge() + ", time:" + user3.getTime());
-            User user4 = userProvider2.getUser(1, "name");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user4.getID() + ", name:" + user4.getName() + ", sex:" + user4.getSex().toString()
-                    + ", age:" + user4.getAge() + ", time:" + user4.getTime());
-            userProvider2.GetUser3();
-            System.out.println("GetUser3 succ");
-
-            User user9 = userProvider2.GetUser1("A003");
-        } catch (Throwable e) {
-            System.out.println("*************exception***********");
-            e.printStackTrace();
-        }
-        try {
-            userProvider2.GetErr("A003");
-        } catch (Throwable t) {
-            System.out.println("*************exception***********");
-            t.printStackTrace();
-        }
-    }
-
-    private static void testGetUsers2() throws Exception {
-        try {
-            List<String> userIDList = new ArrayList<String>();
-            userIDList.add("A001");
-            userIDList.add("A002");
-            userIDList.add("A003");
-
-            List<User> userList = userProvider2.GetUsers(userIDList);
-
-            for (int i = 0; i < userList.size(); i++) {
-                User user = userList.get(i);
-                System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                        " UserInfo, ID:" + user.getID() + ", name:" + user.getName() + ", sex:" + user.getSex().toString()
-                        + ", age:" + user.getAge() + ", time:" + user.getTime().toString());
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo;
+
+import com.alibaba.dubbo.rpc.service.EchoService;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class Consumer {
+    // Define a private variable (Required in Spring)
+    private static UserProvider userProvider;
+    private static UserProvider userProvider1;
+    private static UserProvider userProvider2;
+
+    public static void main(String[] args) throws Exception {
+        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo.consumer.xml"});
+        userProvider = (UserProvider)context.getBean("userProvider");
+        userProvider1 = (UserProvider)context.getBean("userProvider1");
+        userProvider2 = (UserProvider)context.getBean("userProvider2");
+
+        start();
+    }
+
+    // Start the entry function for consumer (Specified in the configuration file)
+    public static void start() throws Exception {
+        System.out.println("\n\ntest");
+        testGetUser();
+        testGetUsers();
+        System.out.println("\n\ntest1");
+        testGetUser1();
+        testGetUsers1();
+        System.out.println("\n\ntest2");
+        testGetUser2();
+        testGetUsers2();
+        Thread.sleep(2000);
+    }
+
+    private static void testGetUser() throws Exception {
+        try {
+            EchoService echoService = (EchoService)userProvider;
+            Object status = echoService.$echo("OK");
+            System.out.println("echo: "+status);
+            User user1 = userProvider.GetUser("A003");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user1.getId() + ", name:" + user1.getName() + ", sex:" + user1.getSex().toString()
+                    + ", age:" + user1.getAge() + ", time:" + user1.getTime().toString());
+            User user2 = userProvider.GetUser0("A003","Moorse");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user2.getId() + ", name:" + user2.getName() + ", sex:" + user2.getSex().toString()
+                    + ", age:" + user2.getAge() + ", time:" + user2.getTime().toString());
+            User user3 = userProvider.getUser(1);
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user3.getId() + ", name:" + user3.getName() + ", sex:" + user3.getSex().toString()
+                    + ", age:" + user3.getAge() + ", time:" + user3.getTime());
+            User user4 = userProvider.getUser(1, "name");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user4.getId() + ", name:" + user4.getName() + ", sex:" + user4.getSex().toString()
+                    + ", age:" + user4.getAge() + ", time:" + user4.getTime());
+            userProvider.GetUser3();
+            System.out.println("GetUser3 succ");
+
+            User user9 = userProvider.GetUser1("A003");
+        } catch (Throwable e) {
+            System.out.println("*************exception***********");
+            e.printStackTrace();
+        }
+        try {
+            userProvider.GetErr("A003");
+        } catch (Throwable t) {
+            System.out.println("*************exception***********");
+            t.printStackTrace();
+        }
+    }
+
+    private static void testGetUsers() throws Exception {
+        try {
+            List<String> userIDList = new ArrayList<String>();
+            userIDList.add("A001");
+            userIDList.add("A002");
+            userIDList.add("A003");
+
+            List<User> userList = userProvider.GetUsers(userIDList);
+
+            for (int i = 0; i < userList.size(); i++) {
+                User user = userList.get(i);
+                System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                        " UserInfo, ID:" + user.getId() + ", name:" + user.getName() + ", sex:" + user.getSex().toString()
+                        + ", age:" + user.getAge() + ", time:" + user.getTime().toString());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static  void testGetUser1() throws Exception {
+        try {
+            EchoService echoService = (EchoService)userProvider1;
+            Object status = echoService.$echo("OK");
+            System.out.println("echo: "+status);
+            User user1 = userProvider1.GetUser("A003");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user1.getId() + ", name:" + user1.getName() + ", sex:" + user1.getSex().toString()
+                    + ", age:" + user1.getAge() + ", time:" + user1.getTime().toString());
+            User user2 = userProvider1.GetUser0("A003","Moorse");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user2.getId() + ", name:" + user2.getName() + ", sex:" + user2.getSex().toString()
+                    + ", age:" + user2.getAge() + ", time:" + user2.getTime().toString());
+            User user3 = userProvider1.getUser(1);
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user3.getId() + ", name:" + user3.getName() + ", sex:" + user3.getSex().toString()
+                    + ", age:" + user3.getAge() + ", time:" + user3.getTime());
+            User user4 = userProvider1.getUser(1, "name");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user4.getId() + ", name:" + user4.getName() + ", sex:" + user4.getSex().toString()
+                    + ", age:" + user4.getAge() + ", time:" + user4.getTime());
+            userProvider1.GetUser3();
+            System.out.println("GetUser3 succ");
+
+            User user9 = userProvider1.GetUser1("A003");
+        } catch (Throwable e) {
+            System.out.println("*************exception***********");
+            e.printStackTrace();
+        }
+        try {
+            userProvider1.GetErr("A003");
+        } catch (Throwable t) {
+            System.out.println("*************exception***********");
+            t.printStackTrace();
+        }
+    }
+
+    private static  void testGetUsers1() throws Exception {
+        try {
+            List<String> userIDList = new ArrayList<String>();
+            userIDList.add("A001");
+            userIDList.add("A002");
+            userIDList.add("A003");
+
+            List<User> userList = userProvider1.GetUsers(userIDList);
+
+            for (int i = 0; i < userList.size(); i++) {
+                User user = userList.get(i);
+                System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                        " UserInfo, ID:" + user.getId() + ", name:" + user.getName() + ", sex:" + user.getSex().toString()
+                        + ", age:" + user.getAge() + ", time:" + user.getTime().toString());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void testGetUser2() throws Exception {
+        try {
+            EchoService echoService = (EchoService)userProvider2;
+            Object status = echoService.$echo("OK");
+            System.out.println("echo: "+status);
+            User user1 = userProvider2.GetUser("A003");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user1.getId() + ", name:" + user1.getName() + ", sex:" + user1.getSex().toString()
+                    + ", age:" + user1.getAge() + ", time:" + user1.getTime().toString());
+            User user2 = userProvider2.GetUser0("A003","Moorse");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user2.getId() + ", name:" + user2.getName() + ", sex:" + user2.getSex().toString()
+                    + ", age:" + user2.getAge() + ", time:" + user2.getTime().toString());
+            User user3 = userProvider2.getUser(1);
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user3.getId() + ", name:" + user3.getName() + ", sex:" + user3.getSex().toString()
+                    + ", age:" + user3.getAge() + ", time:" + user3.getTime());
+            User user4 = userProvider2.getUser(1, "name");
+            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                    " UserInfo, ID:" + user4.getId() + ", name:" + user4.getName() + ", sex:" + user4.getSex().toString()
+                    + ", age:" + user4.getAge() + ", time:" + user4.getTime());
+            userProvider2.GetUser3();
+            System.out.println("GetUser3 succ");
+
+            User user9 = userProvider2.GetUser1("A003");
+        } catch (Throwable e) {
+            System.out.println("*************exception***********");
+            e.printStackTrace();
+        }
+        try {
+            userProvider2.GetErr("A003");
+        } catch (Throwable t) {
+            System.out.println("*************exception***********");
+            t.printStackTrace();
+        }
+    }
+
+    private static void testGetUsers2() throws Exception {
+        try {
+            List<String> userIDList = new ArrayList<String>();
+            userIDList.add("A001");
+            userIDList.add("A002");
+            userIDList.add("A003");
+
+            List<User> userList = userProvider2.GetUsers(userIDList);
+
+            for (int i = 0; i < userList.size(); i++) {
+                User user = userList.get(i);
+                System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
+                        " UserInfo, ID:" + user.getId() + ", name:" + user.getName() + ", sex:" + user.getSex().toString()
+                        + ", age:" + user.getAge() + ", time:" + user.getTime().toString());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/rpc/dubbo/java-server/2.6/run.sh b/rpc/dubbo/java-server/2.6/run.sh
new file mode 100644
index 0000000..9416b14
--- /dev/null
+++ b/rpc/dubbo/java-server/2.6/run.sh
@@ -0,0 +1,2 @@
+mvn install -DSkipTests
+mvn exec:java -Dexec.mainClass="java.org.apache.dubbo.Provider"
\ No newline at end of file
diff --git a/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProvider.java b/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProvider.java
index 1c13f05..0e62224 100644
--- a/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProvider.java
+++ b/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProvider.java
@@ -1,50 +1,52 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo;
-
-import java.util.List;
-import java.util.Map;
-
-public interface UserProvider {
-
-    boolean isLimit(Gender gender, String name);
-
-    User GetUser(String userId); // the first alpha is Upper case to compatible with golang.
-
-    List<User> GetUsers(List<String> userIdList);
-
-    void GetUser3();
-
-    User GetUser0(String userId, String name);
-
-	User GetErr(String userId) throws Exception;
-
-    Map<String, User> GetUserMap(List<String> userIdList);
-
-    User getUser(int usercode);
-
-    User getUser(int usercode, String name);
-
-    User queryUser(User user);
-
-    Map<String, User> queryAll();
-
-    int Calc(int a, int b);
-
-    Response<Integer> Sum(int a, int b);
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo;
+
+import java.util.List;
+import java.util.Map;
+
+public interface UserProvider {
+
+    boolean isLimit(Gender gender, String name);
+
+    User GetUser(String userId); // the first alpha is Upper case to compatible with golang.
+
+    List<User> GetUsers(List<String> userIdList);
+
+    Integer GetGender(Integer gender);
+
+    void GetUser3();
+
+    User GetUser0(String userId, String name);
+
+	User GetErr(String userId) throws Exception;
+
+    Map<String, User> GetUserMap(List<String> userIdList);
+
+    User getUser(int usercode);
+
+    User getUser(int usercode, String name);
+
+    User queryUser(User user);
+
+    Map<String, User> queryAll();
+
+    int Calc(int a, int b);
+
+    Response<Integer> Sum(int a, int b);
+}
diff --git a/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java b/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java
index cc6170e..9d41811 100644
--- a/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java
+++ b/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java
@@ -1,143 +1,147 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.*;
-
-public class UserProviderAnotherImpl implements UserProvider {
-    // private static final Logger logger = LoggerFactory.getLogger(getClass()); // Only output to dubbo's log(logs/server.log)
-    private static final Logger logger = LoggerFactory.getLogger("userLogger"); // Output to com.dubbogo.user-server.log
-
-    private Map<String, User> userMap = new HashMap<String, User>();
-
-    public UserProviderAnotherImpl() {
-        // userMap.put("001", new User("001", "other-zhangsan", 18, new Date(1998-1900, 1, 2, 3, 4, 5), Gender.MAN));
-        userMap.put("001", new User("001", "other-zhangsan", 18, new Date(0x12345678), Gender.MAN));
-        userMap.put("002", new User("002", "other-lisi", 20, new Date(1996-1900, 1, 2, 3, 4, 5), Gender.MAN));
-        userMap.put("003", new User("003", "other-lily", 23, new Date(1993-1900, 1, 2, 3, 4, 5), Gender.WOMAN));
-        userMap.put("004", new User("004", "other-lisa", 32, new Date(1985-1900, 1, 2, 3, 4, 5), Gender.WOMAN));
-    }
-
-    public boolean isLimit(Gender gender, String name) {
-        logger.info(String.format("input gender=%sand name=%s", gender, name));
-        return Gender.MAN == gender;
-    }
-
-    public User GetUser(String userId) {
-        logger.info("input userId = " + userId);
-        return new User(userId, "Joe", 48);
-    }
-
-    public User GetUser0(String userId, String name) {
-        return new User(userId, name, 48);
-    }
-
-    public void GetUser3() {
-        logger.info("this is GetUser3 of another");
-    }
-
-    public User GetErr(String userId) throws Exception {
-        throw new Exception("exception");
-    }
-
-    public List<User> GetUsers(ArrayList<String> userIdList) {
-        Iterator it = userIdList.iterator();
-        List<User> userList = new ArrayList<User>();
-        logger.warn("@userIdList size:" + userIdList.size());
-
-        while(it.hasNext()) {
-            String id = (String)(it.next());
-            logger.info("GetUsers(@uid:" + id + ")");
-            if (userMap.containsKey(id)) {
-                userList.add(userMap.get(id));
-                logger.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
-            }
-        }
-
-        return userList;
-    }
-
-    public Map<String, User> GetUserMap(List<String> userIdList) {
-        Iterator it = userIdList.iterator();
-        Map<String, User> map = new HashMap<String, User>();
-        logger.warn("@userIdList size:" + userIdList.size());
-
-        while(it.hasNext()) {
-            String id = (String)(it.next());
-            logger.info("GetUsers(@uid:" + id + ")");
-            if (userMap.containsKey(id)) {
-                map.put(id, userMap.get(id));
-                logger.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
-            }
-        }
-
-        return map;
-    }
-
-    public List<User> GetUsers(List<String> userIdList) {
-        Iterator it = userIdList.iterator();
-        List<User> userList = new ArrayList<User>();
-        logger.warn("@userIdList size:" + userIdList.size());
-
-        while(it.hasNext()) {
-            String id = (String)(it.next());
-            logger.info("GetUsers(@uid:" + id + ")");
-            if (userMap.containsKey(id)) {
-                userList.add(userMap.get(id));
-                logger.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
-            }
-        }
-
-        return userList;
-    }
-
-    // @Override
-    public User getUser(int userCode) {
-        logger.info("input userCode = " + userCode);
-        return new User(String.valueOf(userCode), "userCode get", 48);
-    }
-
-    public User getUser(int usercode, String name) {
-        return new User(String.valueOf(usercode), name, 18);
-    }
-
-    public User queryUser(User user) {
-        logger.info("input com.dubbogo.user = " + user);
-        return new User(user.getId(), "get:" + user.getName(), user.getAge() + 18);
-    }
-
-    public Map<String, User> queryAll() {
-        logger.info("input");
-        Map<String, User> map = new HashMap<String, User>();
-        map.put("001", new User("001", "Joe", 18));
-        map.put("002", new User("002", "Wen", 20));
-
-        return map;
-    }
-
-    public int Calc(int a,int b) {
-        return a + b + 100;
-    }
-
-    public Response<Integer> Sum(int a,int b) {
-        return Response.ok(a+b);
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.*;
+
+public class UserProviderAnotherImpl implements UserProvider {
+    // private static final Logger logger = LoggerFactory.getLogger(getClass()); // Only output to dubbo's log(logs/server.log)
+    private static final Logger logger = LoggerFactory.getLogger("userLogger"); // Output to com.dubbogo.user-server.log
+
+    private Map<String, User> userMap = new HashMap<String, User>();
+
+    public UserProviderAnotherImpl() {
+        // userMap.put("001", new User("001", "other-zhangsan", 18, new Date(1998-1900, 1, 2, 3, 4, 5), Gender.MAN));
+        userMap.put("001", new User("001", "other-zhangsan", 18, new Date(0x12345678), Gender.MAN));
+        userMap.put("002", new User("002", "other-lisi", 20, new Date(1996-1900, 1, 2, 3, 4, 5), Gender.MAN));
+        userMap.put("003", new User("003", "other-lily", 23, new Date(1993-1900, 1, 2, 3, 4, 5), Gender.WOMAN));
+        userMap.put("004", new User("004", "other-lisa", 32, new Date(1985-1900, 1, 2, 3, 4, 5), Gender.WOMAN));
+    }
+
+    public boolean isLimit(Gender gender, String name) {
+        logger.info(String.format("input gender=%sand name=%s", gender, name));
+        return Gender.MAN == gender;
+    }
+
+    public User GetUser(String userId) {
+        logger.info("input userId = " + userId);
+        return new User(userId, "Joe", 48);
+    }
+
+    public User GetUser0(String userId, String name) {
+        return new User(userId, name, 48);
+    }
+
+    public void GetUser3() {
+        logger.info("this is GetUser3 of another");
+    }
+
+    public User GetErr(String userId) throws Exception {
+        throw new Exception("exception");
+    }
+
+    public List<User> GetUsers(ArrayList<String> userIdList) {
+        Iterator it = userIdList.iterator();
+        List<User> userList = new ArrayList<User>();
+        logger.warn("@userIdList size:" + userIdList.size());
+
+        while(it.hasNext()) {
+            String id = (String)(it.next());
+            logger.info("GetUsers(@uid:" + id + ")");
+            if (userMap.containsKey(id)) {
+                userList.add(userMap.get(id));
+                logger.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
+            }
+        }
+
+        return userList;
+    }
+
+    public Map<String, User> GetUserMap(List<String> userIdList) {
+        Iterator it = userIdList.iterator();
+        Map<String, User> map = new HashMap<String, User>();
+        logger.warn("@userIdList size:" + userIdList.size());
+
+        while(it.hasNext()) {
+            String id = (String)(it.next());
+            logger.info("GetUsers(@uid:" + id + ")");
+            if (userMap.containsKey(id)) {
+                map.put(id, userMap.get(id));
+                logger.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
+            }
+        }
+
+        return map;
+    }
+
+    public List<User> GetUsers(List<String> userIdList) {
+        Iterator it = userIdList.iterator();
+        List<User> userList = new ArrayList<User>();
+        logger.warn("@userIdList size:" + userIdList.size());
+
+        while(it.hasNext()) {
+            String id = (String)(it.next());
+            logger.info("GetUsers(@uid:" + id + ")");
+            if (userMap.containsKey(id)) {
+                userList.add(userMap.get(id));
+                logger.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
+            }
+        }
+
+        return userList;
+    }
+
+    public Integer GetGender(Integer gender) {
+        return gender != null && gender == 1 ? 1 : 0;
+    }
+
+    // @Override
+    public User getUser(int userCode) {
+        logger.info("input userCode = " + userCode);
+        return new User(String.valueOf(userCode), "userCode get", 48);
+    }
+
+    public User getUser(int usercode, String name) {
+        return new User(String.valueOf(usercode), name, 18);
+    }
+
+    public User queryUser(User user) {
+        logger.info("input com.dubbogo.user = " + user);
+        return new User(user.getId(), "get:" + user.getName(), user.getAge() + 18);
+    }
+
+    public Map<String, User> queryAll() {
+        logger.info("input");
+        Map<String, User> map = new HashMap<String, User>();
+        map.put("001", new User("001", "Joe", 18));
+        map.put("002", new User("002", "Wen", 20));
+
+        return map;
+    }
+
+    public int Calc(int a,int b) {
+        return a + b + 100;
+    }
+
+    public Response<Integer> Sum(int a,int b) {
+        return Response.ok(a+b);
+    }
+}
diff --git a/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderImpl.java b/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderImpl.java
index bdb9651..73747eb 100644
--- a/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderImpl.java
+++ b/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderImpl.java
@@ -1,115 +1,119 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.*;
-
-public class UserProviderImpl implements UserProvider {
-    // private static final Logger logger = LoggerFactory.getLogger(getClass()); // Only output to dubbo's log(logs/server.log)
-    private static final Logger LOG = LoggerFactory.getLogger("UserLogger"); // Output to com.dubbogo.user-server.log
-    Map<String, User> userMap = new HashMap<String, User>();
-
-    public UserProviderImpl() {
-        userMap.put("A001", new User("A001", "demo-zhangsan", 18));
-        userMap.put("A002", new User("A002", "demo-lisi", 20));
-        userMap.put("A003", new User("A003", "demo-lily", 23));
-        userMap.put("A004", new User("A004", "demo-lisa", 32));
-    }
-
-    public boolean isLimit(Gender gender, String name) {
-        return Gender.WOMAN == gender;
-    }
-
-    public User GetUser(String userId) {
-        return new User(userId, "zhangsan", 18);
-    }
-
-    public User GetErr(String userId) throws Exception {
-        throw new Exception("exception");
-    }
-
-    public User GetUser0(String userId, String name) {
-            return new User(userId, name, 18);
-    }
-
-    public List<User> GetUsers(List<String> userIdList) {
-        Iterator it = userIdList.iterator();
-        List<User> userList = new ArrayList<User>();
-        LOG.warn("@userIdList size:" + userIdList.size());
-
-        while(it.hasNext()) {
-            String id = (String)(it.next());
-            LOG.info("GetUsers(@uid:" + id + ")");
-            if (userMap.containsKey(id)) {
-                userList.add(userMap.get(id));
-                LOG.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
-            }
-        }
-
-        return userList;
-    }
-
-    public void GetUser3() {
-        LOG.info("this is GetUser3 of impl");
-    }
-
-    public Map<String, User> GetUserMap(List<String> userIdList) {
-        Iterator it = userIdList.iterator();
-        Map<String, User> map = new HashMap<String, User>();
-        LOG.warn("@userIdList size:" + userIdList.size());
-
-        while(it.hasNext()) {
-            String id = (String)(it.next());
-            LOG.info("GetUsers(@uid:" + id + ")");
-            if (userMap.containsKey(id)) {
-                map.put(id, userMap.get(id));
-                LOG.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
-            }
-        }
-
-        return map;
-    }
-
-    public User queryUser(User user) {
-        return new User(user.getId(), "hello:" +user.getName(), user.getAge() + 18);
-    }
-
-    public Map<String, User> queryAll() {
-        return userMap;
-    }
-
-
-    public User getUser(int userCode) {
-        return new User(String.valueOf(userCode), "userCode get", 48);
-    }
-
-    public User getUser(int usercode, String name) {
-        return new User(String.valueOf(usercode), name, 38);
-    }
-
-    public int Calc(int a,int b) {
-        return a + b;
-    }
-
-     public Response<Integer> Sum(int a,int b) {
-        return Response.ok(a+b);
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.*;
+
+public class UserProviderImpl implements UserProvider {
+    // private static final Logger logger = LoggerFactory.getLogger(getClass()); // Only output to dubbo's log(logs/server.log)
+    private static final Logger LOG = LoggerFactory.getLogger("UserLogger"); // Output to com.dubbogo.user-server.log
+    Map<String, User> userMap = new HashMap<String, User>();
+
+    public UserProviderImpl() {
+        userMap.put("A001", new User("A001", "demo-zhangsan", 18));
+        userMap.put("A002", new User("A002", "demo-lisi", 20));
+        userMap.put("A003", new User("A003", "demo-lily", 23));
+        userMap.put("A004", new User("A004", "demo-lisa", 32));
+    }
+
+    public boolean isLimit(Gender gender, String name) {
+        return Gender.WOMAN == gender;
+    }
+
+    public User GetUser(String userId) {
+        return new User(userId, "zhangsan", 18);
+    }
+
+    public User GetErr(String userId) throws Exception {
+        throw new Exception("exception");
+    }
+
+    public User GetUser0(String userId, String name) {
+            return new User(userId, name, 18);
+    }
+
+    public List<User> GetUsers(List<String> userIdList) {
+        Iterator it = userIdList.iterator();
+        List<User> userList = new ArrayList<User>();
+        LOG.warn("@userIdList size:" + userIdList.size());
+
+        while(it.hasNext()) {
+            String id = (String)(it.next());
+            LOG.info("GetUsers(@uid:" + id + ")");
+            if (userMap.containsKey(id)) {
+                userList.add(userMap.get(id));
+                LOG.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
+            }
+        }
+
+        return userList;
+    }
+
+    public Integer GetGender(Integer gender) {
+        return gender != null && gender == 1 ? 1 : 0;
+    }
+
+    public void GetUser3() {
+        LOG.info("this is GetUser3 of impl");
+    }
+
+    public Map<String, User> GetUserMap(List<String> userIdList) {
+        Iterator it = userIdList.iterator();
+        Map<String, User> map = new HashMap<String, User>();
+        LOG.warn("@userIdList size:" + userIdList.size());
+
+        while(it.hasNext()) {
+            String id = (String)(it.next());
+            LOG.info("GetUsers(@uid:" + id + ")");
+            if (userMap.containsKey(id)) {
+                map.put(id, userMap.get(id));
+                LOG.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
+            }
+        }
+
+        return map;
+    }
+
+    public User queryUser(User user) {
+        return new User(user.getId(), "hello:" +user.getName(), user.getAge() + 18);
+    }
+
+    public Map<String, User> queryAll() {
+        return userMap;
+    }
+
+
+    public User getUser(int userCode) {
+        return new User(String.valueOf(userCode), "userCode get", 48);
+    }
+
+    public User getUser(int usercode, String name) {
+        return new User(String.valueOf(usercode), name, 38);
+    }
+
+    public int Calc(int a,int b) {
+        return a + b;
+    }
+
+     public Response<Integer> Sum(int a,int b) {
+        return Response.ok(a+b);
+    }
+}
diff --git a/rpc/dubbo/java-server/2.7/run.sh b/rpc/dubbo/java-server/2.7/run.sh
new file mode 100644
index 0000000..9416b14
--- /dev/null
+++ b/rpc/dubbo/java-server/2.7/run.sh
@@ -0,0 +1,2 @@
+mvn install -DSkipTests
+mvn exec:java -Dexec.mainClass="java.org.apache.dubbo.Provider"
\ No newline at end of file
diff --git a/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProvider.java b/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProvider.java
index 1c13f05..d6f7268 100644
--- a/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProvider.java
+++ b/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProvider.java
@@ -1,50 +1,52 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo;
-
-import java.util.List;
-import java.util.Map;
-
-public interface UserProvider {
-
-    boolean isLimit(Gender gender, String name);
-
-    User GetUser(String userId); // the first alpha is Upper case to compatible with golang.
-
-    List<User> GetUsers(List<String> userIdList);
-
-    void GetUser3();
-
-    User GetUser0(String userId, String name);
-
-	User GetErr(String userId) throws Exception;
-
-    Map<String, User> GetUserMap(List<String> userIdList);
-
-    User getUser(int usercode);
-
-    User getUser(int usercode, String name);
-
-    User queryUser(User user);
-
-    Map<String, User> queryAll();
-
-    int Calc(int a, int b);
-
-    Response<Integer> Sum(int a, int b);
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo;
+
+import java.util.List;
+import java.util.Map;
+
+public interface UserProvider {
+
+    boolean isLimit(Gender gender, String name);
+
+    User GetUser(String userId); // the first alpha is Upper case to compatible with golang.
+
+    List<User> GetUsers(List<String> userIdList);
+
+    void GetUser3();
+
+    User GetUser0(String userId, String name);
+
+	User GetErr(String userId) throws Exception;
+
+    Map<String, User> GetUserMap(List<String> userIdList);
+
+    User getUser(int usercode);
+
+    User getUser(int usercode, String name);
+
+    Integer GetGender(Integer gender);
+
+    User queryUser(User user);
+
+    Map<String, User> queryAll();
+
+    int Calc(int a, int b);
+
+    Response<Integer> Sum(int a, int b);
+}
diff --git a/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java b/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java
index cc6170e..3c84a9f 100644
--- a/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java
+++ b/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java
@@ -1,143 +1,147 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.*;
-
-public class UserProviderAnotherImpl implements UserProvider {
-    // private static final Logger logger = LoggerFactory.getLogger(getClass()); // Only output to dubbo's log(logs/server.log)
-    private static final Logger logger = LoggerFactory.getLogger("userLogger"); // Output to com.dubbogo.user-server.log
-
-    private Map<String, User> userMap = new HashMap<String, User>();
-
-    public UserProviderAnotherImpl() {
-        // userMap.put("001", new User("001", "other-zhangsan", 18, new Date(1998-1900, 1, 2, 3, 4, 5), Gender.MAN));
-        userMap.put("001", new User("001", "other-zhangsan", 18, new Date(0x12345678), Gender.MAN));
-        userMap.put("002", new User("002", "other-lisi", 20, new Date(1996-1900, 1, 2, 3, 4, 5), Gender.MAN));
-        userMap.put("003", new User("003", "other-lily", 23, new Date(1993-1900, 1, 2, 3, 4, 5), Gender.WOMAN));
-        userMap.put("004", new User("004", "other-lisa", 32, new Date(1985-1900, 1, 2, 3, 4, 5), Gender.WOMAN));
-    }
-
-    public boolean isLimit(Gender gender, String name) {
-        logger.info(String.format("input gender=%sand name=%s", gender, name));
-        return Gender.MAN == gender;
-    }
-
-    public User GetUser(String userId) {
-        logger.info("input userId = " + userId);
-        return new User(userId, "Joe", 48);
-    }
-
-    public User GetUser0(String userId, String name) {
-        return new User(userId, name, 48);
-    }
-
-    public void GetUser3() {
-        logger.info("this is GetUser3 of another");
-    }
-
-    public User GetErr(String userId) throws Exception {
-        throw new Exception("exception");
-    }
-
-    public List<User> GetUsers(ArrayList<String> userIdList) {
-        Iterator it = userIdList.iterator();
-        List<User> userList = new ArrayList<User>();
-        logger.warn("@userIdList size:" + userIdList.size());
-
-        while(it.hasNext()) {
-            String id = (String)(it.next());
-            logger.info("GetUsers(@uid:" + id + ")");
-            if (userMap.containsKey(id)) {
-                userList.add(userMap.get(id));
-                logger.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
-            }
-        }
-
-        return userList;
-    }
-
-    public Map<String, User> GetUserMap(List<String> userIdList) {
-        Iterator it = userIdList.iterator();
-        Map<String, User> map = new HashMap<String, User>();
-        logger.warn("@userIdList size:" + userIdList.size());
-
-        while(it.hasNext()) {
-            String id = (String)(it.next());
-            logger.info("GetUsers(@uid:" + id + ")");
-            if (userMap.containsKey(id)) {
-                map.put(id, userMap.get(id));
-                logger.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
-            }
-        }
-
-        return map;
-    }
-
-    public List<User> GetUsers(List<String> userIdList) {
-        Iterator it = userIdList.iterator();
-        List<User> userList = new ArrayList<User>();
-        logger.warn("@userIdList size:" + userIdList.size());
-
-        while(it.hasNext()) {
-            String id = (String)(it.next());
-            logger.info("GetUsers(@uid:" + id + ")");
-            if (userMap.containsKey(id)) {
-                userList.add(userMap.get(id));
-                logger.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
-            }
-        }
-
-        return userList;
-    }
-
-    // @Override
-    public User getUser(int userCode) {
-        logger.info("input userCode = " + userCode);
-        return new User(String.valueOf(userCode), "userCode get", 48);
-    }
-
-    public User getUser(int usercode, String name) {
-        return new User(String.valueOf(usercode), name, 18);
-    }
-
-    public User queryUser(User user) {
-        logger.info("input com.dubbogo.user = " + user);
-        return new User(user.getId(), "get:" + user.getName(), user.getAge() + 18);
-    }
-
-    public Map<String, User> queryAll() {
-        logger.info("input");
-        Map<String, User> map = new HashMap<String, User>();
-        map.put("001", new User("001", "Joe", 18));
-        map.put("002", new User("002", "Wen", 20));
-
-        return map;
-    }
-
-    public int Calc(int a,int b) {
-        return a + b + 100;
-    }
-
-    public Response<Integer> Sum(int a,int b) {
-        return Response.ok(a+b);
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.*;
+
+public class UserProviderAnotherImpl implements UserProvider {
+    // private static final Logger logger = LoggerFactory.getLogger(getClass()); // Only output to dubbo's log(logs/server.log)
+    private static final Logger logger = LoggerFactory.getLogger("userLogger"); // Output to com.dubbogo.user-server.log
+
+    private Map<String, User> userMap = new HashMap<String, User>();
+
+    public UserProviderAnotherImpl() {
+        // userMap.put("001", new User("001", "other-zhangsan", 18, new Date(1998-1900, 1, 2, 3, 4, 5), Gender.MAN));
+        userMap.put("001", new User("001", "other-zhangsan", 18, new Date(0x12345678), Gender.MAN));
+        userMap.put("002", new User("002", "other-lisi", 20, new Date(1996-1900, 1, 2, 3, 4, 5), Gender.MAN));
+        userMap.put("003", new User("003", "other-lily", 23, new Date(1993-1900, 1, 2, 3, 4, 5), Gender.WOMAN));
+        userMap.put("004", new User("004", "other-lisa", 32, new Date(1985-1900, 1, 2, 3, 4, 5), Gender.WOMAN));
+    }
+
+    public boolean isLimit(Gender gender, String name) {
+        logger.info(String.format("input gender=%sand name=%s", gender, name));
+        return Gender.MAN == gender;
+    }
+
+    public User GetUser(String userId) {
+        logger.info("input userId = " + userId);
+        return new User(userId, "Joe", 48);
+    }
+
+    public User GetUser0(String userId, String name) {
+        return new User(userId, name, 48);
+    }
+
+    public void GetUser3() {
+        logger.info("this is GetUser3 of another");
+    }
+
+    public User GetErr(String userId) throws Exception {
+        throw new Exception("exception");
+    }
+
+    public List<User> GetUsers(ArrayList<String> userIdList) {
+        Iterator it = userIdList.iterator();
+        List<User> userList = new ArrayList<User>();
+        logger.warn("@userIdList size:" + userIdList.size());
+
+        while(it.hasNext()) {
+            String id = (String)(it.next());
+            logger.info("GetUsers(@uid:" + id + ")");
+            if (userMap.containsKey(id)) {
+                userList.add(userMap.get(id));
+                logger.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
+            }
+        }
+
+        return userList;
+    }
+
+    public Map<String, User> GetUserMap(List<String> userIdList) {
+        Iterator it = userIdList.iterator();
+        Map<String, User> map = new HashMap<String, User>();
+        logger.warn("@userIdList size:" + userIdList.size());
+
+        while(it.hasNext()) {
+            String id = (String)(it.next());
+            logger.info("GetUsers(@uid:" + id + ")");
+            if (userMap.containsKey(id)) {
+                map.put(id, userMap.get(id));
+                logger.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
+            }
+        }
+
+        return map;
+    }
+
+    public List<User> GetUsers(List<String> userIdList) {
+        Iterator it = userIdList.iterator();
+        List<User> userList = new ArrayList<User>();
+        logger.warn("@userIdList size:" + userIdList.size());
+
+        while(it.hasNext()) {
+            String id = (String)(it.next());
+            logger.info("GetUsers(@uid:" + id + ")");
+            if (userMap.containsKey(id)) {
+                userList.add(userMap.get(id));
+                logger.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
+            }
+        }
+
+        return userList;
+    }
+
+    // @Override
+    public User getUser(int userCode) {
+        logger.info("input userCode = " + userCode);
+        return new User(String.valueOf(userCode), "userCode get", 48);
+    }
+
+    public User getUser(int usercode, String name) {
+        return new User(String.valueOf(usercode), name, 18);
+    }
+
+    public User queryUser(User user) {
+        logger.info("input com.dubbogo.user = " + user);
+        return new User(user.getId(), "get:" + user.getName(), user.getAge() + 18);
+    }
+
+    public Map<String, User> queryAll() {
+        logger.info("input");
+        Map<String, User> map = new HashMap<String, User>();
+        map.put("001", new User("001", "Joe", 18));
+        map.put("002", new User("002", "Wen", 20));
+
+        return map;
+    }
+
+    public int Calc(int a,int b) {
+        return a + b + 100;
+    }
+
+    public Response<Integer> Sum(int a,int b) {
+        return Response.ok(a+b);
+    }
+
+        public Integer GetGender(Integer gender) {
+            return gender != null && gender == 1 ? 1 : 0;
+        }
+}
diff --git a/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderImpl.java b/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderImpl.java
index bdb9651..b711ae9 100644
--- a/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderImpl.java
+++ b/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderImpl.java
@@ -1,115 +1,119 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.*;
-
-public class UserProviderImpl implements UserProvider {
-    // private static final Logger logger = LoggerFactory.getLogger(getClass()); // Only output to dubbo's log(logs/server.log)
-    private static final Logger LOG = LoggerFactory.getLogger("UserLogger"); // Output to com.dubbogo.user-server.log
-    Map<String, User> userMap = new HashMap<String, User>();
-
-    public UserProviderImpl() {
-        userMap.put("A001", new User("A001", "demo-zhangsan", 18));
-        userMap.put("A002", new User("A002", "demo-lisi", 20));
-        userMap.put("A003", new User("A003", "demo-lily", 23));
-        userMap.put("A004", new User("A004", "demo-lisa", 32));
-    }
-
-    public boolean isLimit(Gender gender, String name) {
-        return Gender.WOMAN == gender;
-    }
-
-    public User GetUser(String userId) {
-        return new User(userId, "zhangsan", 18);
-    }
-
-    public User GetErr(String userId) throws Exception {
-        throw new Exception("exception");
-    }
-
-    public User GetUser0(String userId, String name) {
-            return new User(userId, name, 18);
-    }
-
-    public List<User> GetUsers(List<String> userIdList) {
-        Iterator it = userIdList.iterator();
-        List<User> userList = new ArrayList<User>();
-        LOG.warn("@userIdList size:" + userIdList.size());
-
-        while(it.hasNext()) {
-            String id = (String)(it.next());
-            LOG.info("GetUsers(@uid:" + id + ")");
-            if (userMap.containsKey(id)) {
-                userList.add(userMap.get(id));
-                LOG.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
-            }
-        }
-
-        return userList;
-    }
-
-    public void GetUser3() {
-        LOG.info("this is GetUser3 of impl");
-    }
-
-    public Map<String, User> GetUserMap(List<String> userIdList) {
-        Iterator it = userIdList.iterator();
-        Map<String, User> map = new HashMap<String, User>();
-        LOG.warn("@userIdList size:" + userIdList.size());
-
-        while(it.hasNext()) {
-            String id = (String)(it.next());
-            LOG.info("GetUsers(@uid:" + id + ")");
-            if (userMap.containsKey(id)) {
-                map.put(id, userMap.get(id));
-                LOG.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
-            }
-        }
-
-        return map;
-    }
-
-    public User queryUser(User user) {
-        return new User(user.getId(), "hello:" +user.getName(), user.getAge() + 18);
-    }
-
-    public Map<String, User> queryAll() {
-        return userMap;
-    }
-
-
-    public User getUser(int userCode) {
-        return new User(String.valueOf(userCode), "userCode get", 48);
-    }
-
-    public User getUser(int usercode, String name) {
-        return new User(String.valueOf(usercode), name, 38);
-    }
-
-    public int Calc(int a,int b) {
-        return a + b;
-    }
-
-     public Response<Integer> Sum(int a,int b) {
-        return Response.ok(a+b);
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dubbo;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.*;
+
+public class UserProviderImpl implements UserProvider {
+    // private static final Logger logger = LoggerFactory.getLogger(getClass()); // Only output to dubbo's log(logs/server.log)
+    private static final Logger LOG = LoggerFactory.getLogger("UserLogger"); // Output to com.dubbogo.user-server.log
+    Map<String, User> userMap = new HashMap<String, User>();
+
+    public UserProviderImpl() {
+        userMap.put("A001", new User("A001", "demo-zhangsan", 18));
+        userMap.put("A002", new User("A002", "demo-lisi", 20));
+        userMap.put("A003", new User("A003", "demo-lily", 23));
+        userMap.put("A004", new User("A004", "demo-lisa", 32));
+    }
+
+    public boolean isLimit(Gender gender, String name) {
+        return Gender.WOMAN == gender;
+    }
+
+    public User GetUser(String userId) {
+        return new User(userId, "zhangsan", 18);
+    }
+
+    public User GetErr(String userId) throws Exception {
+        throw new Exception("exception");
+    }
+
+    public User GetUser0(String userId, String name) {
+            return new User(userId, name, 18);
+    }
+
+    public List<User> GetUsers(List<String> userIdList) {
+        Iterator it = userIdList.iterator();
+        List<User> userList = new ArrayList<User>();
+        LOG.warn("@userIdList size:" + userIdList.size());
+
+        while(it.hasNext()) {
+            String id = (String)(it.next());
+            LOG.info("GetUsers(@uid:" + id + ")");
+            if (userMap.containsKey(id)) {
+                userList.add(userMap.get(id));
+                LOG.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
+            }
+        }
+
+        return userList;
+    }
+
+    public void GetUser3() {
+        LOG.info("this is GetUser3 of impl");
+    }
+
+    public Map<String, User> GetUserMap(List<String> userIdList) {
+        Iterator it = userIdList.iterator();
+        Map<String, User> map = new HashMap<String, User>();
+        LOG.warn("@userIdList size:" + userIdList.size());
+
+        while(it.hasNext()) {
+            String id = (String)(it.next());
+            LOG.info("GetUsers(@uid:" + id + ")");
+            if (userMap.containsKey(id)) {
+                map.put(id, userMap.get(id));
+                LOG.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
+            }
+        }
+
+        return map;
+    }
+
+    public User queryUser(User user) {
+        return new User(user.getId(), "hello:" +user.getName(), user.getAge() + 18);
+    }
+
+    public Map<String, User> queryAll() {
+        return userMap;
+    }
+
+
+    public User getUser(int userCode) {
+        return new User(String.valueOf(userCode), "userCode get", 48);
+    }
+
+    public User getUser(int usercode, String name) {
+        return new User(String.valueOf(usercode), name, 38);
+    }
+
+    public int Calc(int a,int b) {
+        return a + b;
+    }
+
+     public Response<Integer> Sum(int a,int b) {
+        return Response.ok(a+b);
+    }
+
+    public Integer GetGender(Integer gender) {
+        return gender != null && gender == 1 ? 1 : 0;
+    }
+}

[dubbo-go-samples] 09/14: Add apollo config center sample (#208)

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git

commit a2409c2c1d67e3375d0125668a9b6b42386eee8b
Author: Baster <ja...@gmail.com>
AuthorDate: Sat Aug 28 09:07:12 2021 +0800

    Add apollo config center sample (#208)
    
    * add apollo config center sample
    
    * add apollo config center example
    
    * update config
    
    * delete debug file
    
    * add initSignal func for apollo sample
    
    * update apollo run xml
    
    * update apollo sample reademe md
    
    * add apollo test interation
    
    * update go mod
    
    Co-authored-by: zengfanwei <ze...@yalla.live>
---
 .../configcenter-apollo-client.run.xml             | 27 +++++----
 .../configcenter-apollo-server.run.xml             | 27 +++++----
 .run/configcenter/configcenter-apollo-test.run.xml |  9 ++-
 .run/helloworld-go-server.run.xml                  | 14 -----
 configcenter/apollo/README.md                      | 64 +++++++++++++++++++++
 configcenter/apollo/README_zh.md                   | 60 ++++++++++++++++++++
 configcenter/apollo/go-client/cmd/client.go        | 41 +++++---------
 configcenter/apollo/go-client/conf/client.yml      | 66 ----------------------
 configcenter/apollo/go-client/conf/dubbogo.yml     |  7 +++
 configcenter/apollo/go-client/conf/log.yml         | 28 ---------
 configcenter/apollo/go-client/pkg/user.go          | 42 --------------
 configcenter/apollo/go-server/cmd/server.go        | 33 ++++++-----
 configcenter/apollo/go-server/conf/client.yml      | 66 ----------------------
 configcenter/apollo/go-server/conf/dubbogo.yml     |  7 +++
 configcenter/apollo/go-server/conf/log.yml         | 28 ---------
 configcenter/apollo/go-server/conf/server.yml      | 62 --------------------
 configcenter/apollo/go-server/pkg/user.go          | 62 --------------------
 go.mod                                             |  4 +-
 .../configcenter/apollo}/docker/docker-compose.yml |  0
 .../apollo}/docker/docker-health-check.sh          |  0
 .../apollo}/docker/sql/apolloconfigdb.sql          |  0
 .../apollo}/docker/sql/apolloportaldb.sql          |  0
 .../tests/integration/greeterProvider_test.go      | 26 ++++++---
 .../apollo}/tests/integration/main_test.go         | 30 ++--------
 .../tests/integration/userprovider_test.go         | 33 +++++------
 25 files changed, 242 insertions(+), 494 deletions(-)

diff --git a/.run/configcenter/configcenter-apollo-client.run.xml b/.run/configcenter/configcenter-apollo-client.run.xml
index 769b395..f6fdc16 100644
--- a/.run/configcenter/configcenter-apollo-client.run.xml
+++ b/.run/configcenter/configcenter-apollo-client.run.xml
@@ -1,15 +1,14 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="configcenter-apollo-client" type="GoApplicationRunConfiguration" factoryName="Go Application" singleton="false">
-    <module name="dubbo-go-samples" />
-    <working_directory value="$PROJECT_DIR$" />
-    <envs>
-        <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/configcenter/apollo/go-client/conf/log.yml" />
-        <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/configcenter/apollo/go-client/conf/client.yml" />
-    </envs>
-    <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/configcenter/apollo/go-client/cmd/client.go" />
-    <package value="github.com/apache/dubbo-go-samples/configcenter/apollo/go-client/cmd" />
-    <directory value="$PROJECT_DIR$" />
-    <method v="2" />
-  </configuration>
-</component>
+    <configuration default="false" name="configcenter-apollo-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-configcenter" singleton="true">
+        <module name="dubbo-go-samples" />
+        <working_directory value="$PROJECT_DIR$/configcenter/apollo/go-client" />
+        <envs>
+            <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/configcenter/apollo/go-client/conf/dubbogo.yml" />
+        </envs>
+        <kind value="PACKAGE" />
+        <package value="github.com/apache/dubbo-go-samples/configcenter/apollo/go-client/cmd" />
+        <directory value="$PROJECT_DIR$" />
+        <filePath value="$PROJECT_DIR$/configcenter/apollo/go-client/cmd/client.go" />
+        <method v="2" />
+    </configuration>
+</component>
\ No newline at end of file
diff --git a/.run/configcenter/configcenter-apollo-server.run.xml b/.run/configcenter/configcenter-apollo-server.run.xml
index 3384df6..de38711 100644
--- a/.run/configcenter/configcenter-apollo-server.run.xml
+++ b/.run/configcenter/configcenter-apollo-server.run.xml
@@ -1,15 +1,14 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="configcenter-apollo-server" type="GoApplicationRunConfiguration" factoryName="Go Application" singleton="false">
-    <module name="dubbo-go-samples" />
-    <working_directory value="$PROJECT_DIR$" />
-    <envs>
-        <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/configcenter/apollo/go-server/conf/server.yml" />
-        <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/configcenter/apollo/go-server/conf/log.yml" />
-    </envs>
-    <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/configcenter/apollo/go-server/cmd/server.go" />
-    <package value="github.com/apache/dubbo-go-samples/configcenter/apollo/go-server/cmd" />
-    <directory value="$PROJECT_DIR$" />
-    <method v="2" />
-  </configuration>
-</component>
+    <configuration default="false" name="configcenter-apollo-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-configcenter" singleton="true">
+        <module name="dubbo-go-samples" />
+        <working_directory value="$PROJECT_DIR$/configcenter/apollo/go-server" />
+        <envs>
+            <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/configcenter/apollo/go-server/conf/dubbogo.yml" />
+        </envs>
+        <kind value="PACKAGE" />
+        <package value="github.com/apache/dubbo-go-samples/configcenter/apollo/go-server/cmd" />
+        <directory value="$PROJECT_DIR$" />
+        <filePath value="$PROJECT_DIR$/configcenter/apollo/go-client/cmd/server.go" />
+        <method v="2" />
+    </configuration>
+</component>
\ No newline at end of file
diff --git a/.run/configcenter/configcenter-apollo-test.run.xml b/.run/configcenter/configcenter-apollo-test.run.xml
index 36035f1..1bfcf2b 100644
--- a/.run/configcenter/configcenter-apollo-test.run.xml
+++ b/.run/configcenter/configcenter-apollo-test.run.xml
@@ -1,15 +1,14 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="configcenter-apollo-test" type="GoTestRunConfiguration" factoryName="Go Test">
+  <configuration default="false" name="configcenter-apollo-test" type="GoTestRunConfiguration" factoryName="Go Test" >
     <module name="dubbo-go-samples" />
-    <working_directory value="$PROJECT_DIR$/configcenter/apollo" />
+    <working_directory value="$PROJECT_DIR$/integrate_test/configcenter/apollo" />
     <useCustomBuildTags value="true" />
     <envs>
-      <env name="CONF_CONSUMER_FILE_PATH" value="go-server/conf/client.yml" />
-      <env name="APP_LOG_CONF_FILE" value="go-server/conf/log.yml" />
+      <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/configcenter/apollo/go-server/conf/dubbogo.yml" />
     </envs>
     <framework value="gotest" />
     <kind value="PACKAGE" />
-    <package value="github.com/apache/dubbo-go-samples/configcenter/apollo/go-server/tests/integration" />
+    <package value="github.com/apache/dubbo-go-samples/integrate_test/configcenter/apollo/tests/integration" />
     <directory value="$PROJECT_DIR$" />
     <filePath value="$PROJECT_DIR$" />
     <method v="2" />
diff --git a/.run/helloworld-go-server.run.xml b/.run/helloworld-go-server.run.xml
deleted file mode 100644
index 12a75d0..0000000
--- a/.run/helloworld-go-server.run.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="helloworld-go-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-helloworld" singleton="true">
-    <module name="dubbo-go-samples" />
-    <working_directory value="$PROJECT_DIR$" />
-    <envs>
-      <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/helloworld/go-server/conf/dubbogo.yml" />
-    </envs>
-    <kind value="PACKAGE" />
-    <package value="github.com/apache/dubbo-go-samples/helloworld/go-server/cmd" />
-    <directory value="$PROJECT_DIR$" />
-    <filePath value="$PROJECT_DIR$/helloworld/go-client/cmd/client.go" />
-    <method v="2" />
-  </configuration>
-</component>
\ No newline at end of file
diff --git a/configcenter/apollo/README.md b/configcenter/apollo/README.md
new file mode 100644
index 0000000..7ff6697
--- /dev/null
+++ b/configcenter/apollo/README.md
@@ -0,0 +1,64 @@
+# Apollo config center example
+
+
+## Instructions
+
+
+### go-server start
+
+1. Create new apollo server namespace for yaml format
+
+2. Add provider config content 
+```yaml
+dubbo:
+  application:
+     name: "demo-server"
+     version: "2.0"
+  registries:
+    "demoZK":
+      protocol: "zookeeper"
+      timeout: "3s"
+      address: "127.0.0.1:2181"
+  protocols:
+    "triple":
+      name: "tri"
+      port: 20000
+  provider:
+    registry:
+      - demoZK
+    services:
+      "greeterImpl":
+        protocol: "triple"
+        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
+```
+
+3. Start provider server
+
+### go-client start
+
+1. Create new apollo client namespace for yaml format
+
+2. Add client config content
+
+```yaml
+dubbo:
+  registries:
+    "demoZK":
+      protocol: "zookeeper"
+      timeout: "3s"
+      address: "127.0.0.1:2181"
+  consumer:
+    registry:
+      - demoZK
+    references:
+      "greeterImpl":
+        protocol: "tri"
+        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
+```
+
+3. Start provider server
+
+
+
+ 
+
diff --git a/configcenter/apollo/README_zh.md b/configcenter/apollo/README_zh.md
new file mode 100644
index 0000000..6fd7a14
--- /dev/null
+++ b/configcenter/apollo/README_zh.md
@@ -0,0 +1,60 @@
+# Apollo 配置中心示例
+
+
+## 介绍
+
+
+### go-server 启动
+
+1. 创建新的apollo服务端yaml格式的namespace
+
+2. 添加服务端配置内容
+
+```yaml
+dubbo:
+  application:
+     name: "demo-server"
+     version: "2.0"
+  registries:
+    "demoZK":
+      protocol: "zookeeper"
+      timeout: "3s"
+      address: "127.0.0.1:2181"
+  protocols:
+    "triple":
+      name: "tri"
+      port: 20000
+  provider:
+    registry:
+      - demoZK
+    services:
+      "greeterImpl":
+        protocol: "triple"
+        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
+```
+
+3. 启动go-server
+
+### go-client 启动
+
+1. 创建新的apollo客户端yaml格式的namespace
+
+2. 添加客户端配置内容
+
+```yaml
+dubbo:
+  registries:
+    "demoZK":
+      protocol: "zookeeper"
+      timeout: "3s"
+      address: "127.0.0.1:2181"
+  consumer:
+    registry:
+      - demoZK
+    references:
+      "greeterImpl":
+        protocol: "tri"
+        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
+```
+
+3. 启动go-client
\ No newline at end of file
diff --git a/configcenter/apollo/go-client/cmd/client.go b/configcenter/apollo/go-client/cmd/client.go
index 37c1b05..68fe2c0 100644
--- a/configcenter/apollo/go-client/cmd/client.go
+++ b/configcenter/apollo/go-client/cmd/client.go
@@ -19,50 +19,37 @@ package main
 
 import (
 	"context"
-	"os"
 	"time"
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/config_center/apollo"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/configcenter/apollo/go-client/pkg"
+	"github.com/apache/dubbo-go-samples/api"
 )
 
-var userProvider = new(pkg.UserProvider)
+var grpcGreeterImpl = new(api.GreeterClientImpl)
 
 func init() {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&pkg.User{})
+	config.SetConsumerService(grpcGreeterImpl)
 }
 
-// need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
+// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/helloworld/go-client/conf/dubbogo.yml
 func main() {
-	hessian.RegisterPOJO(&pkg.User{})
 	config.Load()
 	time.Sleep(3 * time.Second)
 
-	gxlog.CInfo("\n\n\nstart to test dubbo")
-	user := &pkg.User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
-	if err != nil {
-		gxlog.CError("error: %v\n", err)
-		os.Exit(1)
-		return
+	logger.Info("start to test dubbo")
+	req := &api.HelloRequest{
+		Name: "laurence",
+	}
+	reply := &api.User{}
+	if err := grpcGreeterImpl.SayHello(context.Background(), req, reply); err != nil {
+		logger.Error(err)
 	}
-	gxlog.CInfo("response result: %v\n", user)
+	logger.Infof("client response result: %v\n", reply)
 }
diff --git a/configcenter/apollo/go-client/conf/client.yml b/configcenter/apollo/go-client/conf/client.yml
deleted file mode 100644
index 5b8c6c0..0000000
--- a/configcenter/apollo/go-client/conf/client.yml
+++ /dev/null
@@ -1,66 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# config center config
-config_center:
-  protocol: apollo
-  address: 127.0.0.1:8080
-  app_id: UserInfoClient
-  cluster: dev
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "user-info-client"
-  module: "dubbo-go user-info client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/configcenter/apollo/go-client/conf/dubbogo.yml b/configcenter/apollo/go-client/conf/dubbogo.yml
new file mode 100644
index 0000000..c147f2e
--- /dev/null
+++ b/configcenter/apollo/go-client/conf/dubbogo.yml
@@ -0,0 +1,7 @@
+dubbo:
+  config-center:
+    protocol: "apollo"
+    address: "localhost:8080"
+    app-id: "demo_server"
+    cluster: "default"
+    namespace: "demo-client-config"
diff --git a/configcenter/apollo/go-client/conf/log.yml b/configcenter/apollo/go-client/conf/log.yml
deleted file mode 100644
index d0400fe..0000000
--- a/configcenter/apollo/go-client/conf/log.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-level: "debug"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/configcenter/apollo/go-client/pkg/user.go b/configcenter/apollo/go-client/pkg/user.go
deleted file mode 100644
index 7733ea4..0000000
--- a/configcenter/apollo/go-client/pkg/user.go
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	"time"
-)
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/configcenter/apollo/go-server/cmd/server.go b/configcenter/apollo/go-server/cmd/server.go
index e8adb2b..7e54974 100644
--- a/configcenter/apollo/go-server/cmd/server.go
+++ b/configcenter/apollo/go-server/cmd/server.go
@@ -18,6 +18,7 @@
 package main
 
 import (
+	"context"
 	"fmt"
 	"os"
 	"os/signal"
@@ -26,33 +27,35 @@ import (
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/config_center/apollo"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/configcenter/apollo/go-server/pkg"
+	"github.com/apache/dubbo-go-samples/api"
 )
 
 var (
 	survivalTimeout = int(3e9)
 )
 
-// need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
-func main() {
-	hessian.RegisterPOJO(&pkg.User{})
-	config.Load()
+type GreeterProvider struct {
+	api.GreeterProviderBase
+}
+
+func (s *GreeterProvider) SayHello(ctx context.Context, in *api.HelloRequest) (*api.User, error) {
+	logger.Infof("Dubbo3 GreeterProvider get user name = %s\n", in.Name)
 
+	return &api.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
+}
+
+func main() {
+	config.SetProviderService(&GreeterProvider{})
+	err := config.Load()
+	if err != nil {
+		panic(err)
+	}
 	initSignal()
 }
 
diff --git a/configcenter/apollo/go-server/conf/client.yml b/configcenter/apollo/go-server/conf/client.yml
deleted file mode 100644
index 8a1bf33..0000000
--- a/configcenter/apollo/go-server/conf/client.yml
+++ /dev/null
@@ -1,66 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# config center config
-config_center:
-  protocol: apollo
-  address: 127.0.0.1:8080
-  app_id: UserInfoTest
-  cluster: dev
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "user-info-client"
-  module: "dubbo-go user-info client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/configcenter/apollo/go-server/conf/dubbogo.yml b/configcenter/apollo/go-server/conf/dubbogo.yml
new file mode 100644
index 0000000..0b09dab
--- /dev/null
+++ b/configcenter/apollo/go-server/conf/dubbogo.yml
@@ -0,0 +1,7 @@
+dubbo:
+  config-center:
+    protocol: "apollo"
+    address: "localhost:8080"
+    app-id: "demo_server"
+    cluster: "default"
+    namespace: "demo-provider-config"
diff --git a/configcenter/apollo/go-server/conf/log.yml b/configcenter/apollo/go-server/conf/log.yml
deleted file mode 100644
index a75bccb..0000000
--- a/configcenter/apollo/go-server/conf/log.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-level: "error"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/configcenter/apollo/go-server/conf/server.yml b/configcenter/apollo/go-server/conf/server.yml
deleted file mode 100644
index 5053ec5..0000000
--- a/configcenter/apollo/go-server/conf/server.yml
+++ /dev/null
@@ -1,62 +0,0 @@
-# dubbo server yaml configure file
-
-# config center config
-config_center:
-  protocol: apollo
-  address: 127.0.0.1:8080
-  app_id: UserInfoServer
-  cluster: dev
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "user-info-server"
-  module: "dubbo-go user-info server"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-
-# service config
-services:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    loadbalance: "random"
-    warmup: "100"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 1
-        loadbalance: "random"
-
-# protocol config
-protocols:
-  "dubbo":
-    name: "dubbo"
-    port: 20000
-
-protocol_conf:
-  dubbo:
-    session_number: 700
-    session_timeout: "180s"
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "server"
diff --git a/configcenter/apollo/go-server/pkg/user.go b/configcenter/apollo/go-server/pkg/user.go
deleted file mode 100644
index 75d0916..0000000
--- a/configcenter/apollo/go-server/pkg/user.go
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	"time"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log"
-)
-
-func init() {
-	config.SetProviderService(new(UserProvider))
-	// ------for hessian2------
-	hessian.RegisterPOJO(&User{})
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-}
-
-func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
-	gxlog.CInfo("req:%#v", req)
-	rsp := User{"A001", "Alex Stocks", 18, time.Now()}
-	gxlog.CInfo("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/go.mod b/go.mod
index 550d8f4..d9d33bc 100644
--- a/go.mod
+++ b/go.mod
@@ -28,6 +28,8 @@ require (
 	k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a // indirect
 )
 
-replace github.com/envoyproxy/go-control-plane => github.com/envoyproxy/go-control-plane v0.8.0
+replace (
+	github.com/envoyproxy/go-control-plane => github.com/envoyproxy/go-control-plane v0.8.0
+)
 
 go 1.13
diff --git a/configcenter/apollo/go-server/docker/docker-compose.yml b/integrate_test/configcenter/apollo/docker/docker-compose.yml
similarity index 100%
rename from configcenter/apollo/go-server/docker/docker-compose.yml
rename to integrate_test/configcenter/apollo/docker/docker-compose.yml
diff --git a/configcenter/apollo/go-server/docker/docker-health-check.sh b/integrate_test/configcenter/apollo/docker/docker-health-check.sh
similarity index 100%
rename from configcenter/apollo/go-server/docker/docker-health-check.sh
rename to integrate_test/configcenter/apollo/docker/docker-health-check.sh
diff --git a/configcenter/apollo/go-server/docker/sql/apolloconfigdb.sql b/integrate_test/configcenter/apollo/docker/sql/apolloconfigdb.sql
similarity index 100%
rename from configcenter/apollo/go-server/docker/sql/apolloconfigdb.sql
rename to integrate_test/configcenter/apollo/docker/sql/apolloconfigdb.sql
diff --git a/configcenter/apollo/go-server/docker/sql/apolloportaldb.sql b/integrate_test/configcenter/apollo/docker/sql/apolloportaldb.sql
similarity index 100%
rename from configcenter/apollo/go-server/docker/sql/apolloportaldb.sql
rename to integrate_test/configcenter/apollo/docker/sql/apolloportaldb.sql
diff --git a/configcenter/apollo/go-server/tests/integration/userprovider_test.go b/integrate_test/configcenter/apollo/tests/integration/greeterProvider_test.go
similarity index 67%
rename from configcenter/apollo/go-server/tests/integration/userprovider_test.go
rename to integrate_test/configcenter/apollo/tests/integration/greeterProvider_test.go
index 7183e64..992c55d 100644
--- a/configcenter/apollo/go-server/tests/integration/userprovider_test.go
+++ b/integrate_test/configcenter/apollo/tests/integration/greeterProvider_test.go
@@ -28,12 +28,24 @@ import (
 	"github.com/stretchr/testify/assert"
 )
 
-func TestGetUser(t *testing.T) {
-	user := &User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
+import (
+	dubbo3pb "github.com/apache/dubbo-go-samples/api"
+)
+
+func TestSayHello(t *testing.T) {
+	req := &dubbo3pb.HelloRequest{
+		Name: "laurence",
+	}
+
+	reply := &dubbo3pb.User{}
+
+	ctx := context.Background()
+	ctx = context.WithValue(ctx, "tri-req-id", "test_value_XXXXXXXX")
+
+	err := greeterProvider.SayHello(ctx, req, reply)
+
 	assert.Nil(t, err)
-	assert.Equal(t, "A001", user.ID)
-	assert.Equal(t, "Alex Stocks", user.Name)
-	assert.Equal(t, int32(18), user.Age)
-	assert.NotNil(t, user.Time)
+	assert.Equal(t, "Hello laurence", reply.Name)
+	assert.Equal(t, "12345", reply.Id)
+	assert.Equal(t, int32(21), reply.Age)
 }
diff --git a/configcenter/apollo/go-server/tests/integration/main_test.go b/integrate_test/configcenter/apollo/tests/integration/main_test.go
similarity index 73%
rename from configcenter/apollo/go-server/tests/integration/main_test.go
rename to integrate_test/configcenter/apollo/tests/integration/main_test.go
index a5c1729..d8a0568 100644
--- a/configcenter/apollo/go-server/tests/integration/main_test.go
+++ b/integrate_test/configcenter/apollo/tests/integration/main_test.go
@@ -20,7 +20,6 @@
 package integration
 
 import (
-	"context"
 	"os"
 	"testing"
 	"time"
@@ -31,42 +30,23 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/config_center/apollo"
 	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
 	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/local"
 	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+)
 
-	hessian "github.com/apache/dubbo-go-hessian2"
+import (
+	dubbo3pb "github.com/apache/dubbo-go-samples/api"
 )
 
-var userProvider = new(UserProvider)
+var greeterProvider = new(dubbo3pb.GreeterClientImpl)
 
 func TestMain(m *testing.M) {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&User{})
+	config.SetConsumerService(greeterProvider)
 	config.Load()
 	time.Sleep(3 * time.Second)
 
 	os.Exit(m.Run())
 }
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/userprovider_test.go b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/userprovider_test.go
index 8100011..6148859 100644
--- a/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/userprovider_test.go
+++ b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/userprovider_test.go
@@ -34,7 +34,7 @@ import (
 
 import (
 	dubbo3pb "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3"
-	grpcpb   "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/grpc_test_proto"
+	grpcpb "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/grpc_test_proto"
 )
 
 func TestSayHello(t *testing.T) {
@@ -51,8 +51,7 @@ func TestSayHello(t *testing.T) {
 	assert.Equal(t, int32(21), user.Age)
 }
 
-
-func TestStreamSayHello(t *testing.T){
+func TestStreamSayHello(t *testing.T) {
 	ctx := context.Background()
 	ctx = context.WithValue(ctx, tripleConstant.TripleCtxKey(tripleConstant.TripleRequestID), "triple-request-id-demo")
 	req := dubbo3pb.HelloRequest{
@@ -70,18 +69,18 @@ func TestStreamSayHello(t *testing.T){
 	rspUser := &dubbo3pb.User{}
 	err = r.RecvMsg(rspUser)
 	assert.Nil(t, err)
-	assert.Equal(t, "hello laurence",rspUser.Name)
-	assert.Equal(t, "123456789",rspUser.Id)
-	assert.Equal(t, int32(18),rspUser.Age)
+	assert.Equal(t, "hello laurence", rspUser.Name)
+	assert.Equal(t, "123456789", rspUser.Id)
+	assert.Equal(t, int32(18), rspUser.Age)
 
 	err = r.Send(&req)
 	assert.Nil(t, err)
 
 	err = r.RecvMsg(rspUser)
 	assert.Nil(t, err)
-	assert.Equal(t, "hello laurence",rspUser.Name)
-	assert.Equal(t, "123456789",rspUser.Id)
-	assert.Equal(t, int32(19),rspUser.Age)
+	assert.Equal(t, "hello laurence", rspUser.Name)
+	assert.Equal(t, "123456789", rspUser.Id)
+	assert.Equal(t, int32(19), rspUser.Age)
 }
 
 func TestGRPCClientHello(t *testing.T) {
@@ -102,7 +101,7 @@ func TestGRPCClientHello(t *testing.T) {
 	assert.Equal(t, int32(21), rsp.Age)
 }
 
-func TestGRPCClientStreamSayHello(t *testing.T){
+func TestGRPCClientStreamSayHello(t *testing.T) {
 	conn, err := grpc.Dial("127.0.0.1:20001", grpc.WithInsecure())
 	assert.Nil(t, err)
 	defer conn.Close()
@@ -121,18 +120,16 @@ func TestGRPCClientStreamSayHello(t *testing.T){
 	rspUser := &grpcpb.User{}
 	err = clientStream.RecvMsg(rspUser)
 	assert.Nil(t, err)
-	assert.Equal(t, "hello grpc laurence",rspUser.Name)
-	assert.Equal(t, "123456789",rspUser.Id)
-	assert.Equal(t, int32(18),rspUser.Age)
+	assert.Equal(t, "hello grpc laurence", rspUser.Name)
+	assert.Equal(t, "123456789", rspUser.Id)
+	assert.Equal(t, int32(18), rspUser.Age)
 
 	err = clientStream.Send(req)
 	assert.Nil(t, err)
 
 	err = clientStream.RecvMsg(rspUser)
 	assert.Nil(t, err)
-	assert.Equal(t, "hello grpc laurence",rspUser.Name)
-	assert.Equal(t, "123456789",rspUser.Id)
-	assert.Equal(t, int32(19),rspUser.Age)
+	assert.Equal(t, "hello grpc laurence", rspUser.Name)
+	assert.Equal(t, "123456789", rspUser.Id)
+	assert.Equal(t, int32(19), rspUser.Age)
 }
-
-

[dubbo-go-samples] 01/14: fix: init new config

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git

commit 07bf5eed368feba38edb81045fbd856172e56f30
Author: LaurenceLiZhixin <38...@qq.com>
AuthorDate: Sun Aug 1 15:51:01 2021 +0800

    fix: init new config
---
 .run/helloworld-go-server.run.xml                  |    4 +-
 .run/{triple => }/triple-server.run.xml            |    6 +-
 go.sum                                             |   11 +-
 helloworld/README.md                               |  157 +--
 helloworld/README_zh.md                            |  156 +--
 helloworld/go-client/cmd/client.go                 |   38 +-
 .../go-client}/cmd/env.sh                          |    0
 helloworld/go-client/conf/client.yml               |   72 +-
 helloworld/go-client/conf/log.yml                  |   27 -
 helloworld/go-server/cmd/server.go                 |   51 +-
 helloworld/go-server/conf/client.yml               |   59 -
 helloworld/go-server/conf/log.yml                  |   27 -
 helloworld/go-server/conf/server.yml               |   72 +-
 helloworld/go-server/docker/docker-health-check.sh |   10 -
 helloworld/go-server/pkg/greeter.go                |   45 +
 helloworld/go-server/pkg/user.go                   |   52 -
 .../go-server/tests/integration/main_test.go       |   29 +-
 .../tests/integration/userprovider_test.go         |   26 +-
 helloworld/java-client/build.sh                    |   21 -
 .../org/apache/dubbo/sample/hello/Helloworld.java  | 1432 ++++++++++++++++++++
 helloworld/java-client/pom.xml                     |  294 ++--
 helloworld/java-client/run.sh                      |    2 +
 .../java-client/src/main/assembly/assembly.xml     |   43 -
 .../com/apache/dubbo/sample/basic/ApiConsumer.java |   52 +
 .../com/apache/dubbo/sample/basic/IGreeter.java    |   31 +
 .../src/main/java/org/apache/dubbo/Consumer.java   |   60 -
 .../src/main/java/org/apache/dubbo/User.java       |   76 --
 .../main/java/org/apache/dubbo/UserProvider.java   |   18 -
 .../java-client/src/main/proto/helloworld.proto    |   28 +
 .../resources/META-INF/spring/dubbo.consumer.xml   |   38 -
 .../src/main/resources/META-INF/spring/service.xml |   24 -
 .../src/main/resources/dubbo.properties            |   12 -
 .../src/main/resources/log4j.properties            |   42 +-
 helloworld/java-server/build.sh                    |   20 -
 .../org/apache/dubbo/sample/hello/Helloworld.java  | 1432 ++++++++++++++++++++
 helloworld/java-server/pom.xml                     |  244 ++--
 helloworld/java-server/run.sh                      |    2 +
 helloworld/java-server/script/debug.sh             |   23 -
 .../java-server/src/main/assembly/assembly.xml     |   44 -
 .../com/apache/dubbo/sample/basic/ApiProvider.java |   39 +
 .../com/apache/dubbo/sample/basic/IGreeter.java    |   30 +
 .../apache/dubbo/sample/basic/IGreeter1Impl.java   |   34 +
 .../src/main/java/org/apache/dubbo/Provider.java   |   33 -
 .../src/main/java/org/apache/dubbo/User.java       |   86 --
 .../main/java/org/apache/dubbo/UserProvider.java   |   24 -
 .../java/org/apache/dubbo/UserProviderImpl.java    |   30 -
 .../java-server/src/main/proto/helloworld.proto    |   28 +
 .../resources/META-INF/spring/dubbo.provider.xml   |   34 -
 .../src/main/resources/dubbo.properties            |   13 -
 .../src/main/resources/log4j.properties            |   41 +-
 helloworld/protobuf/helloworld.pb.go               |  323 +++++
 .../pkg/user.go => protobuf/helloworld.proto}      |   35 +-
 helloworld/protobuf/protobuf.mk                    |   26 +
 logger/go-client/cmd/client.go                     |    2 +-
 54 files changed, 3919 insertions(+), 1639 deletions(-)

diff --git a/.run/helloworld-go-server.run.xml b/.run/helloworld-go-server.run.xml
index ddf29c3..f098a7f 100644
--- a/.run/helloworld-go-server.run.xml
+++ b/.run/helloworld-go-server.run.xml
@@ -1,5 +1,5 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="helloworld-go-server" type="GoApplicationRunConfiguration" factoryName="Go Application" singleton="false">
+  <configuration default="false" name="helloworld-go-server" type="GoApplicationRunConfiguration" factoryName="Go Application" singleton="true">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
@@ -7,9 +7,9 @@
       <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/helloworld/go-server/conf/server.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/helloworld/go-server/cmd/server.go" />
     <package value="github.com/apache/dubbo-go-samples/helloworld/go-server/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/helloworld/go-server/cmd/server.go" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.run/triple/triple-server.run.xml b/.run/triple-server.run.xml
similarity index 68%
rename from .run/triple/triple-server.run.xml
rename to .run/triple-server.run.xml
index f36e0c3..b249d57 100644
--- a/.run/triple/triple-server.run.xml
+++ b/.run/triple-server.run.xml
@@ -2,14 +2,10 @@
   <configuration default="false" name="triple-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="triple">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
-    <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-grpc/server/conf/log.yml" />
-      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/server.yml" />
-    </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/server.go" />
     <package value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/server.go" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/go.sum b/go.sum
index 849c5de..ad2291c 100644
--- a/go.sum
+++ b/go.sum
@@ -12,11 +12,8 @@ cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqCl
 cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
 cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210708063655-af290429dee4 h1:JRGjw66CguqaOeYigLauTdccWqnvy7U3OYqAHzXYmlw=
-dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210708063655-af290429dee4/go.mod h1:2l+IXuSuJvEk2g/ze1la8t1sX+yJH220aHo6JJVriM8=
 dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210725154253-9aeb7ff3c612 h1:uQMGg4Hnu/iO+RLrKIRsBXgJLUpLh+UG5NuVNGxGlsg=
 dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210725154253-9aeb7ff3c612/go.mod h1:RvuYcSX5rxb1aQTSol4EFt2txaJhzMmUAkT75lT9ETE=
-github.com/Azure/azure-sdk-for-go v40.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
 github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
 github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
 github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
@@ -115,6 +112,7 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee
 github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
 github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8=
 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
 github.com/coreos/go-systemd/v22 v22.1.0 h1:kq/SbG2BCKLkDKkjQf5OWwKWUKj1lgs3lFI4PxnR5lg=
 github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
@@ -146,8 +144,7 @@ github.com/dubbogo/go-zookeeper v1.0.3 h1:UkuY+rBsxdT7Bs63QAzp9z7XqQ53W1j8E5rwl8
 github.com/dubbogo/go-zookeeper v1.0.3/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c=
 github.com/dubbogo/gost v1.9.0/go.mod h1:pPTjVyoJan3aPxBPNUX0ADkXjPibLo+/Ib0/fADXSG8=
 github.com/dubbogo/gost v1.10.1/go.mod h1:+mQGS51XQEUWZP2JeGZTxJwipjRKtJO7Tr+FOg+72rI=
-github.com/dubbogo/gost v1.11.13 h1:sWvK1QbHpPBMmRQJV9qIH3syLegQBQa4xAPof3/Kv5c=
-github.com/dubbogo/gost v1.11.13/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
+github.com/dubbogo/gost v1.11.14 h1:9lfcdILOmqTOVAW1fPHa5uf1NrD6jlIOBe4vf8576yQ=
 github.com/dubbogo/gost v1.11.14/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
 github.com/dubbogo/jsonparser v1.0.1/go.mod h1:tYAtpctvSP/tWw4MeelsowSPgXQRVHHWbqL6ynps8jU=
 github.com/dubbogo/net v0.0.3 h1:2k53mh+1U8h1gFjJ8ykzyP4wNdAdgjc5moD+xVHI/AE=
@@ -319,9 +316,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92Bcuy
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
 github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/grpc-ecosystem/grpc-gateway v1.14.6 h1:8ERzHx8aj1Sc47mu9n/AksaKCSWrMchFtkdrS4BIj5o=
 github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw=
-github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
-github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
 github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU=
 github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
 github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
@@ -964,7 +960,6 @@ google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8
 google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
 google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
-google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
 google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
 google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0=
 google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
diff --git a/helloworld/README.md b/helloworld/README.md
index c64d03a..893a170 100644
--- a/helloworld/README.md
+++ b/helloworld/README.md
@@ -1,135 +1,22 @@
-## Hello World Example
-
-### Configuration
-
-registy config
-
-```yaml
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-
-```
-
-provider config
-
-```yaml
-# service config
-services:
-  # Reference ID
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 1
-```
-
-consumer config
-
-```yaml
-# reference config
-references:
-  # Reference ID
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-```
-
-### Code
-
-provider
-
-```go
-// init 
-func init() {
-	config.SetProviderService(new(UserProvider))
-	// ------for hessian2------
-	hessian.RegisterPOJO(&User{})
-}
-
-// define dto
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-// implement POJO interface for hessian2
-func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
-
-// service define
-type UserProvider struct {
-}
-
-// interface define
-func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
-	//biz code...
-}
-
-// implement RPCService interface
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-```
-
-consumer
-
-```go
-var userProvider = new(pkg.UserProvider)
-
-// init 
-func init() {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&pkg.User{})
-}
-
-// define dto
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-// implement POJO interface for hessian2
-func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
-
-// service define
-type UserProvider struct {
-    GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-// implement RPCService interface
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func main() {
-    //dubbogo init
-    config.Load()
-    time.Sleep(3 * time.Second)
-    
-    user := &pkg.User{}
-    err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
-    if err != nil {
-        //...
-    }
-    gxlog.CInfo("response result: %v\n", user)
-}
-```
\ No newline at end of file
+# Helloworld for Dubbo-go 3.0
+
+For pb definition and go client and server startup, please refer to [dubbogo-grpc](../dubbogo-grpc/README.md)
+
+## Instructions
+
+1. Start the server
+
+Use goland to start triple/gojava-go-server
+
+or
+
+Execute `sh run.sh` in the java-server folder to start the java server
+
+2. Start the client
+
+Use goland to start triple/gojava-go-client
+
+or
+
+Execute `sh run.sh` under the java-client folder to start the java client
+
diff --git a/helloworld/README_zh.md b/helloworld/README_zh.md
index 987f30e..d280c2e 100644
--- a/helloworld/README_zh.md
+++ b/helloworld/README_zh.md
@@ -1,135 +1,21 @@
-## Hello World 实例
-
-### 配置
-
-注册中心配置
-
-```yaml
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-
-```
-
-服务提供者配置
-
-```yaml
-# service config
-services:
-  # Reference ID
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 1
-```
-
-服务消费者配置
-
-```yaml
-# reference config
-references:
-  # Reference ID
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-```
-
-### 代码示例
-
-生产者示例
-
-```go
-// init 
-func init() {
-	config.SetProviderService(new(UserProvider))
-	// ------for hessian2------
-	hessian.RegisterPOJO(&User{})
-}
-
-// define dto
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-// implement POJO interface for hessian2
-func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
-
-// service define
-type UserProvider struct {
-}
-
-// interface define
-func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
-	//biz code...
-}
-
-// implement RPCService interface
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-```
-
-消费者示例
-
-```go
-var userProvider = new(pkg.UserProvider)
-
-// init 
-func init() {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&pkg.User{})
-}
-
-// define dto
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-// implement POJO interface for hessian2
-func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
-
-// service define
-type UserProvider struct {
-    GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-// implement RPCService interface
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func main() {
-    //dubbogo init
-    config.Load()
-    time.Sleep(3 * time.Second)
-    
-    user := &pkg.User{}
-    err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
-    if err != nil {
-        //...
-    }
-    gxlog.CInfo("response result: %v\n", user)
-}
-```
\ No newline at end of file
+# Helloworld for Dubbo-go 3.0
+
+pb 定义以及 go 客户端、服务端启动,可以参考 [dubbogo-grpc](../dubbogo-grpc/README_zh.md)
+
+## 使用方法
+
+1. 启动服务端
+
+使用 goland 启动 triple/gojava-go-server
+
+或者
+
+在 java-server 文件夹下执行 `sh run.sh` 启动 java server
+
+2. 启动客户端
+
+使用 goland 启动 triple/gojava-go-client
+
+或者
+
+在 java-client 文件夹下执行 `sh run.sh` 启动 java client
diff --git a/helloworld/go-client/cmd/client.go b/helloworld/go-client/cmd/client.go
index c7e8235..3f40b44 100644
--- a/helloworld/go-client/cmd/client.go
+++ b/helloworld/go-client/cmd/client.go
@@ -19,7 +19,7 @@ package main
 
 import (
 	"context"
-	"os"
+	"fmt"
 	"time"
 )
 
@@ -29,38 +29,40 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
 	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	gxlog "github.com/dubbogo/gost/log"
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/helloworld/go-client/pkg"
+	pb "github.com/apache/dubbo-go-samples/helloworld/protobuf"
 )
 
-var userProvider = new(pkg.UserProvider)
+var grpcGreeterImpl = new(pb.GreeterClientImpl)
 
 func init() {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&pkg.User{})
+	config.SetConsumerService(grpcGreeterImpl)
 }
 
-// need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
+// deprecated: need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
+// or config.Load(config.Path("..."))
 func main() {
 	config.Load()
 	time.Sleep(3 * time.Second)
 
-	gxlog.CInfo("\n\n\nstart to test dubbo")
-	user := &pkg.User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
+	fmt.Println("\n\n\nstart to test dubbo")
+	req := &pb.HelloRequest{
+		Name: "laurence",
+	}
+
+	reply := &pb.User{}
+
+	ctx := context.Background()
+	ctx = context.WithValue(ctx, "tri-req-id", "test_value_XXXXXXXX")
+
+	err := grpcGreeterImpl.SayHello(ctx, req, reply)
 	if err != nil {
-		gxlog.CError("error: %v\n", err)
-		os.Exit(1)
-		return
+		panic(err)
 	}
-	gxlog.CInfo("response result: %v\n", user)
+	fmt.Printf("client response result: %v\n", reply)
 }
diff --git a/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/cmd/env.sh b/helloworld/go-client/cmd/env.sh
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/cmd/env.sh
rename to helloworld/go-client/cmd/env.sh
diff --git a/helloworld/go-client/conf/client.yml b/helloworld/go-client/conf/client.yml
index 308d530..64b8ae1 100644
--- a/helloworld/go-client/conf/client.yml
+++ b/helloworld/go-client/conf/client.yml
@@ -1,59 +1,13 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoClient"
-  module: "dubbo-go user-info client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
+dubbo:
+  registries:
+    "demoZK":
+      protocol: "zookeeper"
+      timeout: "3s"
+      address: "127.0.0.1:2181"
+  consumer:
+    registry:
+      - demoZK
+    references:
+      "greeterImpl":
+        protocol: "tri"
+        interface: "protobuf.Greeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/helloworld/go-client/conf/log.yml b/helloworld/go-client/conf/log.yml
deleted file mode 100644
index 2b6e93a..0000000
--- a/helloworld/go-client/conf/log.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-level: "debug"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/helloworld/go-server/cmd/server.go b/helloworld/go-server/cmd/server.go
index 5fe60e0..68ac7ac 100644
--- a/helloworld/go-server/cmd/server.go
+++ b/helloworld/go-server/cmd/server.go
@@ -18,63 +18,22 @@
 package main
 
 import (
-	"fmt"
-	"os"
-	"os/signal"
-	"syscall"
-	"time"
-)
-
-import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	"dubbo.apache.org/dubbo-go/v3/common/logger"
 	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
 	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
 )
 
 import (
 	"github.com/apache/dubbo-go-samples/helloworld/go-server/pkg"
 )
 
-var (
-	survivalTimeout = int(3e9)
-)
-
-// need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
+// deprecated: need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
+// config.Load(config.Path("..."))
 func main() {
-	hessian.RegisterPOJO(&pkg.User{})
-	config.SetProviderService(new(pkg.UserProvider))
+	config.SetProviderService(pkg.NewGreeterProvider())
 	config.Load()
-
-	initSignal()
-}
-
-func initSignal() {
-	signals := make(chan os.Signal, 1)
-	// It is not possible to block SIGKILL or syscall.SIGSTOP
-	signal.Notify(signals, os.Interrupt, os.Kill, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
-	for {
-		sig := <-signals
-		logger.Infof("get signal %s", sig.String())
-		switch sig {
-		case syscall.SIGHUP:
-			// reload()
-		default:
-			time.AfterFunc(time.Duration(survivalTimeout), func() {
-				logger.Warnf("app exit now by force...")
-				os.Exit(1)
-			})
-
-			// The program exits normally or timeout forcibly exits.
-			fmt.Println("provider app exit now...")
-			return
-		}
-	}
+	select {}
 }
diff --git a/helloworld/go-server/conf/client.yml b/helloworld/go-server/conf/client.yml
deleted file mode 100644
index 11ae382..0000000
--- a/helloworld/go-server/conf/client.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoTest"
-  module: "dubbo-go user-info client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/helloworld/go-server/conf/log.yml b/helloworld/go-server/conf/log.yml
deleted file mode 100644
index 970d988..0000000
--- a/helloworld/go-server/conf/log.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-level: "error"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/helloworld/go-server/conf/server.yml b/helloworld/go-server/conf/server.yml
index af90434..a435688 100644
--- a/helloworld/go-server/conf/server.yml
+++ b/helloworld/go-server/conf/server.yml
@@ -1,55 +1,17 @@
-# dubbo server yaml configure file
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoServer"
-  module: "dubbo-go user-info server"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-
-# service config
-services:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    loadbalance: "random"
-    warmup: "100"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 1
-        loadbalance: "random"
-
-# protocol config
-protocols:
-  "dubbo":
-    name: "dubbo"
-    port: 20000
-
-protocol_conf:
-  dubbo:
-    session_number: 700
-    session_timeout: "180s"
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "server"
+dubbo:
+  registries:
+    "demoZK":
+      protocol: "zookeeper"
+      timeout: "3s"
+      address: "127.0.0.1:2181"
+  protocols:
+    "triple":
+      name: "tri"
+      port: 20000
+  provider:
+    registry:
+      - demoZK
+    services:
+      "greeterImpl":
+        protocol: "triple"
+        interface: "protobuf.Greeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/helloworld/go-server/docker/docker-health-check.sh b/helloworld/go-server/docker/docker-health-check.sh
deleted file mode 100644
index 2cc32c2..0000000
--- a/helloworld/go-server/docker/docker-health-check.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-curl 127.0.0.1:2181
-res=$?
-passCode=52
-while [ "$res" != "$passCode" ];do
-  sleep 5
-  curl 127.0.0.1:2181
-  res=$?
-done
-
-sleep 5
diff --git a/helloworld/go-server/pkg/greeter.go b/helloworld/go-server/pkg/greeter.go
new file mode 100644
index 0000000..08b393a
--- /dev/null
+++ b/helloworld/go-server/pkg/greeter.go
@@ -0,0 +1,45 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package pkg
+
+import (
+	"context"
+)
+
+import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
+)
+
+import (
+	pb "github.com/apache/dubbo-go-samples/helloworld/protobuf"
+)
+
+type GreeterProvider struct {
+	*pb.GreeterProviderBase
+}
+
+func NewGreeterProvider() *GreeterProvider {
+	return &GreeterProvider{
+		GreeterProviderBase: &pb.GreeterProviderBase{},
+	}
+}
+
+func (s *GreeterProvider) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.User, error) {
+	logger.Infof("Dubbo3 GreeterProvider get user name = %s\n", in.Name)
+	return &pb.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
+}
diff --git a/helloworld/go-server/pkg/user.go b/helloworld/go-server/pkg/user.go
deleted file mode 100644
index 8e34bf0..0000000
--- a/helloworld/go-server/pkg/user.go
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	"time"
-)
-
-import (
-	"github.com/dubbogo/gost/log"
-)
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-}
-
-func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
-	gxlog.CInfo("req:%#v", req)
-	rsp := User{"A001", "Alex Stocks", 18, time.Now()}
-	gxlog.CInfo("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/helloworld/go-server/tests/integration/main_test.go b/helloworld/go-server/tests/integration/main_test.go
index d028c55..c739d6c 100644
--- a/helloworld/go-server/tests/integration/main_test.go
+++ b/helloworld/go-server/tests/integration/main_test.go
@@ -20,7 +20,6 @@
 package integration
 
 import (
-	"context"
 	"os"
 	"testing"
 	"time"
@@ -36,36 +35,18 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+)
 
-	hessian "github.com/apache/dubbo-go-hessian2"
+import (
+	dubbo3pb "github.com/apache/dubbo-go-samples/helloworld/protobuf"
 )
 
-var userProvider = new(UserProvider)
+var greeterProvider = new(dubbo3pb.GreeterClientImpl)
 
 func TestMain(m *testing.M) {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&User{})
+	config.SetConsumerService(greeterProvider)
 	config.Load()
 	time.Sleep(3 * time.Second)
 
 	os.Exit(m.Run())
 }
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/helloworld/go-server/tests/integration/userprovider_test.go b/helloworld/go-server/tests/integration/userprovider_test.go
index 7183e64..01a7855 100644
--- a/helloworld/go-server/tests/integration/userprovider_test.go
+++ b/helloworld/go-server/tests/integration/userprovider_test.go
@@ -28,12 +28,24 @@ import (
 	"github.com/stretchr/testify/assert"
 )
 
-func TestGetUser(t *testing.T) {
-	user := &User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
+import (
+	dubbo3pb "github.com/apache/dubbo-go-samples/helloworld/protobuf"
+)
+
+func TestSayHello(t *testing.T) {
+	req := &dubbo3pb.HelloRequest{
+		Name: "laurence",
+	}
+
+	reply := &dubbo3pb.User{}
+
+	ctx := context.Background()
+	ctx = context.WithValue(ctx, "tri-req-id", "test_value_XXXXXXXX")
+
+	err := greeterProvider.SayHello(ctx, req, reply)
+
 	assert.Nil(t, err)
-	assert.Equal(t, "A001", user.ID)
-	assert.Equal(t, "Alex Stocks", user.Name)
-	assert.Equal(t, int32(18), user.Age)
-	assert.NotNil(t, user.Time)
+	assert.Equal(t, "Hello laurence", reply.Name)
+	assert.Equal(t, "12345", reply.Id)
+	assert.Equal(t, int32(21), reply.Age)
 }
diff --git a/helloworld/java-client/build.sh b/helloworld/java-client/build.sh
deleted file mode 100644
index c869acf..0000000
--- a/helloworld/java-client/build.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# rm src/main/resources/META-INF/spring/dubbo.consumer.xml
-# cp src/main/resources/META-INF/spring/dubbo-protocol.consumer.xml src/main/resources/META-INF/spring/dubbo.consumer.xml
-# cp src/main/resources/META-INF/spring/jsonrpc-protocol.consumer.xml src/main/resources/META-INF/spring/dubbo.consumer.xml
-mvn clean package -Dmaven.test.skip
diff --git a/helloworld/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java b/helloworld/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
new file mode 100644
index 0000000..99758ac
--- /dev/null
+++ b/helloworld/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
@@ -0,0 +1,1432 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: helloworld.proto
+
+package org.apache.dubbo.sample.hello;
+
+public final class Helloworld {
+  private Helloworld() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  public interface HelloRequestOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:helloworld.HelloRequest)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string name = 1;</code>
+     * @return The name.
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 1;</code>
+     * @return The bytes for name.
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+  }
+  /**
+   * <pre>
+   * The request message containing the user's name.
+   * </pre>
+   *
+   * Protobuf type {@code helloworld.HelloRequest}
+   */
+  public static final class HelloRequest extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:helloworld.HelloRequest)
+      HelloRequestOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use HelloRequest.newBuilder() to construct.
+    private HelloRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private HelloRequest() {
+      name_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new HelloRequest();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private HelloRequest(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_HelloRequest_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_HelloRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.dubbo.sample.hello.Helloworld.HelloRequest.class, org.apache.dubbo.sample.hello.Helloworld.HelloRequest.Builder.class);
+    }
+
+    public static final int NAME_FIELD_NUMBER = 1;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 1;</code>
+     * @return The name.
+     */
+    @java.lang.Override
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string name = 1;</code>
+     * @return The bytes for name.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.apache.dubbo.sample.hello.Helloworld.HelloRequest)) {
+        return super.equals(obj);
+      }
+      org.apache.dubbo.sample.hello.Helloworld.HelloRequest other = (org.apache.dubbo.sample.hello.Helloworld.HelloRequest) obj;
+
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.apache.dubbo.sample.hello.Helloworld.HelloRequest prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * The request message containing the user's name.
+     * </pre>
+     *
+     * Protobuf type {@code helloworld.HelloRequest}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:helloworld.HelloRequest)
+        org.apache.dubbo.sample.hello.Helloworld.HelloRequestOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_HelloRequest_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_HelloRequest_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.apache.dubbo.sample.hello.Helloworld.HelloRequest.class, org.apache.dubbo.sample.hello.Helloworld.HelloRequest.Builder.class);
+      }
+
+      // Construct using org.apache.dubbo.sample.hello.Helloworld.HelloRequest.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_HelloRequest_descriptor;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.sample.hello.Helloworld.HelloRequest getDefaultInstanceForType() {
+        return org.apache.dubbo.sample.hello.Helloworld.HelloRequest.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.sample.hello.Helloworld.HelloRequest build() {
+        org.apache.dubbo.sample.hello.Helloworld.HelloRequest result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.sample.hello.Helloworld.HelloRequest buildPartial() {
+        org.apache.dubbo.sample.hello.Helloworld.HelloRequest result = new org.apache.dubbo.sample.hello.Helloworld.HelloRequest(this);
+        result.name_ = name_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.apache.dubbo.sample.hello.Helloworld.HelloRequest) {
+          return mergeFrom((org.apache.dubbo.sample.hello.Helloworld.HelloRequest)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.apache.dubbo.sample.hello.Helloworld.HelloRequest other) {
+        if (other == org.apache.dubbo.sample.hello.Helloworld.HelloRequest.getDefaultInstance()) return this;
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.apache.dubbo.sample.hello.Helloworld.HelloRequest parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.dubbo.sample.hello.Helloworld.HelloRequest) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 1;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:helloworld.HelloRequest)
+    }
+
+    // @@protoc_insertion_point(class_scope:helloworld.HelloRequest)
+    private static final org.apache.dubbo.sample.hello.Helloworld.HelloRequest DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.apache.dubbo.sample.hello.Helloworld.HelloRequest();
+    }
+
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<HelloRequest>
+        PARSER = new com.google.protobuf.AbstractParser<HelloRequest>() {
+      @java.lang.Override
+      public HelloRequest parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new HelloRequest(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<HelloRequest> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<HelloRequest> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public org.apache.dubbo.sample.hello.Helloworld.HelloRequest getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface UserOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:helloworld.User)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string name = 1;</code>
+     * @return The name.
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 1;</code>
+     * @return The bytes for name.
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>string id = 2;</code>
+     * @return The id.
+     */
+    java.lang.String getId();
+    /**
+     * <code>string id = 2;</code>
+     * @return The bytes for id.
+     */
+    com.google.protobuf.ByteString
+        getIdBytes();
+
+    /**
+     * <code>int32 age = 3;</code>
+     * @return The age.
+     */
+    int getAge();
+  }
+  /**
+   * <pre>
+   * The response message containing the greetings
+   * </pre>
+   *
+   * Protobuf type {@code helloworld.User}
+   */
+  public static final class User extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:helloworld.User)
+      UserOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use User.newBuilder() to construct.
+    private User(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private User() {
+      name_ = "";
+      id_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new User();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private User(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              id_ = s;
+              break;
+            }
+            case 24: {
+
+              age_ = input.readInt32();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_User_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_User_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.dubbo.sample.hello.Helloworld.User.class, org.apache.dubbo.sample.hello.Helloworld.User.Builder.class);
+    }
+
+    public static final int NAME_FIELD_NUMBER = 1;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 1;</code>
+     * @return The name.
+     */
+    @java.lang.Override
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string name = 1;</code>
+     * @return The bytes for name.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int ID_FIELD_NUMBER = 2;
+    private volatile java.lang.Object id_;
+    /**
+     * <code>string id = 2;</code>
+     * @return The id.
+     */
+    @java.lang.Override
+    public java.lang.String getId() {
+      java.lang.Object ref = id_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        id_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string id = 2;</code>
+     * @return The bytes for id.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getIdBytes() {
+      java.lang.Object ref = id_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        id_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int AGE_FIELD_NUMBER = 3;
+    private int age_;
+    /**
+     * <code>int32 age = 3;</code>
+     * @return The age.
+     */
+    @java.lang.Override
+    public int getAge() {
+      return age_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
+      }
+      if (!getIdBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, id_);
+      }
+      if (age_ != 0) {
+        output.writeInt32(3, age_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
+      }
+      if (!getIdBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, id_);
+      }
+      if (age_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(3, age_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.apache.dubbo.sample.hello.Helloworld.User)) {
+        return super.equals(obj);
+      }
+      org.apache.dubbo.sample.hello.Helloworld.User other = (org.apache.dubbo.sample.hello.Helloworld.User) obj;
+
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (!getId()
+          .equals(other.getId())) return false;
+      if (getAge()
+          != other.getAge()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      hash = (37 * hash) + ID_FIELD_NUMBER;
+      hash = (53 * hash) + getId().hashCode();
+      hash = (37 * hash) + AGE_FIELD_NUMBER;
+      hash = (53 * hash) + getAge();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.apache.dubbo.sample.hello.Helloworld.User prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * The response message containing the greetings
+     * </pre>
+     *
+     * Protobuf type {@code helloworld.User}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:helloworld.User)
+        org.apache.dubbo.sample.hello.Helloworld.UserOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_User_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_User_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.apache.dubbo.sample.hello.Helloworld.User.class, org.apache.dubbo.sample.hello.Helloworld.User.Builder.class);
+      }
+
+      // Construct using org.apache.dubbo.sample.hello.Helloworld.User.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+
+        id_ = "";
+
+        age_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_User_descriptor;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.sample.hello.Helloworld.User getDefaultInstanceForType() {
+        return org.apache.dubbo.sample.hello.Helloworld.User.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.sample.hello.Helloworld.User build() {
+        org.apache.dubbo.sample.hello.Helloworld.User result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.sample.hello.Helloworld.User buildPartial() {
+        org.apache.dubbo.sample.hello.Helloworld.User result = new org.apache.dubbo.sample.hello.Helloworld.User(this);
+        result.name_ = name_;
+        result.id_ = id_;
+        result.age_ = age_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.apache.dubbo.sample.hello.Helloworld.User) {
+          return mergeFrom((org.apache.dubbo.sample.hello.Helloworld.User)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.apache.dubbo.sample.hello.Helloworld.User other) {
+        if (other == org.apache.dubbo.sample.hello.Helloworld.User.getDefaultInstance()) return this;
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        if (!other.getId().isEmpty()) {
+          id_ = other.id_;
+          onChanged();
+        }
+        if (other.getAge() != 0) {
+          setAge(other.getAge());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.apache.dubbo.sample.hello.Helloworld.User parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.dubbo.sample.hello.Helloworld.User) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 1;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object id_ = "";
+      /**
+       * <code>string id = 2;</code>
+       * @return The id.
+       */
+      public java.lang.String getId() {
+        java.lang.Object ref = id_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          id_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string id = 2;</code>
+       * @return The bytes for id.
+       */
+      public com.google.protobuf.ByteString
+          getIdBytes() {
+        java.lang.Object ref = id_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          id_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string id = 2;</code>
+       * @param value The id to set.
+       * @return This builder for chaining.
+       */
+      public Builder setId(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        id_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string id = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearId() {
+        
+        id_ = getDefaultInstance().getId();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string id = 2;</code>
+       * @param value The bytes for id to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIdBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        id_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int age_ ;
+      /**
+       * <code>int32 age = 3;</code>
+       * @return The age.
+       */
+      @java.lang.Override
+      public int getAge() {
+        return age_;
+      }
+      /**
+       * <code>int32 age = 3;</code>
+       * @param value The age to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAge(int value) {
+        
+        age_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>int32 age = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAge() {
+        
+        age_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:helloworld.User)
+    }
+
+    // @@protoc_insertion_point(class_scope:helloworld.User)
+    private static final org.apache.dubbo.sample.hello.Helloworld.User DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.apache.dubbo.sample.hello.Helloworld.User();
+    }
+
+    public static org.apache.dubbo.sample.hello.Helloworld.User getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<User>
+        PARSER = new com.google.protobuf.AbstractParser<User>() {
+      @java.lang.Override
+      public User parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new User(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<User> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<User> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public org.apache.dubbo.sample.hello.Helloworld.User getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_helloworld_HelloRequest_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_helloworld_HelloRequest_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_helloworld_User_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_helloworld_User_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\020helloworld.proto\022\nhelloworld\"\034\n\014HelloR" +
+      "equest\022\014\n\004name\030\001 \001(\t\"-\n\004User\022\014\n\004name\030\001 \001" +
+      "(\t\022\n\n\002id\030\002 \001(\t\022\013\n\003age\030\003 \001(\005B\037\n\035org.apach" +
+      "e.dubbo.sample.hellob\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        });
+    internal_static_helloworld_HelloRequest_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_helloworld_HelloRequest_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_helloworld_HelloRequest_descriptor,
+        new java.lang.String[] { "Name", });
+    internal_static_helloworld_User_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_helloworld_User_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_helloworld_User_descriptor,
+        new java.lang.String[] { "Name", "Id", "Age", });
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/helloworld/java-client/pom.xml b/helloworld/java-client/pom.xml
index 1a333b9..10ae5bb 100644
--- a/helloworld/java-client/pom.xml
+++ b/helloworld/java-client/pom.xml
@@ -1,230 +1,162 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
+  ~  Licensed to the Apache Software Foundation (ASF) under one or more
+  ~  contributor license agreements.  See the NOTICE file distributed with
+  ~  this work for additional information regarding copyright ownership.
+  ~  The ASF licenses this file to You under the Apache License, Version 2.0
+  ~  (the "License"); you may not use this file except in compliance with
+  ~  the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~  Unless required by applicable law or agreed to in writing, software
+  ~  distributed under the License is distributed on an "AS IS" BASIS,
+  ~  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~  See the License for the specific language governing permissions and
+  ~  limitations under the License.
+  -->
 
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-
-    <groupId>com.ikurento</groupId>
-    <artifactId>user-info-client</artifactId>
-    <packaging>jar</packaging>
-    <version>0.2.0</version>
-    <description>The demo consumer module of dubbo project</description>
+    <groupId>com.apache.dubbogo</groupId>
+    <version>1.0-SNAPSHOT</version>
+    <artifactId>dubbo-samples-triple-client</artifactId>
 
     <properties>
-        <skip_maven_deploy>false</skip_maven_deploy>
-
-        <dubbo-jsonrpc-version>1.0.1</dubbo-jsonrpc-version>
-        <dubbo-version>2.6.5</dubbo-version>
+        <source.level>1.8</source.level>
+        <target.level>1.8</target.level>
+        <dubbo.version>3.0.0</dubbo.version>
+        <junit.version>4.12</junit.version>
+        <spring-test.version>4.3.16.RELEASE</spring-test.version>
+        <maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
+        <maven-failsafe-plugin.version>2.21.0</maven-failsafe-plugin.version>
+        <spring-boot.version>1.5.13.RELEASE</spring-boot.version>
+        <grpc.version>1.19.0</grpc.version>
+        <protoc.version>3.7.1</protoc.version>
     </properties>
 
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>com.alibaba</groupId>
-                <artifactId>dubbo-dependencies-bom</artifactId>
-                <version>${dubbo-version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
     <dependencies>
         <dependency>
-            <groupId>com.qianmi</groupId>
-            <artifactId>dubbo-rpc-jsonrpc</artifactId>
-            <version>${dubbo-jsonrpc-version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba</groupId>
+            <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo</artifactId>
-            <version>${dubbo-version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-all</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.curator</groupId>
-            <artifactId>curator-framework</artifactId>
-            <version>2.12.0</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.javassist</groupId>
-            <artifactId>javassist</artifactId>
-            <version>3.20.0-GA</version>
+            <version>${dubbo.version}</version>
         </dependency>
         <dependency>
-            <groupId>org.jboss.netty</groupId>
-            <artifactId>netty</artifactId>
-            <version>3.2.5.Final</version>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>3.14.0</version>
         </dependency>
         <dependency>
-            <groupId>org.apache.mina</groupId>
-            <artifactId>mina-core</artifactId>
-            <version>1.1.7</version>
-        </dependency>
-        <dependency>
-            <groupId>org.glassfish.grizzly</groupId>
-            <artifactId>grizzly-core</artifactId>
-            <version>2.1.4</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.httpcomponents</groupId>
-            <artifactId>httpclient</artifactId>
-            <version>4.5.7</version>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>fastjson</artifactId>
-            <version>1.2.56</version>
-        </dependency>
-        <dependency>
-            <groupId>com.thoughtworks.xstream</groupId>
-            <artifactId>xstream</artifactId>
-            <version>1.4.7</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.bsf</groupId>
-            <artifactId>bsf-api</artifactId>
-            <version>3.1</version>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-dependencies-zookeeper</artifactId>
+            <version>${dubbo.version}</version>
+            <type>pom</type>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.zookeeper</groupId>
+                    <artifactId>zookeeper</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.apache.zookeeper</groupId>
             <artifactId>zookeeper</artifactId>
-            <version>3.4.14</version>
-        </dependency>
-        <dependency>
-            <groupId>com.github.sgroschupf</groupId>
-            <artifactId>zkclient</artifactId>
-            <version>0.1</version>
-        </dependency>
-        <dependency>
-            <groupId>com.netflix.curator</groupId>
-            <artifactId>curator-framework</artifactId>
-            <version>1.1.16</version>
-        </dependency>
-        <dependency>
-            <groupId>com.googlecode.xmemcached</groupId>
-            <artifactId>xmemcached</artifactId>
-            <version>1.3.6</version>
+            <version>3.4.8</version>
         </dependency>
         <dependency>
-            <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-rt-frontend-simple</artifactId>
-            <version>2.6.1</version>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit.version}</version>
+            <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-rt-transports-http</artifactId>
-            <version>2.6.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.thrift</groupId>
-            <artifactId>libthrift</artifactId>
-            <version>0.12.0</version>
-        </dependency>
-        <dependency>
-            <groupId>com.caucho</groupId>
-            <artifactId>hessian</artifactId>
-            <version>4.0.7</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.5</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mortbay.jetty</groupId>
-            <artifactId>jetty</artifactId>
-            <version>6.1.26</version>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.16</version>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>1.6.2</version>
-        </dependency>
-        <dependency>
-            <groupId>redis.clients</groupId>
-            <artifactId>jedis</artifactId>
-            <version>2.1.0</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.validation</groupId>
-            <artifactId>validation-api</artifactId>
-            <version>1.0.0.GA</version>
-        </dependency>
-        <dependency>
-            <groupId>org.hibernate</groupId>
-            <artifactId>hibernate-validator</artifactId>
-            <version>4.2.0.Final</version>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+            <version>${spring-test.version}</version>
+            <scope>test</scope>
         </dependency>
+
         <dependency>
-            <groupId>javax.cache</groupId>
-            <artifactId>cache-api</artifactId>
-            <version>0.4</version>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>testcontainers</artifactId>
+            <version>1.12.3</version>
+            <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <profiles>
+        <!-- For jdk 11 above JavaEE annotation -->
+        <profile>
+            <id>javax.annotation</id>
+            <activation>
+                <jdk>[1.11,)</jdk>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>javax.annotation</groupId>
+                    <artifactId>javax.annotation-api</artifactId>
+                    <version>1.3.2</version>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
+
     <build>
+        <extensions>
+            <extension>
+                <groupId>kr.motd.maven</groupId>
+                <artifactId>os-maven-plugin</artifactId>
+                <version>1.6.1</version>
+            </extension>
+        </extensions>
         <plugins>
             <plugin>
-                <artifactId>maven-dependency-plugin</artifactId>
+                <groupId>org.xolstice.maven.plugins</groupId>
+                <artifactId>protobuf-maven-plugin</artifactId>
+                <version>0.6.1</version>
+                <configuration>
+                    <protocArtifact>com.google.protobuf:protoc:3.17.3:exe:${os.detected.classifier}</protocArtifact>
+                    <pluginId>triple-java</pluginId>
+                    <outputDirectory>build/generated/source/proto/main/java</outputDirectory>
+                </configuration>
                 <executions>
                     <execution>
-                        <id>unpack</id>
-                        <phase>package</phase>
                         <goals>
-                            <goal>unpack</goal>
+                            <goal>compile</goal>
+                            <goal>test-compile</goal>
                         </goals>
-                        <configuration>
-                            <artifactItems>
-                                <artifactItem>
-                                    <groupId>com.alibaba</groupId>
-                                    <artifactId>dubbo</artifactId>
-                                    <version>${dubbo-version}</version>
-                                    <outputDirectory>${project.build.directory}/dubbo</outputDirectory>
-                                    <includes>META-INF/assembly/**</includes>
-                                </artifactItem>
-                            </artifactItems>
-                        </configuration>
                     </execution>
                 </executions>
             </plugin>
             <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${maven-compiler-plugin.version}</version>
                 <configuration>
-                    <descriptor>src/main/assembly/assembly.xml</descriptor>
+                    <source>${source.level}</source>
+                    <target>${target.level}</target>
                 </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
                 <executions>
                     <execution>
-                        <id>make-assembly</id>
-                        <phase>package</phase>
+                        <phase>generate-sources</phase>
                         <goals>
-                            <goal>single</goal>
+                            <goal>add-source</goal>
                         </goals>
+                        <configuration>
+                            <sources>
+                                <source>build/generated/source/proto/main/java</source>
+                            </sources>
+                        </configuration>
                     </execution>
                 </executions>
             </plugin>
         </plugins>
     </build>
-</project>
+
+</project>
\ No newline at end of file
diff --git a/helloworld/java-client/run.sh b/helloworld/java-client/run.sh
new file mode 100644
index 0000000..5152f3a
--- /dev/null
+++ b/helloworld/java-client/run.sh
@@ -0,0 +1,2 @@
+mvn install -DSkipTests
+mvn exec:java -Dexec.mainClass="com.apache.dubbo.sample.basic.ApiConsumer"
\ No newline at end of file
diff --git a/helloworld/java-client/src/main/assembly/assembly.xml b/helloworld/java-client/src/main/assembly/assembly.xml
deleted file mode 100644
index 21c6863..0000000
--- a/helloworld/java-client/src/main/assembly/assembly.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-
-<assembly>
-    <id>assembly</id>
-    <formats>
-        <format>tar.gz</format>
-    </formats>
-    <includeBaseDirectory>true</includeBaseDirectory>
-    <fileSets>
-        <fileSet>
-            <directory>${project.build.directory}/dubbo/META-INF/assembly/bin</directory>
-            <outputDirectory>bin</outputDirectory>
-            <fileMode>0755</fileMode>
-        </fileSet>
-        <fileSet>
-            <directory>src/main/resources</directory>
-            <includes>
-                <include>dubbo.properties</include>
-                <include>log4j.*</include>
-            </includes>
-            <outputDirectory>conf</outputDirectory>
-            <fileMode>0644</fileMode>
-        </fileSet>
-    </fileSets>
-    <dependencySets>
-        <dependencySet>
-            <outputDirectory>lib</outputDirectory>
-        </dependencySet>
-    </dependencySets>
-</assembly>
\ No newline at end of file
diff --git a/helloworld/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java b/helloworld/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java
new file mode 100644
index 0000000..71e5f2a
--- /dev/null
+++ b/helloworld/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java
@@ -0,0 +1,52 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package com.apache.dubbo.sample.basic;
+
+import org.apache.dubbo.common.constants.CommonConstants;
+import org.apache.dubbo.config.ApplicationConfig;
+import org.apache.dubbo.config.ReferenceConfig;
+import org.apache.dubbo.config.RegistryConfig;
+import org.apache.dubbo.sample.hello.Helloworld;
+
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+public class ApiConsumer {
+    public static void main(String[] args) throws InterruptedException, IOException {
+        ReferenceConfig<IGreeter> ref = new ReferenceConfig<>();
+        ref.setInterface(IGreeter.class);
+        ref.setCheck(false);
+        ref.setProtocol(CommonConstants.TRIPLE);
+        ref.setLazy(true);
+        ref.setTimeout(100000);
+        ref.setApplication(new ApplicationConfig("demo-consumer"));
+        ref.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
+        final IGreeter iGreeter = ref.get();
+
+        System.out.println("dubbo ref started");
+        Helloworld.HelloRequest req = Helloworld.HelloRequest.newBuilder().setName("laurence").build();
+        try {
+            final Helloworld.User reply = iGreeter.sayHello(req);
+            TimeUnit.SECONDS.sleep(1);
+            System.out.println("Reply:" + reply);
+        } catch (Throwable t) {
+            t.printStackTrace();
+        }
+        System.in.read();
+    }
+}
diff --git a/helloworld/java-client/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java b/helloworld/java-client/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
new file mode 100644
index 0000000..8722f2c
--- /dev/null
+++ b/helloworld/java-client/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
@@ -0,0 +1,31 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package com.apache.dubbo.sample.basic;
+
+
+import org.apache.dubbo.sample.hello.Helloworld;
+
+public interface IGreeter {
+    /**
+     * <pre>
+     *  Sends a greeting
+     * </pre>
+     */
+    Helloworld.User sayHello(Helloworld.HelloRequest request);
+
+}
diff --git a/helloworld/java-client/src/main/java/org/apache/dubbo/Consumer.java b/helloworld/java-client/src/main/java/org/apache/dubbo/Consumer.java
deleted file mode 100644
index 0183a67..0000000
--- a/helloworld/java-client/src/main/java/org/apache/dubbo/Consumer.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-
-public class Consumer {
-    // Define a private variable (Required in Spring)
-    private UserProvider userProvider;
-
-    // Spring DI (Required in Spring)
-    public void setUserProvider(UserProvider u) {
-        this.userProvider = u;
-    }
-
-    public static void main(String[] args) {
-        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/dubbo.consumer.xml","META-INF/spring/service.xml");
-        context.start();
-        context.getBean(Consumer.class).start();
-    }
-
-    // Start the entry function for consumer (Specified in the configuration file)
-    public void start() {
-        System.out.println("\n\ntest");
-        testGetUser();
-    }
-
-    private void testGetUser() {
-        try {
-            User user1 = userProvider.GetUser("A003");
-            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
-                    " UserInfo, ID:" + user1.getID() + ", name:" + user1.getName()
-                    + ", age:" + user1.getAge() + ", time:" + user1.getTime().toString());
-
-        } catch (Exception e) {
-            System.out.println("*************exception***********");
-            e.printStackTrace();
-        }
-    }
-
-}
diff --git a/helloworld/java-client/src/main/java/org/apache/dubbo/User.java b/helloworld/java-client/src/main/java/org/apache/dubbo/User.java
deleted file mode 100644
index 36d1b9c..0000000
--- a/helloworld/java-client/src/main/java/org/apache/dubbo/User.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo;
-
-import java.util.Date;
-
-public class User {
-
-    private String id;
-
-    private String name;
-
-    private int age;
-
-    private Date time = new Date();
-
-
-    public User() {
-    }
-
-
-    public User(String id, String name, int age) {
-        this.id = id;
-        this.name = name;
-        this.age = age;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public int getAge() {
-        return age;
-    }
-
-    public void setAge(int age) {
-        this.age = age;
-    }
-
-    public Date getTime() {
-        return time;
-    }
-
-    public void setTime(Date time) {
-        this.time = time;
-    }
-
-
-}
diff --git a/helloworld/java-client/src/main/java/org/apache/dubbo/UserProvider.java b/helloworld/java-client/src/main/java/org/apache/dubbo/UserProvider.java
deleted file mode 100644
index c719124..0000000
--- a/helloworld/java-client/src/main/java/org/apache/dubbo/UserProvider.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo;
-
-public interface UserProvider {
-	User GetUser(String userId);
-}
diff --git a/helloworld/java-client/src/main/proto/helloworld.proto b/helloworld/java-client/src/main/proto/helloworld.proto
new file mode 100644
index 0000000..ee6ca29
--- /dev/null
+++ b/helloworld/java-client/src/main/proto/helloworld.proto
@@ -0,0 +1,28 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+syntax = "proto3";
+
+option java_package = "org.apache.dubbo.sample.hello";
+
+package helloworld;
+
+// The request message containing the user's name.
+message HelloRequest {
+  string name = 1;
+}
+
+// The response message containing the greetings
+message User {
+  string name = 1;
+  string id = 2;
+  int32 age = 3;
+}
diff --git a/helloworld/java-client/src/main/resources/META-INF/spring/dubbo.consumer.xml b/helloworld/java-client/src/main/resources/META-INF/spring/dubbo.consumer.xml
deleted file mode 100644
index 95fdcb8..0000000
--- a/helloworld/java-client/src/main/resources/META-INF/spring/dubbo.consumer.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
-	http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
-
-
-    <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
-    <dubbo:application name="user-info-client"/>
-    <!-- 连接到哪个本地注册中心 -->
-    <dubbo:registry id="demoZk" address="zookeeper://127.0.0.1:2181"/>
-    <!-- dubbo.registry.address from dubbo.properties -->
-    <!-- dubbo:registry address="${dubbo.registry.address}" / -->
-
-    <!-- 用dubbo协议在20880端口暴露服务 -->
-    <dubbo:protocol id="dubbo" name="dubbo"/>
-    <dubbo:protocol id="jsonrpc" name="jsonrpc"/>
-
-    <!-- 声明需要使用的服务接口 -->
-    <dubbo:reference registry="demoZk" check="false" id="userProvider" protocol="dubbo"
-                     interface="org.apache.dubbo.UserProvider">
-        <!--<dubbo:parameter key="heartbeat" value="10000"/ -->
-    </dubbo:reference>
-</beans>
diff --git a/helloworld/java-client/src/main/resources/META-INF/spring/service.xml b/helloworld/java-client/src/main/resources/META-INF/spring/service.xml
deleted file mode 100644
index bdcc57f..0000000
--- a/helloworld/java-client/src/main/resources/META-INF/spring/service.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
-
-    <bean class="org.apache.dubbo.Consumer" init-method="start">
-        <!-- 声明这个类 要使用的服务名-->
-        <property name="userProvider" ref="userProvider"/>
-    </bean>
-
-</beans>
diff --git a/helloworld/java-client/src/main/resources/dubbo.properties b/helloworld/java-client/src/main/resources/dubbo.properties
deleted file mode 100644
index 5ae386d..0000000
--- a/helloworld/java-client/src/main/resources/dubbo.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-### dubboע���������� ###
-dubbo.container=log4j,spring
-dubbo.application.name=user-info-client
-dubbo.application.owner=AlexStocks
-dubbo.application.environment=product
-dubbo.registry.address=zookeeper://127.0.0.1:2181
-dubbo.monitor.protocol=zookeeper
-dubbo.consumer.timeout=10000
-dubbo.provider.timeout=10000
-dubbo.protocol.name=dubbo
-dubbo.log4j.file=logs/client.log
-dubbo.log4j.level=WARN
diff --git a/helloworld/java-client/src/main/resources/log4j.properties b/helloworld/java-client/src/main/resources/log4j.properties
index 02748ae..6b82aba 100644
--- a/helloworld/java-client/src/main/resources/log4j.properties
+++ b/helloworld/java-client/src/main/resources/log4j.properties
@@ -1,16 +1,26 @@
-## Logger configure file for myproject
-log.dir=logs/
-datestamp=yyyy-MM-dd/HH:mm:ss.SSS
-log4j.rootLogger=DEBUG, file, console
-log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.file.threshold=DEBUG
-log4j.appender.file.File=${log.dir}/log4j.log
-log4j.appender.file.DatePattern=-yyyyMMddHH
-log4j.appender.file.ImmediateFlush=true
-log4j.appender.file.Append=true
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{${datestamp}} %5p: %l - %m%n
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.Threshold=DEBUG
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{${datestamp}} %5p: %l - %m%n
+#
+#
+#   Licensed to the Apache Software Foundation (ASF) under one or more
+#   contributor license agreements.  See the NOTICE file distributed with
+#   this work for additional information regarding copyright ownership.
+#   The ASF licenses this file to You under the Apache License, Version 2.0
+#   (the "License"); you may not use this file except in compliance with
+#   the License.  You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+#
+
+###set log levels###
+log4j.rootLogger=debug, stdout
+###output to the console###
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n
\ No newline at end of file
diff --git a/helloworld/java-server/build.sh b/helloworld/java-server/build.sh
deleted file mode 100644
index 7b5755b..0000000
--- a/helloworld/java-server/build.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# mvn dependency:sources
-mvn clean package -Dmaven.test.skip
-# mvn -X clean compile package -DskipTests=true
diff --git a/helloworld/java-server/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java b/helloworld/java-server/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
new file mode 100644
index 0000000..99758ac
--- /dev/null
+++ b/helloworld/java-server/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
@@ -0,0 +1,1432 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: helloworld.proto
+
+package org.apache.dubbo.sample.hello;
+
+public final class Helloworld {
+  private Helloworld() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  public interface HelloRequestOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:helloworld.HelloRequest)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string name = 1;</code>
+     * @return The name.
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 1;</code>
+     * @return The bytes for name.
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+  }
+  /**
+   * <pre>
+   * The request message containing the user's name.
+   * </pre>
+   *
+   * Protobuf type {@code helloworld.HelloRequest}
+   */
+  public static final class HelloRequest extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:helloworld.HelloRequest)
+      HelloRequestOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use HelloRequest.newBuilder() to construct.
+    private HelloRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private HelloRequest() {
+      name_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new HelloRequest();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private HelloRequest(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_HelloRequest_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_HelloRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.dubbo.sample.hello.Helloworld.HelloRequest.class, org.apache.dubbo.sample.hello.Helloworld.HelloRequest.Builder.class);
+    }
+
+    public static final int NAME_FIELD_NUMBER = 1;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 1;</code>
+     * @return The name.
+     */
+    @java.lang.Override
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string name = 1;</code>
+     * @return The bytes for name.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.apache.dubbo.sample.hello.Helloworld.HelloRequest)) {
+        return super.equals(obj);
+      }
+      org.apache.dubbo.sample.hello.Helloworld.HelloRequest other = (org.apache.dubbo.sample.hello.Helloworld.HelloRequest) obj;
+
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.apache.dubbo.sample.hello.Helloworld.HelloRequest prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * The request message containing the user's name.
+     * </pre>
+     *
+     * Protobuf type {@code helloworld.HelloRequest}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:helloworld.HelloRequest)
+        org.apache.dubbo.sample.hello.Helloworld.HelloRequestOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_HelloRequest_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_HelloRequest_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.apache.dubbo.sample.hello.Helloworld.HelloRequest.class, org.apache.dubbo.sample.hello.Helloworld.HelloRequest.Builder.class);
+      }
+
+      // Construct using org.apache.dubbo.sample.hello.Helloworld.HelloRequest.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_HelloRequest_descriptor;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.sample.hello.Helloworld.HelloRequest getDefaultInstanceForType() {
+        return org.apache.dubbo.sample.hello.Helloworld.HelloRequest.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.sample.hello.Helloworld.HelloRequest build() {
+        org.apache.dubbo.sample.hello.Helloworld.HelloRequest result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.sample.hello.Helloworld.HelloRequest buildPartial() {
+        org.apache.dubbo.sample.hello.Helloworld.HelloRequest result = new org.apache.dubbo.sample.hello.Helloworld.HelloRequest(this);
+        result.name_ = name_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.apache.dubbo.sample.hello.Helloworld.HelloRequest) {
+          return mergeFrom((org.apache.dubbo.sample.hello.Helloworld.HelloRequest)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.apache.dubbo.sample.hello.Helloworld.HelloRequest other) {
+        if (other == org.apache.dubbo.sample.hello.Helloworld.HelloRequest.getDefaultInstance()) return this;
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.apache.dubbo.sample.hello.Helloworld.HelloRequest parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.dubbo.sample.hello.Helloworld.HelloRequest) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 1;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:helloworld.HelloRequest)
+    }
+
+    // @@protoc_insertion_point(class_scope:helloworld.HelloRequest)
+    private static final org.apache.dubbo.sample.hello.Helloworld.HelloRequest DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.apache.dubbo.sample.hello.Helloworld.HelloRequest();
+    }
+
+    public static org.apache.dubbo.sample.hello.Helloworld.HelloRequest getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<HelloRequest>
+        PARSER = new com.google.protobuf.AbstractParser<HelloRequest>() {
+      @java.lang.Override
+      public HelloRequest parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new HelloRequest(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<HelloRequest> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<HelloRequest> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public org.apache.dubbo.sample.hello.Helloworld.HelloRequest getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface UserOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:helloworld.User)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string name = 1;</code>
+     * @return The name.
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 1;</code>
+     * @return The bytes for name.
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>string id = 2;</code>
+     * @return The id.
+     */
+    java.lang.String getId();
+    /**
+     * <code>string id = 2;</code>
+     * @return The bytes for id.
+     */
+    com.google.protobuf.ByteString
+        getIdBytes();
+
+    /**
+     * <code>int32 age = 3;</code>
+     * @return The age.
+     */
+    int getAge();
+  }
+  /**
+   * <pre>
+   * The response message containing the greetings
+   * </pre>
+   *
+   * Protobuf type {@code helloworld.User}
+   */
+  public static final class User extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:helloworld.User)
+      UserOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use User.newBuilder() to construct.
+    private User(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private User() {
+      name_ = "";
+      id_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new User();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private User(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              id_ = s;
+              break;
+            }
+            case 24: {
+
+              age_ = input.readInt32();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_User_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_User_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.dubbo.sample.hello.Helloworld.User.class, org.apache.dubbo.sample.hello.Helloworld.User.Builder.class);
+    }
+
+    public static final int NAME_FIELD_NUMBER = 1;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 1;</code>
+     * @return The name.
+     */
+    @java.lang.Override
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string name = 1;</code>
+     * @return The bytes for name.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int ID_FIELD_NUMBER = 2;
+    private volatile java.lang.Object id_;
+    /**
+     * <code>string id = 2;</code>
+     * @return The id.
+     */
+    @java.lang.Override
+    public java.lang.String getId() {
+      java.lang.Object ref = id_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        id_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string id = 2;</code>
+     * @return The bytes for id.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getIdBytes() {
+      java.lang.Object ref = id_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        id_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int AGE_FIELD_NUMBER = 3;
+    private int age_;
+    /**
+     * <code>int32 age = 3;</code>
+     * @return The age.
+     */
+    @java.lang.Override
+    public int getAge() {
+      return age_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
+      }
+      if (!getIdBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, id_);
+      }
+      if (age_ != 0) {
+        output.writeInt32(3, age_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
+      }
+      if (!getIdBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, id_);
+      }
+      if (age_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(3, age_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.apache.dubbo.sample.hello.Helloworld.User)) {
+        return super.equals(obj);
+      }
+      org.apache.dubbo.sample.hello.Helloworld.User other = (org.apache.dubbo.sample.hello.Helloworld.User) obj;
+
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (!getId()
+          .equals(other.getId())) return false;
+      if (getAge()
+          != other.getAge()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      hash = (37 * hash) + ID_FIELD_NUMBER;
+      hash = (53 * hash) + getId().hashCode();
+      hash = (37 * hash) + AGE_FIELD_NUMBER;
+      hash = (53 * hash) + getAge();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.apache.dubbo.sample.hello.Helloworld.User parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.apache.dubbo.sample.hello.Helloworld.User prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * The response message containing the greetings
+     * </pre>
+     *
+     * Protobuf type {@code helloworld.User}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:helloworld.User)
+        org.apache.dubbo.sample.hello.Helloworld.UserOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_User_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_User_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.apache.dubbo.sample.hello.Helloworld.User.class, org.apache.dubbo.sample.hello.Helloworld.User.Builder.class);
+      }
+
+      // Construct using org.apache.dubbo.sample.hello.Helloworld.User.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+
+        id_ = "";
+
+        age_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.apache.dubbo.sample.hello.Helloworld.internal_static_helloworld_User_descriptor;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.sample.hello.Helloworld.User getDefaultInstanceForType() {
+        return org.apache.dubbo.sample.hello.Helloworld.User.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.sample.hello.Helloworld.User build() {
+        org.apache.dubbo.sample.hello.Helloworld.User result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public org.apache.dubbo.sample.hello.Helloworld.User buildPartial() {
+        org.apache.dubbo.sample.hello.Helloworld.User result = new org.apache.dubbo.sample.hello.Helloworld.User(this);
+        result.name_ = name_;
+        result.id_ = id_;
+        result.age_ = age_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.apache.dubbo.sample.hello.Helloworld.User) {
+          return mergeFrom((org.apache.dubbo.sample.hello.Helloworld.User)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.apache.dubbo.sample.hello.Helloworld.User other) {
+        if (other == org.apache.dubbo.sample.hello.Helloworld.User.getDefaultInstance()) return this;
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        if (!other.getId().isEmpty()) {
+          id_ = other.id_;
+          onChanged();
+        }
+        if (other.getAge() != 0) {
+          setAge(other.getAge());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.apache.dubbo.sample.hello.Helloworld.User parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.dubbo.sample.hello.Helloworld.User) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 1;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object id_ = "";
+      /**
+       * <code>string id = 2;</code>
+       * @return The id.
+       */
+      public java.lang.String getId() {
+        java.lang.Object ref = id_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          id_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string id = 2;</code>
+       * @return The bytes for id.
+       */
+      public com.google.protobuf.ByteString
+          getIdBytes() {
+        java.lang.Object ref = id_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          id_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string id = 2;</code>
+       * @param value The id to set.
+       * @return This builder for chaining.
+       */
+      public Builder setId(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        id_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string id = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearId() {
+        
+        id_ = getDefaultInstance().getId();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string id = 2;</code>
+       * @param value The bytes for id to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIdBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        id_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int age_ ;
+      /**
+       * <code>int32 age = 3;</code>
+       * @return The age.
+       */
+      @java.lang.Override
+      public int getAge() {
+        return age_;
+      }
+      /**
+       * <code>int32 age = 3;</code>
+       * @param value The age to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAge(int value) {
+        
+        age_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>int32 age = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAge() {
+        
+        age_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:helloworld.User)
+    }
+
+    // @@protoc_insertion_point(class_scope:helloworld.User)
+    private static final org.apache.dubbo.sample.hello.Helloworld.User DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.apache.dubbo.sample.hello.Helloworld.User();
+    }
+
+    public static org.apache.dubbo.sample.hello.Helloworld.User getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<User>
+        PARSER = new com.google.protobuf.AbstractParser<User>() {
+      @java.lang.Override
+      public User parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new User(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<User> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<User> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public org.apache.dubbo.sample.hello.Helloworld.User getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_helloworld_HelloRequest_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_helloworld_HelloRequest_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_helloworld_User_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_helloworld_User_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\020helloworld.proto\022\nhelloworld\"\034\n\014HelloR" +
+      "equest\022\014\n\004name\030\001 \001(\t\"-\n\004User\022\014\n\004name\030\001 \001" +
+      "(\t\022\n\n\002id\030\002 \001(\t\022\013\n\003age\030\003 \001(\005B\037\n\035org.apach" +
+      "e.dubbo.sample.hellob\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        });
+    internal_static_helloworld_HelloRequest_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_helloworld_HelloRequest_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_helloworld_HelloRequest_descriptor,
+        new java.lang.String[] { "Name", });
+    internal_static_helloworld_User_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_helloworld_User_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_helloworld_User_descriptor,
+        new java.lang.String[] { "Name", "Id", "Age", });
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/helloworld/java-server/pom.xml b/helloworld/java-server/pom.xml
index e299ade..dd518ca 100644
--- a/helloworld/java-server/pom.xml
+++ b/helloworld/java-server/pom.xml
@@ -1,188 +1,161 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-
+  ~  Licensed to the Apache Software Foundation (ASF) under one or more
+  ~  contributor license agreements.  See the NOTICE file distributed with
+  ~  this work for additional information regarding copyright ownership.
+  ~  The ASF licenses this file to You under the Apache License, Version 2.0
+  ~  (the "License"); you may not use this file except in compliance with
+  ~  the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~  Unless required by applicable law or agreed to in writing, software
+  ~  distributed under the License is distributed on an "AS IS" BASIS,
+  ~  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~  See the License for the specific language governing permissions and
+  ~  limitations under the License.
+  -->
 
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <groupId>org.apache.dubbo</groupId>
+    <version>1.0-SNAPSHOT</version>
+
     <modelVersion>4.0.0</modelVersion>
 
-    <groupId>com.ikurento</groupId>
-    <artifactId>user-info-server</artifactId>
-    <packaging>jar</packaging>
-    <version>0.2.0</version>
-    <description>The demo provider module of dubbo project</description>
-    <properties>
-        <skip_maven_deploy>false</skip_maven_deploy>
+    <artifactId>dubbo-samples-triple</artifactId>
 
-        <dubbo-version>2.6.5</dubbo-version>
-        <dubbo-jsonrpc-version>1.0.1</dubbo-jsonrpc-version>
+    <properties>
+        <source.level>1.8</source.level>
+        <target.level>1.8</target.level>
+        <dubbo.version>3.0.0</dubbo.version>
+        <junit.version>4.12</junit.version>
+        <spring-test.version>4.3.16.RELEASE</spring-test.version>
+        <maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
+        <maven-failsafe-plugin.version>2.21.0</maven-failsafe-plugin.version>
+        <spring-boot.version>1.5.13.RELEASE</spring-boot.version>
+        <grpc.version>1.19.0</grpc.version>
+        <protoc.version>3.7.1</protoc.version>
     </properties>
 
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>com.alibaba</groupId>
-                <artifactId>dubbo-dependencies-bom</artifactId>
-                <version>${dubbo-version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
     <dependencies>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>1.7.25</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.alibaba</groupId>
+            <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo</artifactId>
-            <version>${dubbo-version}</version>
-            <exclusions>
-            </exclusions>
-        </dependency>
-
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-all</artifactId>
+            <version>${dubbo.version}</version>
         </dependency>
         <dependency>
-            <groupId>org.apache.curator</groupId>
-            <artifactId>curator-framework</artifactId>
-            <version>2.12.0</version>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>3.14.0</version>
         </dependency>
-
         <dependency>
-            <groupId>com.qianmi</groupId>
-            <artifactId>dubbo-rpc-jsonrpc</artifactId>
-            <version>${dubbo-jsonrpc-version}</version>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-dependencies-zookeeper</artifactId>
+            <version>${dubbo.version}</version>
+            <type>pom</type>
             <exclusions>
                 <exclusion>
-                    <groupId>org.springframework</groupId>
-                    <artifactId>spring</artifactId>
+                    <groupId>org.apache.zookeeper</groupId>
+                    <artifactId>zookeeper</artifactId>
                 </exclusion>
             </exclusions>
         </dependency>
-
-        <dependency>
-            <groupId>org.mortbay.jetty</groupId>
-            <artifactId>jetty</artifactId>
-            <version>6.1.26</version>
-        </dependency>
-
         <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-core</artifactId>
-            <version>2.10.0</version>
+            <groupId>org.apache.zookeeper</groupId>
+            <artifactId>zookeeper</artifactId>
+            <version>3.4.8</version>
         </dependency>
         <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-            <version>2.10.0</version>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit.version}</version>
+            <scope>test</scope>
         </dependency>
-
         <dependency>
-            <groupId>com.github.sgroschupf</groupId>
-            <artifactId>zkclient</artifactId>
-            <version>0.1</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>org.apache.zookeeper</artifactId>
-                    <groupId>zookeeper</groupId>
-                </exclusion>
-            </exclusions>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+            <version>${spring-test.version}</version>
+            <scope>test</scope>
         </dependency>
 
         <dependency>
-            <groupId>org.apache.zookeeper</groupId>
-            <artifactId>zookeeper</artifactId>
-            <version>3.4.14</version>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>testcontainers</artifactId>
+            <version>1.12.3</version>
+            <scope>test</scope>
         </dependency>
-
     </dependencies>
 
-    <repositories>
-        <repository>
-            <id>nexus-aliyu</id>
-            <url>https://maven.aliyun.com/nexus/content/groups/public</url>
-            <releases>
-                <enabled>true</enabled>
-            </releases>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-        </repository>
-    </repositories>
-    <pluginRepositories>
-        <pluginRepository>
-            <id>nexus-aliyu</id>
-            <url>https://maven.aliyun.com/nexus/content/groups/public</url>
-            <releases>
-                <enabled>true</enabled>
-            </releases>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-        </pluginRepository>
-    </pluginRepositories>
-
+    <profiles>
+        <!-- For jdk 11 above JavaEE annotation -->
+        <profile>
+            <id>javax.annotation</id>
+            <activation>
+                <jdk>[1.11,)</jdk>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>javax.annotation</groupId>
+                    <artifactId>javax.annotation-api</artifactId>
+                    <version>1.3.2</version>
+                </dependency>
+            </dependencies>
+        </profile>
+    </profiles>
 
     <build>
+        <defaultGoal>package</defaultGoal>
+        <extensions>
+            <extension>
+                <groupId>kr.motd.maven</groupId>
+                <artifactId>os-maven-plugin</artifactId>
+                <version>1.6.1</version>
+            </extension>
+        </extensions>
 
         <plugins>
             <plugin>
-                <artifactId>maven-dependency-plugin</artifactId>
+                <groupId>org.xolstice.maven.plugins</groupId>
+                <artifactId>protobuf-maven-plugin</artifactId>
+                <version>0.6.1</version>
+                <configuration>
+                    <protocArtifact>com.google.protobuf:protoc:3.17.3:exe:${os.detected.classifier}</protocArtifact>
+                    <pluginId>triple-java</pluginId>
+                    <outputDirectory>build/generated/source/proto/main/java</outputDirectory>
+                </configuration>
                 <executions>
                     <execution>
-                        <id>unpack</id>
-                        <phase>package</phase>
                         <goals>
-                            <goal>unpack</goal>
+                            <goal>compile</goal>
+                            <goal>test-compile</goal>
                         </goals>
-                        <configuration>
-                            <artifactItems>
-                                <artifactItem>
-                                    <groupId>com.alibaba</groupId>
-                                    <artifactId>dubbo</artifactId>
-                                    <version>${dubbo-version}</version>
-                                    <outputDirectory>${project.build.directory}/dubbo</outputDirectory>
-                                    <includes>META-INF/assembly/**</includes>
-                                </artifactItem>
-                            </artifactItems>
-                        </configuration>
                     </execution>
                 </executions>
             </plugin>
-
             <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${maven-compiler-plugin.version}</version>
+                <configuration>
+                    <source>${source.level}</source>
+                    <target>${target.level}</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
                 <executions>
                     <execution>
-                        <id>make-assembly</id>
-                        <phase>package</phase>
+                        <phase>generate-sources</phase>
                         <goals>
-                            <goal>single</goal>
+                            <goal>add-source</goal>
                         </goals>
                         <configuration>
-                            <descriptors>
-                                <descriptor>src/main/assembly/assembly.xml</descriptor>
-                            </descriptors>
+                            <sources>
+                                <source>build/generated/source/proto/main/java</source>
+                            </sources>
                         </configuration>
                     </execution>
                 </executions>
@@ -190,7 +163,4 @@
         </plugins>
     </build>
 
-
-</project>
-
-
+</project>
\ No newline at end of file
diff --git a/helloworld/java-server/run.sh b/helloworld/java-server/run.sh
new file mode 100644
index 0000000..939b13d
--- /dev/null
+++ b/helloworld/java-server/run.sh
@@ -0,0 +1,2 @@
+mvn install -DSkipTests
+mvn exec:java -Dexec.mainClass="com.apache.dubbo.sample.basic.ApiProvider"
\ No newline at end of file
diff --git a/helloworld/java-server/script/debug.sh b/helloworld/java-server/script/debug.sh
deleted file mode 100644
index 851957a..0000000
--- a/helloworld/java-server/script/debug.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-# jdb -classpath /Users/alex/tmp/us/conf:/Users/alex/tmp/us/lib/*:/Users/alex/test/java/dubbo/2.5.4/dubbo-remoting/dubbo-remoting-api/src/main/java/ com.alibaba.dubbo.container.Main
-jdb -classpath /Users/alex/tmp/us/conf:/Users/alex/tmp/us/lib/* -sourcepath /Users/alex/test/java/dubbo/2.5.4/dubbo-remoting/dubbo-remoting-api/src/main/java/:/Users/alex/tmp/java-server/src/main/java com.alibaba.dubbo.container.Main
-# jdb stop at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec:76
-# run
-
diff --git a/helloworld/java-server/src/main/assembly/assembly.xml b/helloworld/java-server/src/main/assembly/assembly.xml
deleted file mode 100644
index 60df0c5..0000000
--- a/helloworld/java-server/src/main/assembly/assembly.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<assembly>
-    <id>assembly</id>
-    <formats>
-        <format>tar.gz</format>
-    </formats>
-    <includeBaseDirectory>true</includeBaseDirectory>
-    <fileSets>
-        <fileSet>
-            <directory>${project.build.directory}/dubbo/META-INF/assembly/bin</directory>
-            <outputDirectory>bin</outputDirectory>
-            <fileMode>0755</fileMode>
-            <directoryMode>0755</directoryMode>
-        </fileSet>
-        <fileSet>
-            <directory>src/main/resources</directory>
-            <includes>
-                <include>dubbo.properties</include>
-                <include>log4j.*</include>
-            </includes>
-            <outputDirectory>conf</outputDirectory>
-            <fileMode>0644</fileMode>
-            <directoryMode>0755</directoryMode>
-        </fileSet>
-    </fileSets>
-    <dependencySets>
-        <dependencySet>
-            <outputDirectory>lib</outputDirectory>
-        </dependencySet>
-    </dependencySets>
-</assembly>
\ No newline at end of file
diff --git a/helloworld/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java b/helloworld/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java
new file mode 100644
index 0000000..e052dcb
--- /dev/null
+++ b/helloworld/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java
@@ -0,0 +1,39 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package com.apache.dubbo.sample.basic;
+
+import org.apache.dubbo.common.constants.CommonConstants;
+import org.apache.dubbo.config.ApplicationConfig;
+import org.apache.dubbo.config.ProtocolConfig;
+import org.apache.dubbo.config.RegistryConfig;
+import org.apache.dubbo.config.ServiceConfig;
+import java.util.concurrent.CountDownLatch;
+
+public class ApiProvider {
+    public static void main(String[] args) throws InterruptedException {
+        ServiceConfig<IGreeter> service = new ServiceConfig<>();
+        service.setInterface(IGreeter.class);
+        service.setRef(new IGreeter1Impl());
+        service.setProtocol(new ProtocolConfig(CommonConstants.TRIPLE, 50051));
+        service.setApplication(new ApplicationConfig("demo-provider"));
+        service.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
+        service.export();
+        System.out.println("dubbo service started");
+        new CountDownLatch(1).await();
+    }
+}
diff --git a/helloworld/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java b/helloworld/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
new file mode 100644
index 0000000..e8aa2fe
--- /dev/null
+++ b/helloworld/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
@@ -0,0 +1,30 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package com.apache.dubbo.sample.basic;
+
+import org.apache.dubbo.sample.hello.Helloworld;
+
+public interface IGreeter {
+    /**
+     * <pre>
+     *  Sends a greeting
+     * </pre>
+     */
+    Helloworld.User sayHello(Helloworld.HelloRequest request);
+
+}
diff --git a/helloworld/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter1Impl.java b/helloworld/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter1Impl.java
new file mode 100644
index 0000000..dfb1ac8
--- /dev/null
+++ b/helloworld/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter1Impl.java
@@ -0,0 +1,34 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package com.apache.dubbo.sample.basic;
+
+
+import org.apache.dubbo.sample.hello.Helloworld.User;
+import org.apache.dubbo.sample.hello.Helloworld.HelloRequest;
+
+public class IGreeter1Impl implements IGreeter {
+    @Override
+    public User sayHello(HelloRequest request) {
+        System.out.println("receiv: " + request);
+        User usr = User.newBuilder()
+                .setName("hello " + request.getName())
+                .setAge(18)
+                .setId("12345").build();
+        return usr;
+    }
+}
diff --git a/helloworld/java-server/src/main/java/org/apache/dubbo/Provider.java b/helloworld/java-server/src/main/java/org/apache/dubbo/Provider.java
deleted file mode 100644
index a50220a..0000000
--- a/helloworld/java-server/src/main/java/org/apache/dubbo/Provider.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dubbo;
-
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-public class Provider {
-
-    /**
-     * To get ipv6 address to work, add
-     * System.setProperty("java.net.preferIPv6Addresses", "true");
-     * before running your application.
-     */
-    public static void main(String[] args) throws Exception {
-        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo.provider.xml"});
-        context.start();
-        System.in.read(); // press any key to exit
-    }
-}
diff --git a/helloworld/java-server/src/main/java/org/apache/dubbo/User.java b/helloworld/java-server/src/main/java/org/apache/dubbo/User.java
deleted file mode 100644
index 8483880..0000000
--- a/helloworld/java-server/src/main/java/org/apache/dubbo/User.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo;
-
-import java.util.Date;
-import java.io.Serializable;
-
-public class User implements Serializable  {
-
-    private String id;
-
-    private String name;
-
-    private int age;
-
-    private Date time = new Date();
-
-    public User() {
-    }
-
-    public User(String id, String name, int age) {
-        this.id = id;
-        this.name = name;
-        this.age = age;
-    }
-
-    public User(String id, String name, int age, Date time) {
-        this.id = id;
-        this.name = name;
-        this.age = age;
-        this.time = time;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public int getAge() {
-        return age;
-    }
-
-    public void setAge(int age) {
-        this.age = age;
-    }
-
-    public Date getTime() {
-        return time;
-    }
-
-    public void setTime(Date time) {
-        this.time = time;
-    }
-
-
-
-    public String toString() {
-        return "User{id:" + id + ", name:" + name + ", age:" + age + ", time:" + time +"}";
-    }
-}
diff --git a/helloworld/java-server/src/main/java/org/apache/dubbo/UserProvider.java b/helloworld/java-server/src/main/java/org/apache/dubbo/UserProvider.java
deleted file mode 100644
index d07a757..0000000
--- a/helloworld/java-server/src/main/java/org/apache/dubbo/UserProvider.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo;
-
-public interface UserProvider {
-
-    User GetUser(String userId); // the first alpha is Upper case to compatible with golang.
-
-}
diff --git a/helloworld/java-server/src/main/java/org/apache/dubbo/UserProviderImpl.java b/helloworld/java-server/src/main/java/org/apache/dubbo/UserProviderImpl.java
deleted file mode 100644
index 74a6c09..0000000
--- a/helloworld/java-server/src/main/java/org/apache/dubbo/UserProviderImpl.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class UserProviderImpl implements UserProvider {
-    private static final Logger LOG = LoggerFactory.getLogger("UserLogger"); //Output to user-server.log
-
-    public User GetUser(String userId) {
-        return new User(userId, "zhangsan", 18);
-    }
-
-}
diff --git a/helloworld/java-server/src/main/proto/helloworld.proto b/helloworld/java-server/src/main/proto/helloworld.proto
new file mode 100644
index 0000000..ee6ca29
--- /dev/null
+++ b/helloworld/java-server/src/main/proto/helloworld.proto
@@ -0,0 +1,28 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+syntax = "proto3";
+
+option java_package = "org.apache.dubbo.sample.hello";
+
+package helloworld;
+
+// The request message containing the user's name.
+message HelloRequest {
+  string name = 1;
+}
+
+// The response message containing the greetings
+message User {
+  string name = 1;
+  string id = 2;
+  int32 age = 3;
+}
diff --git a/helloworld/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml b/helloworld/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml
deleted file mode 100644
index 2d01d66..0000000
--- a/helloworld/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
-	http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
-
-    <!-- 应用名 -->
-    <dubbo:application name="user-info-server"/>
-    <!-- 连接到哪个本地注册中心 -->
-    <dubbo:registry id="demoZk" address="zookeeper://127.0.0.1:2181"/>
-    <!-- 用dubbo协议在20880端口暴露服务 -->
-    <!-- dubbo:protocol host="127.0.0.1" / -->
-    <dubbo:protocol id="dubbo" name="dubbo" host="127.0.0.1" port="20010"/>
-    <!-- 声明需要暴露的服务接口 -->
-    <dubbo:service id="aaa" registry="demoZk" timeout="3000" interface="org.apache.dubbo.UserProvider"
-                   ref="demoService"/>
-
-    <bean id="demoService" class="org.apache.dubbo.UserProviderImpl"/>
-
-</beans>
diff --git a/helloworld/java-server/src/main/resources/dubbo.properties b/helloworld/java-server/src/main/resources/dubbo.properties
deleted file mode 100644
index 37df62e..0000000
--- a/helloworld/java-server/src/main/resources/dubbo.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-### dubbo注册中心配置 ##
-dubbo.container=log4j,spring
-dubbo.application.name=user-info-server
-dubbo.application.environment=product
-dubbo.application.owner=AlexStocks
-dubbo.registry.address=127.0.0.1:2181
-dubbo.registry.protocol=zookeeper
-dubbo.consumer.timeout=10000
-dubbo.provider.timeout=10000
-dubbo.protocol.name=dubbo
-dubbo.protocol.port=10000
-dubbo.log4j.file=logs/dubbo.log
-dubbo.log4j.level=INFO
diff --git a/helloworld/java-server/src/main/resources/log4j.properties b/helloworld/java-server/src/main/resources/log4j.properties
index e2d0517..6b82aba 100644
--- a/helloworld/java-server/src/main/resources/log4j.properties
+++ b/helloworld/java-server/src/main/resources/log4j.properties
@@ -1,17 +1,26 @@
-## Logger configure file for myproject
-log.dir=logs/
-datestamp=yyyy-MM-dd/HH:mm:ss.SSS
-log4j.rootLogger=DEBUG, file, console
-log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.file.threshold=DEBUG
-log4j.appender.file.File=${log.dir}/log4j.log
-log4j.appender.file.DatePattern=-yyyyMMddHH
-log4j.appender.file.ImmediateFlush=true
-log4j.appender.file.Append=true
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{${datestamp}} %5p: %l - %m%n
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.Threshold=DEBUG
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{${datestamp}} %5p: %l - %m%n
+#
+#
+#   Licensed to the Apache Software Foundation (ASF) under one or more
+#   contributor license agreements.  See the NOTICE file distributed with
+#   this work for additional information regarding copyright ownership.
+#   The ASF licenses this file to You under the Apache License, Version 2.0
+#   (the "License"); you may not use this file except in compliance with
+#   the License.  You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+#
 
+###set log levels###
+log4j.rootLogger=debug, stdout
+###output to the console###
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n
\ No newline at end of file
diff --git a/helloworld/protobuf/helloworld.pb.go b/helloworld/protobuf/helloworld.pb.go
new file mode 100644
index 0000000..89625a4
--- /dev/null
+++ b/helloworld/protobuf/helloworld.pb.go
@@ -0,0 +1,323 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: helloworld.proto
+
+package protobuf
+
+import (
+	context "context"
+	fmt "fmt"
+	math "math"
+)
+
+import (
+	"dubbo.apache.org/dubbo-go/v3/protocol"
+	dgrpc "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
+	"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
+
+	tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
+	dubbo3 "github.com/dubbogo/triple/pkg/triple"
+
+	proto "github.com/golang/protobuf/proto"
+
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+
+	status "google.golang.org/grpc/status"
+)
+
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The request message containing the user's name.
+type HelloRequest struct {
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HelloRequest) Reset()         { *m = HelloRequest{} }
+func (m *HelloRequest) String() string { return proto.CompactTextString(m) }
+func (*HelloRequest) ProtoMessage()    {}
+func (*HelloRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_17b8c58d586b62f2, []int{0}
+}
+
+func (m *HelloRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HelloRequest.Unmarshal(m, b)
+}
+func (m *HelloRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HelloRequest.Marshal(b, m, deterministic)
+}
+func (m *HelloRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HelloRequest.Merge(m, src)
+}
+func (m *HelloRequest) XXX_Size() int {
+	return xxx_messageInfo_HelloRequest.Size(m)
+}
+func (m *HelloRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_HelloRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HelloRequest proto.InternalMessageInfo
+
+func (m *HelloRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+// The response message containing the greetings
+type User struct {
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Id                   string   `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	Age                  int32    `protobuf:"varint,3,opt,name=age,proto3" json:"age,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *User) Reset()         { *m = User{} }
+func (m *User) String() string { return proto.CompactTextString(m) }
+func (*User) ProtoMessage()    {}
+func (*User) Descriptor() ([]byte, []int) {
+	return fileDescriptor_17b8c58d586b62f2, []int{1}
+}
+
+func (m *User) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_User.Unmarshal(m, b)
+}
+func (m *User) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_User.Marshal(b, m, deterministic)
+}
+func (m *User) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_User.Merge(m, src)
+}
+func (m *User) XXX_Size() int {
+	return xxx_messageInfo_User.Size(m)
+}
+func (m *User) XXX_DiscardUnknown() {
+	xxx_messageInfo_User.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_User proto.InternalMessageInfo
+
+func (m *User) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *User) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *User) GetAge() int32 {
+	if m != nil {
+		return m.Age
+	}
+	return 0
+}
+
+func init() {
+	proto.RegisterType((*HelloRequest)(nil), "protobuf.HelloRequest")
+	proto.RegisterType((*User)(nil), "protobuf.User")
+}
+
+func init() { proto.RegisterFile("helloworld.proto", fileDescriptor_17b8c58d586b62f2) }
+
+var fileDescriptor_17b8c58d586b62f2 = []byte{
+	// 160 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xc8, 0x48, 0xcd, 0xc9,
+	0xc9, 0x2f, 0xcf, 0x2f, 0xca, 0x49, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x00, 0x53,
+	0x49, 0xa5, 0x69, 0x4a, 0x4a, 0x5c, 0x3c, 0x1e, 0x20, 0xd9, 0xa0, 0xd4, 0xc2, 0xd2, 0xd4, 0xe2,
+	0x12, 0x21, 0x21, 0x2e, 0x96, 0xbc, 0xc4, 0xdc, 0x54, 0x09, 0x46, 0x05, 0x46, 0x0d, 0xce, 0x20,
+	0x30, 0x5b, 0xc9, 0x86, 0x8b, 0x25, 0xb4, 0x38, 0xb5, 0x08, 0x9b, 0x9c, 0x10, 0x1f, 0x17, 0x53,
+	0x66, 0x8a, 0x04, 0x13, 0x58, 0x84, 0x29, 0x33, 0x45, 0x48, 0x80, 0x8b, 0x39, 0x31, 0x3d, 0x55,
+	0x82, 0x59, 0x81, 0x51, 0x83, 0x35, 0x08, 0xc4, 0x34, 0xb2, 0xe7, 0x62, 0x77, 0x2f, 0x4a, 0x4d,
+	0x2d, 0x49, 0x2d, 0x12, 0x32, 0xe1, 0xe2, 0x08, 0x4e, 0xac, 0x04, 0xdb, 0x27, 0x24, 0xa6, 0x07,
+	0x73, 0x83, 0x1e, 0xb2, 0x03, 0xa4, 0xf8, 0x10, 0xe2, 0x20, 0x4b, 0x95, 0x18, 0x92, 0xd8, 0xc0,
+	0x02, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcf, 0xdb, 0xd1, 0x8b, 0xc7, 0x00, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// GreeterClient is the client API for Greeter service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GreeterClient interface {
+	// Sends a greeting
+	SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*User, error)
+}
+
+type greeterClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewGreeterClient(cc grpc.ClientConnInterface) GreeterClient {
+	return &greeterClient{cc}
+}
+
+func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*User, error) {
+	out := new(User)
+	err := c.cc.Invoke(ctx, "/protobuf.Greeter/SayHello", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// GreeterServer is the server API for Greeter service.
+type GreeterServer interface {
+	// Sends a greeting
+	SayHello(context.Context, *HelloRequest) (*User, error)
+}
+
+// UnimplementedGreeterServer can be embedded to have forward compatible implementations.
+type UnimplementedGreeterServer struct {
+}
+
+func (*UnimplementedGreeterServer) SayHello(ctx context.Context, req *HelloRequest) (*User, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SayHello not implemented")
+}
+
+func RegisterGreeterServer(s *grpc.Server, srv GreeterServer) {
+	s.RegisterService(&_Greeter_serviceDesc, srv)
+}
+
+func _Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(HelloRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(GreeterServer).SayHello(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/protobuf.Greeter/SayHello",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GreeterServer).SayHello(ctx, req.(*HelloRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _Greeter_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "protobuf.Greeter",
+	HandlerType: (*GreeterServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "SayHello",
+			Handler:    _Greeter_SayHello_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "helloworld.proto",
+}
+
+type greeterDubbo3Client struct {
+	cc *dubbo3.TripleConn
+}
+
+func NewGreeterDubbo3Client(cc *dubbo3.TripleConn) GreeterClient {
+	return &greeterDubbo3Client{cc}
+}
+func (c *greeterDubbo3Client) SayHello(ctx context.Context, in *HelloRequest, opt ...grpc.CallOption) (*User, error) {
+	out := new(User)
+	interfaceKey := ctx.Value(tripleConstant.InterfaceKey).(string)
+	err := c.cc.Invoke(ctx, "/"+interfaceKey+"/SayHello", in, out)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// GreeterClientImpl is the client API for Greeter service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GreeterClientImpl struct {
+	// Sends a greeting
+	SayHello func(ctx context.Context, in *HelloRequest, out *User) error
+}
+
+func (c *GreeterClientImpl) Reference() string {
+	return "greeterImpl"
+}
+
+func (c *GreeterClientImpl) GetDubboStub(cc *dubbo3.TripleConn) GreeterClient {
+	return NewGreeterDubbo3Client(cc)
+}
+
+type GreeterProviderBase struct {
+	proxyImpl protocol.Invoker
+}
+
+func (s *GreeterProviderBase) SetProxyImpl(impl protocol.Invoker) {
+	s.proxyImpl = impl
+}
+
+func (s *GreeterProviderBase) GetProxyImpl() protocol.Invoker {
+	return s.proxyImpl
+}
+
+func (c *GreeterProviderBase) Reference() string {
+	return "greeterImpl"
+}
+
+func _DUBBO_Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(HelloRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	base := srv.(dgrpc.Dubbo3GrpcService)
+	args := []interface{}{}
+	args = append(args, in)
+	invo := invocation.NewRPCInvocation("SayHello", args, nil)
+	if interceptor == nil {
+		result := base.GetProxyImpl().Invoke(ctx, invo)
+		return result.Result(), result.Error()
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/protobuf.Greeter/SayHello",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		result := base.GetProxyImpl().Invoke(context.Background(), invo)
+		return result.Result(), result.Error()
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func (s *GreeterProviderBase) ServiceDesc() *grpc.ServiceDesc {
+	return &grpc.ServiceDesc{
+		ServiceName: "protobuf.Greeter",
+		HandlerType: (*GreeterServer)(nil),
+		Methods: []grpc.MethodDesc{
+			{
+				MethodName: "SayHello",
+				Handler:    _DUBBO_Greeter_SayHello_Handler,
+			},
+		},
+		Streams:  []grpc.StreamDesc{},
+		Metadata: "helloworld.proto",
+	}
+}
diff --git a/helloworld/go-client/pkg/user.go b/helloworld/protobuf/helloworld.proto
similarity index 68%
rename from helloworld/go-client/pkg/user.go
rename to helloworld/protobuf/helloworld.proto
index 7733ea4..92b2876 100644
--- a/helloworld/go-client/pkg/user.go
+++ b/helloworld/protobuf/helloworld.proto
@@ -15,28 +15,23 @@
  * limitations under the License.
  */
 
-package pkg
+syntax = "proto3";
+package protobuf;
 
-import (
-	"context"
-	"time"
-)
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
+// The greeting service definition.
+service Greeter {
+  // Sends a greeting
+  rpc SayHello (HelloRequest) returns (User) {}
 }
 
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
+// The request message containing the user's name.
+message HelloRequest {
+  string name = 1;
 }
 
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
+// The response message containing the greetings
+message User {
+  string name = 1;
+  string id = 2;
+  int32 age = 3;
+}
\ No newline at end of file
diff --git a/helloworld/protobuf/protobuf.mk b/helloworld/protobuf/protobuf.mk
new file mode 100644
index 0000000..5680c3d
--- /dev/null
+++ b/helloworld/protobuf/protobuf.mk
@@ -0,0 +1,26 @@
+.PHONY: compile
+PROTOC_GEN_GO := $(GOPATH)/bin/protoc-gen-go
+PROTOC := $(shell which protoc)
+ifeq ($(PROTOC),)
+	PROTOC = must-rebuild
+endif
+
+UNAME := $(shell uname)
+
+$(PROTOC):
+ifeq ($(UNAME), Darwin)
+	brew install protobuf
+endif
+ifeq ($(UNAME), Linux)
+	sudo apt-get install protobuf-compiler
+endif
+
+$(PROTOC_GEN_GO):
+	go get -u dubbo.apache.org/dubbo-go/v3/protocol/dubbo3/protoc-gen-dubbo3
+
+helloworld.pb.go: helloworld.proto | $(PROTOC_GEN_GO) $(PROTOC)
+	protoc -I . helloworld.proto --dubbo3_out=plugins=grpc+dubbo:.
+
+.PHONY: compile
+compile: helloworld.pb.go
+
diff --git a/logger/go-client/cmd/client.go b/logger/go-client/cmd/client.go
index b1815bf..7b7841a 100755
--- a/logger/go-client/cmd/client.go
+++ b/logger/go-client/cmd/client.go
@@ -38,7 +38,7 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/helloworld/go-client/pkg"
+	"github.com/apache/dubbo-go-samples/logger/go-client/pkg"
 )
 
 var userProvider = new(pkg.UserProvider)

[dubbo-go-samples] 08/14: update nacos samples config (#205)

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git

commit 7b0d9e79774c0227bd868ac1c459d8393884589f
Author: Mulavar <97...@qq.com>
AuthorDate: Sat Aug 28 09:06:55 2021 +0800

    update nacos samples config (#205)
    
    Co-authored-by: dongjianhui03 <do...@meituan.com>
---
 .run/registry/registry-nacos-go-client.run.xml |  4 +-
 .run/registry/registry-nacos-go-server.run.xml |  4 +-
 registry/nacos/go-client/cmd/client.go         | 27 +++++++----
 registry/nacos/go-client/conf/client.yml       | 57 -----------------------
 registry/nacos/go-client/conf/dubbogo.yml      | 13 ++++++
 registry/nacos/go-client/pkg/user.go           | 42 -----------------
 registry/nacos/go-server/cmd/server.go         | 38 ++++++++++++++--
 registry/nacos/go-server/conf/client.yml       | 57 -----------------------
 registry/nacos/go-server/conf/dubbogo.yml      | 17 +++++++
 registry/nacos/go-server/conf/server.yml       | 55 -----------------------
 registry/nacos/go-server/pkg/user.go           | 62 --------------------------
 11 files changed, 88 insertions(+), 288 deletions(-)

diff --git a/.run/registry/registry-nacos-go-client.run.xml b/.run/registry/registry-nacos-go-client.run.xml
index 35bef0d..d720d09 100644
--- a/.run/registry/registry-nacos-go-client.run.xml
+++ b/.run/registry/registry-nacos-go-client.run.xml
@@ -3,13 +3,13 @@
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
-      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/registry/nacos/go-client/conf/client.yml" />
+      <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/registry/nacos/go-client/conf/dubbogo.yml" />
       <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/registry/nacos/go-client/conf/log.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/general/grpc/unary/go-client/cmd/client.go" />
     <package value="github.com/apache/dubbo-go-samples/registry/nacos/go-client/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/general/grpc/unary/go-client/cmd/client.go" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.run/registry/registry-nacos-go-server.run.xml b/.run/registry/registry-nacos-go-server.run.xml
index 80a04bf..fb5f292 100644
--- a/.run/registry/registry-nacos-go-server.run.xml
+++ b/.run/registry/registry-nacos-go-server.run.xml
@@ -4,12 +4,12 @@
     <working_directory value="$PROJECT_DIR$" />
     <envs>
       <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/registry/nacos/go-server/conf/log.yml" />
-      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/registry/nacos/go-server/conf/server.yml" />
+      <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/registry/nacos/go-server/conf/dubbogo.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/general/registry/nacos/go-server/cmd/server.go" />
     <package value="github.com/apache/dubbo-go-samples/registry/nacos/go-server/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/general/registry/nacos/go-server/cmd/server.go" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/registry/nacos/go-client/cmd/client.go b/registry/nacos/go-client/cmd/client.go
index 5369454..5412757 100644
--- a/registry/nacos/go-client/cmd/client.go
+++ b/registry/nacos/go-client/cmd/client.go
@@ -38,24 +38,35 @@ import (
 	"github.com/dubbogo/gost/log"
 )
 
-import (
-	"github.com/apache/dubbo-go-samples/registry/nacos/go-client/pkg"
-)
+type UserProvider struct {
+	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
+}
+
+func (u *UserProvider) Reference() string {
+	return "userProvider"
+}
 
-var userProvider = new(pkg.UserProvider)
+type User struct {
+	ID   string
+	Name string
+	Age  int32
+	Time time.Time
+}
 
-func init() {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&pkg.User{})
+func (*User) JavaClassName() string {
+	return "org.apache.dubbo.User"
 }
 
 // need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
 func main() {
+	var userProvider = &UserProvider{}
+	config.SetConsumerService(userProvider)
+	hessian.RegisterPOJO(&User{})
 	config.Load()
 	time.Sleep(3 * time.Second)
 
 	gxlog.CInfo("\n\n\nstart to test dubbo")
-	user := &pkg.User{}
+	user := &User{}
 	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
 	if err != nil {
 		gxlog.CError("error: %v\n", err)
diff --git a/registry/nacos/go-client/conf/client.yml b/registry/nacos/go-client/conf/client.yml
deleted file mode 100644
index 5936848..0000000
--- a/registry/nacos/go-client/conf/client.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoClient"
-  module: "dubbo-go user-info client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoNacos":
-    protocol: "nacos"
-    timeout: "3s"
-    address: "127.0.0.1:8848"
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoNacos"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/registry/nacos/go-client/conf/dubbogo.yml b/registry/nacos/go-client/conf/dubbogo.yml
new file mode 100644
index 0000000..a3eafaa
--- /dev/null
+++ b/registry/nacos/go-client/conf/dubbogo.yml
@@ -0,0 +1,13 @@
+dubbo:
+  registries:
+    "demoNacos":
+      protocol: "nacos"
+      timeout: "3s"
+      address: "127.0.0.1:8848"
+  consumer:
+    registry:
+      - demoNacos
+    references:
+      "userProvider":
+        protocol: "dubbo"
+        interface: "org.apache.dubbo.UserProvider"
\ No newline at end of file
diff --git a/registry/nacos/go-client/pkg/user.go b/registry/nacos/go-client/pkg/user.go
deleted file mode 100644
index 7733ea4..0000000
--- a/registry/nacos/go-client/pkg/user.go
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	"time"
-)
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/registry/nacos/go-server/cmd/server.go b/registry/nacos/go-server/cmd/server.go
index b08f26d..1670192 100644
--- a/registry/nacos/go-server/cmd/server.go
+++ b/registry/nacos/go-server/cmd/server.go
@@ -18,6 +18,7 @@
 package main
 
 import (
+	"context"
 	"fmt"
 	"os"
 	"os/signal"
@@ -35,16 +36,47 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/nacos"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-)
 
-import (
-	_ "github.com/apache/dubbo-go-samples/registry/nacos/go-server/pkg"
+	hessian "github.com/apache/dubbo-go-hessian2"
+
+	gxlog "github.com/dubbogo/gost/log"
 )
 
 var (
 	survivalTimeout = int(3e9)
 )
 
+func init() {
+	config.SetProviderService(&UserProvider{})
+	// ------for hessian2------
+	hessian.RegisterPOJO(&User{})
+}
+
+type User struct {
+	ID   string
+	Name string
+	Age  int32
+	Time time.Time
+}
+
+type UserProvider struct {
+}
+
+func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
+	gxlog.CInfo("req:%#v", req)
+	rsp := User{"A001", "Alex Stocks", 18, time.Now()}
+	gxlog.CInfo("rsp:%#v", rsp)
+	return &rsp, nil
+}
+
+func (u *UserProvider) Reference() string {
+	return "userProvider"
+}
+
+func (u User) JavaClassName() string {
+	return "org.apache.dubbo.User"
+}
+
 // need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
 func main() {
 	config.Load()
diff --git a/registry/nacos/go-server/conf/client.yml b/registry/nacos/go-server/conf/client.yml
deleted file mode 100644
index d9e9c87..0000000
--- a/registry/nacos/go-server/conf/client.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoTest"
-  module: "dubbo-go user-info client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "nacos":
-    protocol: "nacos"
-    timeout: "3s"
-    address: "127.0.0.1:8848"
-
-# reference config
-references:
-  "UserProvider":
-    registry: "nacos"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/registry/nacos/go-server/conf/dubbogo.yml b/registry/nacos/go-server/conf/dubbogo.yml
new file mode 100644
index 0000000..d485271
--- /dev/null
+++ b/registry/nacos/go-server/conf/dubbogo.yml
@@ -0,0 +1,17 @@
+dubbo:
+  registries:
+    "demoNacos":
+      protocol: "nacos"
+      timeout: "3s"
+      address: "127.0.0.1:8848"
+  protocols:
+    "dubbo":
+      name: "dubbo"
+      port: 20000
+  provider:
+    registry:
+      - demoNacos
+    services:
+      "userProvider":
+        protocol: "dubbo"
+        interface: "org.apache.dubbo.UserProvider"
\ No newline at end of file
diff --git a/registry/nacos/go-server/conf/server.yml b/registry/nacos/go-server/conf/server.yml
deleted file mode 100644
index 441c344..0000000
--- a/registry/nacos/go-server/conf/server.yml
+++ /dev/null
@@ -1,55 +0,0 @@
-# dubbo server yaml configure file
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoServer"
-  module: "dubbo-go user-info server"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoNacos":
-    protocol: "nacos"
-    timeout	: "3s"
-    address: "127.0.0.1:8848"
-
-# service config
-services:
-  "UserProvider":
-    registry: "demoNacos"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    loadbalance: "random"
-    warmup: "100"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 1
-        loadbalance: "random"
-
-# protocol config
-protocols:
-  "dubbo":
-    name: "dubbo"
-    port: 20000
-
-protocol_conf:
-  dubbo:
-    session_number: 700
-    session_timeout: "180s"
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "server"
diff --git a/registry/nacos/go-server/pkg/user.go b/registry/nacos/go-server/pkg/user.go
deleted file mode 100644
index 75d0916..0000000
--- a/registry/nacos/go-server/pkg/user.go
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	"time"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log"
-)
-
-func init() {
-	config.SetProviderService(new(UserProvider))
-	// ------for hessian2------
-	hessian.RegisterPOJO(&User{})
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-}
-
-func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
-	gxlog.CInfo("req:%#v", req)
-	rsp := User{"A001", "Alex Stocks", 18, time.Now()}
-	gxlog.CInfo("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}

[dubbo-go-samples] 04/14: Config enhance v3 (#203)

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git

commit af38e8288f8728165b5966661a6120844a869e0d
Author: Laurence <45...@users.noreply.github.com>
AuthorDate: Sat Aug 21 15:18:02 2021 +0800

    Config enhance v3 (#203)
    
    * fix
    
    * fix: init helloworld and registry zk
    
    * fix: change general to rpc
---
 .gitignore                                         |   4 +-
 .run/helloworld-go-client.run.xml                  |   7 +-
 ...client.run.xml => helloworld-go-server.run.xml} |   9 +-
 .run/registry/registry-zookeeper-go-client.run.xml |   2 +-
 .run/registry/registry-zookeeper-go-server.run.xml |   2 +-
 .run/triple-codec-extension-client.run.xml         |   4 +-
 .run/triple-codec-extension-server.run.xml         |   4 +-
 .run/triple-msgpack-client.run.xml                 |   4 +-
 .run/triple-msgpack-server.run.xml                 |   4 +-
 .run/triple-server.run.xml                         |   4 +-
 .run/triple/gojava-go-client.run.xml               |   8 +-
 .run/triple/gojava-go-server.run.xml               |   8 +-
 .run/triple/triple-stream-client.run.xml           |   8 +-
 .run/triple/triple-unary-client.run.xml            |   8 +-
 .run/triple/triplego-hessian-client.run.xml        |   4 +-
 .run/triple/triplego-hessian-server.run.xml        |   4 +-
 api/generate.sh                                    |   4 +
 .../helloworld.pb.go => api/samples_api.pb.go      | 219 ++++++++++-----------
 .../helloworld.proto => api/samples_api.proto      |   2 +-
 async/README.md                                    |  46 -----
 async/README_zh.md                                 |  45 -----
 async/go-client/cmd/client.go                      |  68 -------
 async/go-client/conf/client.yml                    |  61 ------
 async/go-client/conf/log.yml                       |  28 ---
 async/go-client/pkg/user.go                        |  79 --------
 async/go-server/cmd/server.go                      |  79 --------
 async/go-server/conf/client.yml                    |  61 ------
 async/go-server/conf/log.yml                       |  28 ---
 async/go-server/conf/server.yml                    |  55 ------
 async/go-server/docker/docker-compose.yml          |   9 -
 async/go-server/docker/docker-health-check.sh      |  10 -
 async/go-server/pkg/user.go                        |  62 ------
 async/go-server/tests/integration/main_test.go     |  89 ---------
 .../tests/integration/userprovider_test.go         |  54 -----
 attachment/README.md                               |  35 ----
 attachment/README_zh.md                            |  37 ----
 attachment/go-client/cmd/client.go                 |  69 -------
 attachment/go-client/conf/client.yml               |  59 ------
 attachment/go-client/conf/log.yml                  |  27 ---
 attachment/go-client/pkg/user.go                   |  42 ----
 attachment/go-server/cmd/server.go                 |  80 --------
 attachment/go-server/conf/client.yml               |  59 ------
 attachment/go-server/conf/log.yml                  |  27 ---
 attachment/go-server/conf/server.yml               |  55 ------
 attachment/go-server/docker/docker-compose.yml     |   9 -
 attachment/go-server/docker/docker-health-check.sh |  10 -
 attachment/go-server/pkg/user.go                   |  71 -------
 .../go-server/tests/integration/main_test.go       |  71 -------
 .../tests/integration/userprovider_test.go         |  49 -----
 .../stream-client/dubbogo-client/cmd/env.sh        |   2 -
 .../dubbo3/pb/dubbogo-java/protobuf/protobuf.mk    |  26 ---
 generic/README.md                                  |   6 +-
 generic/README_zh.md                               |   6 +-
 go.mod                                             |  11 +-
 go.sum                                             |  15 +-
 helloworld/README.md                               |  11 +-
 helloworld/README_zh.md                            |  11 +-
 helloworld/go-client/cmd/client.go                 |  35 ++--
 .../go-client/conf/{client.yml => dubbogo.yml}     |   2 +-
 helloworld/go-server/cmd/server.go                 |  26 ++-
 .../go-server/conf/{server.yml => dubbogo.yml}     |   2 +-
 helloworld/go-server/pkg/greeter.go                |  45 -----
 helloworld/java-client/pom.xml                     |   2 +-
 helloworld/java-server/pom.xml                     |   2 +-
 .../helloworld}/docker/docker-compose.yml          |   0
 .../helloworld}/tests/integration/main_test.go     |   2 +-
 .../tests/integration/userprovider_test.go         |   2 +-
 .../registry/zookeeper}/docker/docker-compose.yml  |   0
 .../zookeeper}/docker/docker-health-check.sh       |   0
 .../zookeeper}/tests/integration/main_test.go      |   0
 .../tests/integration/userprovider_test.go         |   0
 logger/go-server/cmd/server.go                     |   2 +-
 registry/zookeeper/go-client/cmd/client.go         |  39 ++--
 registry/zookeeper/go-client/conf/application.yml  |  20 --
 .../zookeeper/go-client/conf/dubbogo.yml           |   2 +-
 registry/zookeeper/go-client/pkg/user.go           |  48 -----
 registry/zookeeper/go-server/cmd/server.go         |  28 +--
 .../zookeeper/go-server/conf/dubbogo.yml           |   2 +-
 registry/zookeeper/go-server/conf/server.yml       |  24 ---
 registry/zookeeper/go-server/pkg/user.go           |  57 ------
 {general => rpc}/dubbo/go-client/cmd/client.go     |   0
 {general => rpc}/dubbo/go-client/conf/client.yml   |   0
 .../go-server => rpc/dubbo/go-client}/conf/log.yml |   0
 {general => rpc}/dubbo/go-client/pkg/user.go       |   0
 {general => rpc}/dubbo/go-server/cmd/server.go     |   0
 {general => rpc}/dubbo/go-server/conf/client.yml   |   0
 .../go-client => rpc/dubbo/go-server}/conf/log.yml |   0
 {general => rpc}/dubbo/go-server/conf/server.yml   |   0
 .../dubbo}/go-server/docker/docker-compose.yml     |   0
 .../dubbo}/go-server/docker/docker-health-check.sh |   0
 {general => rpc}/dubbo/go-server/pkg/user.go       |   0
 .../dubbo/go-server/pkg/user_provider.go           |   0
 .../dubbo/go-server/tests/integration/main_test.go |   0
 .../tests/integration/userprovider_test.go         |   0
 .../dubbo/java-client}/2.6/pom.xml                 |   0
 .../src/main/java/org/apache/dubbo/Consumer.java   |   0
 .../src/main/java/org/apache/dubbo/Gender.java     |   0
 .../2.6}/src/main/java/org/apache/dubbo/User.java  |   0
 .../main/java/org/apache/dubbo/UserProvider.java   |   0
 .../resources/META-INF/spring/dubbo.consumer.xml   |   0
 .../2.6}/src/main/resources/log4j.properties       |   0
 .../dubbo/java-client}/2.7/pom.xml                 |   0
 .../src/main/java/org/apache/dubbo/Consumer.java   |   0
 .../src/main/java/org/apache/dubbo/Gender.java     |   0
 .../2.7}/src/main/java/org/apache/dubbo/User.java  |   0
 .../main/java/org/apache/dubbo/UserProvider.java   |   0
 .../resources/META-INF/spring/dubbo.consumer.xml   |   0
 .../2.7/src/main/resources}/log4j.properties       |   0
 .../dubbo/java-server}/2.6/pom.xml                 |   0
 .../src/main/java/org/apache/dubbo/Gender.java     |   0
 .../src/main/java/org/apache/dubbo/Provider.java   |   0
 .../src/main/java/org/apache/dubbo/Response.java   |   0
 .../2.6}/src/main/java/org/apache/dubbo/User.java  |   0
 .../main/java/org/apache/dubbo/UserProvider.java   |   0
 .../org/apache/dubbo/UserProviderAnotherImpl.java  |   0
 .../java/org/apache/dubbo/UserProviderImpl.java    |   0
 .../resources/META-INF/spring/dubbo.provider.xml   |   0
 .../2.6}/src/main/resources/log4j.properties       |   0
 .../dubbo/java-server}/2.7/pom.xml                 |   0
 .../src/main/java/org/apache/dubbo/Gender.java     |   0
 .../src/main/java/org/apache/dubbo/Provider.java   |   0
 .../src/main/java/org/apache/dubbo/Response.java   |   0
 .../2.7}/src/main/java/org/apache/dubbo/User.java  |   0
 .../main/java/org/apache/dubbo/UserProvider.java   |   0
 .../org/apache/dubbo/UserProviderAnotherImpl.java  |   0
 .../java/org/apache/dubbo/UserProviderImpl.java    |   0
 .../resources/META-INF/spring/dubbo.provider.xml   |   0
 .../2.7/src/main/resources}/log4j.properties       |   0
 {general => rpc}/dubbo3/README.md                  |   6 +-
 {general => rpc}/dubbo3/README_zh.md               |   6 +-
 .../dubbo3/codec-extension/go-client/cmd/client.go |   0
 .../codec-extension/go-client}/codec/codec.go      |   0
 .../codec-extension/go-client/conf/client.yml      |   0
 .../dubbo3/codec-extension/go-client}/conf/log.yml |   0
 .../dubbo3/codec-extension}/go-client/pkg/hello.go |   0
 .../dubbo3/codec-extension/go-server/cmd/server.go |   0
 .../codec-extension/go-server}/codec/codec.go      |   0
 .../codec-extension/go-server/conf/client.yml      |   0
 .../dubbo3/codec-extension/go-server}/conf/log.yml |   0
 .../codec-extension/go-server/conf/server.yml      |   0
 .../go-server}/docker/docker-compose.yml           |   0
 .../go-server}/docker/docker-health-check.sh       |   0
 .../codec-extension/go-server/pkg/greeter.go       |   0
 .../go-server/tests/integration/codec.go           |   0
 .../go-server/tests/integration/main_test.go       |   0
 .../tests/integration/userprovider_test.go         |   0
 {general => rpc}/dubbo3/hessian2/README.md         |   2 +-
 {general => rpc}/dubbo3/hessian2/README_zh.md      |   0
 .../dubbo3/hessian2/go-client/cmd/client.go        |   0
 .../dubbo3/hessian2/go-client/conf/client.yml      |   0
 .../dubbo3/hessian2/go-client}/conf/log.yml        |   0
 .../dubbo3/hessian2/go-client/pkg/hello.go         |   0
 .../dubbo3/hessian2/go-server/cmd/server.go        |   0
 .../dubbo3/hessian2/go-server/conf/client.yml      |   0
 .../dubbo3/hessian2}/go-server/conf/log.yml        |   0
 .../dubbo3/hessian2/go-server/conf/server.yml      |   0
 .../hessian2}/go-server/docker/docker-compose.yml  |   0
 .../go-server/docker/docker-health-check.sh        |   0
 .../dubbo3/hessian2/go-server/pkg/greeter.go       |   0
 .../go-server/tests/integration/main_test.go       |   0
 .../tests/integration/userprovider_test.go         |   0
 .../org/apache/dubbo/sample/hello/Helloworld.java  |   0
 .../dubbo3/hessian2/java-client/pom.xml            |   0
 .../dubbo3/hessian2}/java-client/run.sh            |   0
 .../com/apache/dubbo/sample/basic/ApiConsumer.java |   0
 .../com/apache/dubbo/sample/basic/IGreeter.java    |   0
 .../java/com/apache/dubbo/sample/basic/User.java   |   0
 .../java-client}/src/main/proto/helloworld.proto   |   0
 .../src/main/resources/log4j.properties            |   0
 .../org/apache/dubbo/sample/hello/Helloworld.java  |   0
 .../dubbo3/hessian2/java-server/pom.xml            |   0
 .../dubbo3/hessian2}/java-server/run.sh            |   0
 .../com/apache/dubbo/sample/basic/ApiProvider.java |   0
 .../com/apache/dubbo/sample/basic/IGreeter.java    |   0
 .../apache/dubbo/sample/basic/IGreeter1Impl.java   |   0
 .../java/com/apache/dubbo/sample/basic/User.java   |   0
 .../java-server}/src/main/proto/helloworld.proto   |   0
 .../src/main/resources/log4j.properties            |   0
 .../dubbo3/msgpack/go-client/cmd/client.go         |   0
 .../dubbo3/msgpack/go-client/conf/client.yml       |   0
 .../dubbo3/msgpack/go-client/conf/log.yml          |   0
 .../dubbo3/msgpack}/go-client/pkg/hello.go         |   0
 .../dubbo3/msgpack/go-server/cmd/server.go         |   0
 .../dubbo3/msgpack/go-server/conf/client.yml       |   0
 .../dubbo3/msgpack}/go-server/conf/log.yml         |   0
 .../dubbo3/msgpack/go-server/conf/server.yml       |   0
 .../msgpack/go-server}/docker/docker-compose.yml   |   0
 .../go-server/docker/docker-health-check.sh        |   0
 .../dubbo3/msgpack/go-server/pkg/greeter.go        |   0
 .../go-server/tests/integration/main_test.go       |   0
 .../tests/integration/userprovider_test.go         |   0
 {general => rpc}/dubbo3/pb/dubbogo-grpc/README.md  |  16 +-
 .../dubbo3/pb/dubbogo-grpc/README_zh.md            |  12 +-
 .../dubbogo-grpc/protobuf/dubbo3/helloworld.pb.go  |   0
 .../dubbogo-grpc/protobuf/dubbo3/helloworld.proto  |   0
 .../pb/dubbogo-grpc/protobuf/dubbo3/protobuf.mk    |   0
 .../pb/dubbogo-grpc/protobuf/grpc/helloworld.pb.go |   0
 .../pb/dubbogo-grpc/protobuf/grpc/helloworld.proto |   0
 .../server/dubbogo-server/cmd/server.go            |   0
 .../server/dubbogo-server/conf/client.yml          |   0
 .../server/dubbogo-server}/conf/log.yml            |   0
 .../server/dubbogo-server/conf/server.yml          |   0
 .../dubbogo-server}/docker/docker-compose.yml      |   0
 .../dubbogo-server}/docker/docker-health-check.sh  |   0
 .../server/dubbogo-server/pkg/greeter.go           |   0
 .../integration/grpc_test_proto/helloworld.pb.go   |   0
 .../dubbogo-server/tests/integration/main_test.go  |   0
 .../tests/integration/userprovider_test.go         |   0
 .../pb/dubbogo-grpc/server/grpcgo-server/main.go   |   0
 .../stream-client/dubbogo-client/cmd/client.go     |   0
 .../stream-client/dubbogo-client}/cmd/env.sh       |   0
 .../stream-client/dubbogo-client/conf/client.yml   |   0
 .../stream-client/dubbogo-client}/conf/log.yml     |   0
 .../stream-client/grpcgo-client/main.go            |   0
 .../unary-client/dubbogo-client/cmd/client.go      |   0
 .../unary-client/dubbogo-client/conf/client.yml    |   0
 .../unary-client/dubbogo-client}/conf/log.yml      |   0
 .../unary-client/grpcgo-client/main.go             |   0
 {general => rpc}/dubbo3/pb/dubbogo-java/README.md  |   2 +-
 .../dubbo3/pb/dubbogo-java/README_zh.md            |   2 +-
 .../dubbo3/pb/dubbogo-java/go-client/cmd/client.go |   0
 .../dubbo3/pb/dubbogo-java/go-client/cmd/env.sh    |   0
 .../pb/dubbogo-java/go-client}/conf/client.yml     |   0
 .../dubbo3/pb/dubbogo-java/go-client}/conf/log.yml |   0
 .../dubbo3/pb/dubbogo-java/go-server/cmd/env.sh    |   0
 .../dubbo3/pb/dubbogo-java/go-server/cmd/server.go |   0
 .../pb/dubbogo-java/go-server}/conf/client.yml     |   0
 .../dubbo3/pb/dubbogo-java/go-server}/conf/log.yml |   0
 .../pb/dubbogo-java/go-server/conf/server.yml      |   0
 .../go-server/docker/docker-compose.yml            |   0
 .../pb/dubbogo-java/go-server/pkg/greeter.go       |   0
 .../go-server/tests/integration/main_test.go       |   0
 .../tests/integration/userprovider_test.go         |   0
 .../org/apache/dubbo/sample/hello/Helloworld.java  |  79 ++++++--
 .../dubbo3/pb/dubbogo-java/java-client/pom.xml     |   0
 .../dubbo3/pb/dubbogo-java}/java-client/run.sh     |   0
 .../com/apache/dubbo/sample/basic/ApiConsumer.java |   0
 .../com/apache/dubbo/sample/basic/IGreeter.java    |   0
 .../java-client}/src/main/proto/helloworld.proto   |   0
 .../src/main/resources/log4j.properties            |   0
 .../org/apache/dubbo/sample/hello/Helloworld.java  |  79 ++++++--
 .../dubbo3/pb/dubbogo-java/java-server/pom.xml     |   0
 .../dubbo3/pb/dubbogo-java}/java-server/run.sh     |   0
 .../com/apache/dubbo/sample/basic/ApiProvider.java |   0
 .../com/apache/dubbo/sample/basic/IGreeter.java    |   0
 .../apache/dubbo/sample/basic/IGreeter1Impl.java   |   0
 .../java-server}/src/main/proto/helloworld.proto   |   0
 .../src/main/resources/log4j.properties            |   0
 .../pb/dubbogo-java}/protobuf/helloworld.pb.go     |   0
 .../pb/dubbogo-java}/protobuf/helloworld.proto     |   0
 .../dubbo3/pb/dubbogo-java}/protobuf/protobuf.mk   |   0
 {general => rpc}/grpc/go-client/cmd/client.go      |   0
 {general => rpc}/grpc/go-client/conf/client.yml    |   0
 {general => rpc}/grpc/go-client/conf/log.yml       |   0
 {general => rpc}/grpc/go-server/cmd/server.go      |   0
 {general => rpc}/grpc/go-server/conf/client.yml    |   0
 {general => rpc}/grpc/go-server/conf/log.yml       |   0
 {general => rpc}/grpc/go-server/conf/server.yml    |   0
 .../grpc/go-server/docker/docker-compose.yml       |   0
 .../grpc}/go-server/docker/docker-health-check.sh  |   0
 {general => rpc}/grpc/go-server/pkg/greeter.go     |   0
 .../go-server/tests/integration/greeter_test.go    |   0
 .../grpc/go-server/tests/integration/main_test.go  |   0
 {general => rpc}/grpc/protobuf/helloworld.pb.go    |   0
 {general => rpc}/grpc/protobuf/helloworld.proto    |   0
 {general => rpc}/grpc/protobuf/protobuf.mk         |   0
 .../grpc/stream/go-client/app/Makefile             |   0
 .../grpc/stream/go-client/app/client.go            |   0
 .../grpc/stream/go-client}/app/helloworld.pb.go    |   0
 .../grpc/stream/go-client}/app/helloworld.proto    |   0
 .../grpc/stream/go-client/app}/version.go          |   0
 .../grpc/stream/go-client/assembly/bin/load.sh     |   0
 .../go-client/assembly/common/app.properties       |   0
 .../grpc/stream/go-client/assembly/common/build.sh |   0
 .../grpc/stream/go-client/assembly/linux/dev.sh    |   0
 .../stream/go-client/assembly/linux/release.sh     |   0
 .../grpc/stream/go-client/assembly/linux/test.sh   |   0
 .../grpc/stream/go-client/assembly/mac/dev.sh      |   0
 .../grpc/stream/go-client/assembly/mac/release.sh  |   0
 .../grpc/stream/go-client/assembly/mac/test.sh     |   0
 .../grpc/stream/go-client/assembly/windows/dev.sh  |   0
 .../stream/go-client/assembly/windows/release.sh   |   0
 .../grpc/stream/go-client/assembly/windows/test.sh |   0
 .../grpc/stream/go-client/profiles/dev/client.yml  |   0
 .../grpc/stream/go-client/profiles/dev}/log.yml    |   0
 .../stream/go-client}/profiles/release/log.yml     |   0
 .../grpc/stream/go-client/profiles/test/client.yml |   0
 .../grpc/stream/go-client}/profiles/test/log.yml   |   0
 .../grpc/stream/go-server/app/greeter.go           |   0
 .../grpc/stream/go-server}/app/helloworld.pb.go    |   0
 .../grpc/stream/go-server}/app/helloworld.proto    |   0
 .../grpc/stream/go-server/app/server.go            |   0
 .../grpc/stream/go-server/app}/version.go          |   0
 .../grpc/stream/go-server/assembly/bin/load.sh     |   0
 .../go-server/assembly/common/app.properties       |   0
 .../grpc/stream/go-server/assembly/common/build.sh |   0
 .../grpc/stream/go-server/assembly/linux/dev.sh    |   0
 .../stream/go-server/assembly/linux/release.sh     |   0
 .../grpc/stream/go-server/assembly/linux/test.sh   |   0
 .../grpc/stream/go-server/assembly/mac/dev.sh      |   0
 .../grpc/stream/go-server/assembly/mac/release.sh  |   0
 .../grpc/stream/go-server/assembly/mac/test.sh     |   0
 .../grpc/stream/go-server/assembly/windows/dev.sh  |   0
 .../stream/go-server/assembly/windows/release.sh   |   0
 .../grpc/stream/go-server/assembly/windows/test.sh |   0
 .../grpc/stream/go-server/profiles/dev}/log.yml    |   0
 .../grpc/stream/go-server/profiles/dev/server.yml  |   0
 .../stream/go-server}/profiles/release/log.yml     |   0
 .../stream/go-server/profiles/release/server.yml   |   0
 .../grpc/stream/go-server}/profiles/test/log.yml   |   0
 .../grpc/stream/go-server/profiles/test/server.yml |   0
 {general => rpc}/jsonrpc/go-client/cmd/client.go   |   0
 {general => rpc}/jsonrpc/go-client/conf/client.yml |   0
 .../dev => rpc/jsonrpc/go-client/conf}/log.yml     |   0
 {general => rpc}/jsonrpc/go-client/pkg/user.go     |   0
 {general => rpc}/jsonrpc/go-server/cmd/server.go   |   0
 .../dev => rpc/jsonrpc/go-server/conf}/log.yml     |   0
 {general => rpc}/jsonrpc/go-server/conf/server.yml |   0
 {general => rpc}/jsonrpc/go-server/pkg/user.go     |   0
 .../jsonrpc/go-server/pkg/user_provider.go         |   0
 .../jsonrpc/go-server/pkg/user_provider1.go        |   0
 .../jsonrpc/go-server/pkg/user_provider2.go        |   0
 {general => rpc}/jsonrpc/java-client/build.sh      |   0
 {general => rpc}/jsonrpc/java-client/pom.xml       |   0
 .../java-client/src/main/assembly/assembly.xml     |   0
 .../src/main/assembly/conf}/dubbo.properties       |   0
 .../src/main/assembly/conf}/log4j.properties       |   0
 .../src/main/java/com/ikurento/user/Consumer.java  |   0
 .../src/main/java/com/ikurento/user/Gender.java    |   0
 .../src/main/java/com/ikurento/user/User.java      |   0
 .../main/java/com/ikurento/user/UserProvider.java  |   0
 .../resources/META-INF/spring/dubbo.consumer.xml   |   0
 .../src/main/resources/META-INF/spring/service.xml |   0
 .../src/main/resources}/dubbo.properties           |   0
 .../src/main/resources/log4j.properties            |   0
 {general => rpc}/jsonrpc/java-server/build.sh      |   0
 {general => rpc}/jsonrpc/java-server/pom.xml       |   0
 .../jsonrpc/java-server/script/debug.sh            |   0
 .../java-server/src/main/assembly/assembly.xml     |   0
 .../src/main/assembly/conf/dubbo.properties        |   0
 .../src/main/assembly/conf}/log4j.properties       |   0
 .../src/main/java/com/ikurento/user/Gender.java    |   0
 .../src/main/java/com/ikurento/user/Provider.java  |   0
 .../src/main/java/com/ikurento/user/Response.java  |   0
 .../src/main/java/com/ikurento/user/User.java      |   0
 .../main/java/com/ikurento/user/UserProvider.java  |   0
 .../com/ikurento/user/UserProviderAnotherImpl.java |   0
 .../java/com/ikurento/user/UserProviderImpl.java   |   0
 .../resources/META-INF/spring/dubbo.provider.xml   |   0
 .../src/main/resources/log4j.properties            |   0
 {general => rpc}/rest/README.md                    |   0
 {general => rpc}/rest/README_zh.md                 |   0
 {general => rpc}/rest/go-client/cmd/client.go      |   0
 .../app => rpc/rest/go-client/cmd}/version.go      |   0
 {general => rpc}/rest/go-client/conf/client.yml    |   0
 .../go-server => rpc/rest/go-client}/conf/log.yml  |   0
 .../rest/go-client}/docker/docker-compose.yml      |   0
 {general => rpc}/rest/go-client/pkg/user.go        |   0
 {general => rpc}/rest/go-server/cmd/server.go      |   0
 .../app => rpc/rest/go-server/cmd}/version.go      |   0
 .../go-client => rpc/rest/go-server}/conf/log.yml  |   0
 {general => rpc}/rest/go-server/conf/server.yml    |   0
 .../rest}/go-server/docker/docker-compose.yml      |   0
 {general => rpc}/rest/go-server/pkg/user.go        |   0
 .../rest/go-server/pkg/user_provider.go            |   0
 .../rest/go-server/pkg/user_provider1.go           |   0
 .../rest/go-server/pkg/user_provider2.go           |   0
 367 files changed, 409 insertions(+), 2006 deletions(-)

diff --git a/.gitignore b/.gitignore
index 69d1d44..dc0df65 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,5 +34,5 @@ coverage.txt
 .settings/
 
 # java build
-general/dubbo3/pb/dubbogo-java/java-client/build/
-general/dubbo3/pb/dubbogo-java/java-server/build/
\ No newline at end of file
+general/dubbo3/api/dubbogo-java/java-client/build/
+general/dubbo3/api/dubbogo-java/java-server/build/
\ No newline at end of file
diff --git a/.run/helloworld-go-client.run.xml b/.run/helloworld-go-client.run.xml
index 3e9c396..05170fc 100644
--- a/.run/helloworld-go-client.run.xml
+++ b/.run/helloworld-go-client.run.xml
@@ -1,15 +1,14 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="helloworld-go-client" type="GoApplicationRunConfiguration" factoryName="Go Application" singleton="false">
+  <configuration default="false" name="helloworld-go-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-helloworld" singleton="true">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/helloworld/go-client/conf/log.yml" />
-      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/helloworld/go-client/conf/client.yml" />
+      <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/helloworld/go-client/conf/dubbogo.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/helloworld/go-client/cmd/client.go" />
     <package value="github.com/apache/dubbo-go-samples/helloworld/go-client/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/helloworld/go-client/cmd/client.go" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.run/helloworld-go-client.run.xml b/.run/helloworld-go-server.run.xml
similarity index 51%
copy from .run/helloworld-go-client.run.xml
copy to .run/helloworld-go-server.run.xml
index 3e9c396..12a75d0 100644
--- a/.run/helloworld-go-client.run.xml
+++ b/.run/helloworld-go-server.run.xml
@@ -1,15 +1,14 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="helloworld-go-client" type="GoApplicationRunConfiguration" factoryName="Go Application" singleton="false">
+  <configuration default="false" name="helloworld-go-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-helloworld" singleton="true">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/helloworld/go-client/conf/log.yml" />
-      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/helloworld/go-client/conf/client.yml" />
+      <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/helloworld/go-server/conf/dubbogo.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/helloworld/go-client/cmd/client.go" />
-    <package value="github.com/apache/dubbo-go-samples/helloworld/go-client/cmd" />
+    <package value="github.com/apache/dubbo-go-samples/helloworld/go-server/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/helloworld/go-client/cmd/client.go" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.run/registry/registry-zookeeper-go-client.run.xml b/.run/registry/registry-zookeeper-go-client.run.xml
index e9841d8..fbcd0d6 100644
--- a/.run/registry/registry-zookeeper-go-client.run.xml
+++ b/.run/registry/registry-zookeeper-go-client.run.xml
@@ -1,5 +1,5 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="registry-zookeeper-go-client" type="GoApplicationRunConfiguration" factoryName="Go Application">
+  <configuration default="false" name="registry-zookeeper-go-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-registry-zookeeper">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <kind value="PACKAGE" />
diff --git a/.run/registry/registry-zookeeper-go-server.run.xml b/.run/registry/registry-zookeeper-go-server.run.xml
index 023aa10..d3b5b65 100644
--- a/.run/registry/registry-zookeeper-go-server.run.xml
+++ b/.run/registry/registry-zookeeper-go-server.run.xml
@@ -1,5 +1,5 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="registry-zookeeper-go-server" type="GoApplicationRunConfiguration" factoryName="Go Application">
+  <configuration default="false" name="registry-zookeeper-go-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-registry-zookeeper">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <kind value="PACKAGE" />
diff --git a/.run/triple-codec-extension-client.run.xml b/.run/triple-codec-extension-client.run.xml
index 55591d0..ec0f339 100644
--- a/.run/triple-codec-extension-client.run.xml
+++ b/.run/triple-codec-extension-client.run.xml
@@ -7,9 +7,9 @@
       <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/codec-extension/go-client/conf/client.yml" />
     </envs>
     <kind value="PACKAGE" />
+    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/codec-extension/go-client/cmd" />
+    <directory value="github.com/apache/dubbo-go-samples/general/dubbo3/api/dubbogo-grpc/server/dubbogo-server/cmd" />
     <filePath value="$PROJECT_DIR$" />
-    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/codec-extension/go-client/cmd" />
-    <directory value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.run/triple-codec-extension-server.run.xml b/.run/triple-codec-extension-server.run.xml
index 6b68920..da9aa95 100644
--- a/.run/triple-codec-extension-server.run.xml
+++ b/.run/triple-codec-extension-server.run.xml
@@ -7,9 +7,9 @@
       <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/codec-extension/go-server/conf/server.yml" />
     </envs>
     <kind value="PACKAGE" />
+    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/codec-extension/go-server/cmd" />
+    <directory value="github.com/apache/dubbo-go-samples/general/dubbo3/api/dubbogo-grpc/server/dubbogo-server/cmd" />
     <filePath value="$PROJECT_DIR$" />
-    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/codec-extension/go-server/cmd" />
-    <directory value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.run/triple-msgpack-client.run.xml b/.run/triple-msgpack-client.run.xml
index d265e2f..76d0bf0 100644
--- a/.run/triple-msgpack-client.run.xml
+++ b/.run/triple-msgpack-client.run.xml
@@ -7,9 +7,9 @@
       <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/msgpack/go-client/conf/client.yml" />
     </envs>
     <kind value="PACKAGE" />
+    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/msgpack/go-client/cmd" />
+    <directory value="github.com/apache/dubbo-go-samples/general/dubbo3/api/dubbogo-grpc/server/dubbogo-server/cmd" />
     <filePath value="$PROJECT_DIR$" />
-    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/msgpack/go-client/cmd" />
-    <directory value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.run/triple-msgpack-server.run.xml b/.run/triple-msgpack-server.run.xml
index 8ef6570..5ff8ee6 100644
--- a/.run/triple-msgpack-server.run.xml
+++ b/.run/triple-msgpack-server.run.xml
@@ -7,9 +7,9 @@
       <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/msgpack/go-server/conf/server.yml" />
     </envs>
     <kind value="PACKAGE" />
+    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/msgpack/go-server/cmd" />
+    <directory value="github.com/apache/dubbo-go-samples/general/dubbo3/api/dubbogo-grpc/server/dubbogo-server/cmd" />
     <filePath value="$PROJECT_DIR$" />
-    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/msgpack/go-server/cmd" />
-    <directory value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.run/triple-server.run.xml b/.run/triple-server.run.xml
index b249d57..2a77a0c 100644
--- a/.run/triple-server.run.xml
+++ b/.run/triple-server.run.xml
@@ -3,9 +3,9 @@
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <kind value="PACKAGE" />
-    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd" />
+    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/api/dubbogo-grpc/server/dubbogo-server/cmd" />
     <directory value="$PROJECT_DIR$" />
-    <filePath value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/server.go" />
+    <filePath value="$PROJECT_DIR$/general/dubbo3/api/dubbogo-grpc/server/dubbogo-server/cmd/server.go" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.run/triple/gojava-go-client.run.xml b/.run/triple/gojava-go-client.run.xml
index b1dcede..1f38a81 100644
--- a/.run/triple/gojava-go-client.run.xml
+++ b/.run/triple/gojava-go-client.run.xml
@@ -3,13 +3,13 @@
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-java/go-client/conf/log.yml" />
-      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-java/go-client/conf/client.yml" />
+      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/api/dubbogo-java/go-client/conf/log.yml" />
+      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/api/dubbogo-java/go-client/conf/client.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-java/go-client/cmd/client.go" />
-    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-java/go-client/cmd" />
+    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/api/dubbogo-java/go-client/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/general/dubbo3/api/dubbogo-java/go-client/cmd/client.go" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.run/triple/gojava-go-server.run.xml b/.run/triple/gojava-go-server.run.xml
index 5b1fa6e..4e00c18 100644
--- a/.run/triple/gojava-go-server.run.xml
+++ b/.run/triple/gojava-go-server.run.xml
@@ -3,13 +3,13 @@
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-java/go-server/conf/log.yml" />
-      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-java/go-server/conf/server.yml" />
+      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/api/dubbogo-java/go-server/conf/log.yml" />
+      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/api/dubbogo-java/go-server/conf/server.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-java/go-server/cmd/server.go" />
-    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-java/go-server/cmd" />
+    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/api/dubbogo-java/go-server/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/general/dubbo3/api/dubbogo-java/go-server/cmd/server.go" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.run/triple/triple-stream-client.run.xml b/.run/triple/triple-stream-client.run.xml
index 8510ce6..259ba0b 100644
--- a/.run/triple/triple-stream-client.run.xml
+++ b/.run/triple/triple-stream-client.run.xml
@@ -3,13 +3,13 @@
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/conf/log.yml" />
-      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/conf/client.yml" />
+      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/api/dubbogo-grpc/stream-client/dubbogo-client/conf/log.yml" />
+      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/api/dubbogo-grpc/stream-client/dubbogo-client/conf/client.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/cmd/client.go" />
-    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/cmd" />
+    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/api/dubbogo-grpc/stream-client/dubbogo-client/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/general/dubbo3/api/dubbogo-grpc/stream-client/dubbogo-client/cmd/client.go" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.run/triple/triple-unary-client.run.xml b/.run/triple/triple-unary-client.run.xml
index 54055c2..1b397b9 100644
--- a/.run/triple/triple-unary-client.run.xml
+++ b/.run/triple/triple-unary-client.run.xml
@@ -3,13 +3,13 @@
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/conf/log.yml" />
-      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/conf/client.yml" />
+      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/api/dubbogo-grpc/unary-client/dubbogo-client/conf/log.yml" />
+      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/api/dubbogo-grpc/unary-client/dubbogo-client/conf/client.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/cmd/client.go" />
-    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/cmd" />
+    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/api/dubbogo-grpc/unary-client/dubbogo-client/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/general/dubbo3/api/dubbogo-grpc/unary-client/dubbogo-client/cmd/client.go" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.run/triple/triplego-hessian-client.run.xml b/.run/triple/triplego-hessian-client.run.xml
index 85821c4..542d476 100644
--- a/.run/triple/triplego-hessian-client.run.xml
+++ b/.run/triple/triplego-hessian-client.run.xml
@@ -7,9 +7,9 @@
       <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/hessian2/go-client/conf/client.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/general/dubbo3/hessian2/go-client/cmd/client.go" />
-    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/hessian2/go-client/cmd" />
+    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/hessian2/go-client/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/general/dubbo3/hessian2/go-client/cmd/client.go" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.run/triple/triplego-hessian-server.run.xml b/.run/triple/triplego-hessian-server.run.xml
index 654a11b..5d0d252 100644
--- a/.run/triple/triplego-hessian-server.run.xml
+++ b/.run/triple/triplego-hessian-server.run.xml
@@ -7,9 +7,9 @@
       <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/hessian2/go-server/conf/server.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/general/dubbo3/hessian2/go-server/cmd/server.go" />
-    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/hessian2/go-server/cmd" />
+    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/hessian2/go-server/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/general/dubbo3/hessian2/go-server/cmd/server.go" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/api/generate.sh b/api/generate.sh
new file mode 100644
index 0000000..d116f65
--- /dev/null
+++ b/api/generate.sh
@@ -0,0 +1,4 @@
+export GO111MODULE="on"
+export GOPROXY="http://goproxy.io"
+go get -u github.com/apache/dubbo-go/protocol/dubbo3/protoc-gen-dubbo3@3.0
+protoc -I . samples_api.proto --dubbo3_out=plugins=grpc+dubbo:.
\ No newline at end of file
diff --git a/general/dubbo3/pb/dubbogo-java/protobuf/helloworld.pb.go b/api/samples_api.pb.go
similarity index 83%
rename from general/dubbo3/pb/dubbogo-java/protobuf/helloworld.pb.go
rename to api/samples_api.pb.go
index 89625a4..cf48c46 100644
--- a/general/dubbo3/pb/dubbogo-java/protobuf/helloworld.pb.go
+++ b/api/samples_api.pb.go
@@ -1,11 +1,15 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
-// source: helloworld.proto
+// source: samples_api.proto
 
-package protobuf
+package api
 
 import (
 	context "context"
 	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
 	math "math"
 )
 
@@ -13,18 +17,11 @@ import (
 	"dubbo.apache.org/dubbo-go/v3/protocol"
 	dgrpc "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
 	"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
-
 	tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
 	dubbo3 "github.com/dubbogo/triple/pkg/triple"
-
-	proto "github.com/golang/protobuf/proto"
-
-	grpc "google.golang.org/grpc"
-	codes "google.golang.org/grpc/codes"
-
-	status "google.golang.org/grpc/status"
 )
 
+// Reference imports to suppress errors if they are not otherwise used.
 var _ = proto.Marshal
 var _ = fmt.Errorf
 var _ = math.Inf
@@ -47,7 +44,7 @@ func (m *HelloRequest) Reset()         { *m = HelloRequest{} }
 func (m *HelloRequest) String() string { return proto.CompactTextString(m) }
 func (*HelloRequest) ProtoMessage()    {}
 func (*HelloRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_17b8c58d586b62f2, []int{0}
+	return fileDescriptor_67d196fe99e714eb, []int{0}
 }
 
 func (m *HelloRequest) XXX_Unmarshal(b []byte) error {
@@ -89,7 +86,7 @@ func (m *User) Reset()         { *m = User{} }
 func (m *User) String() string { return proto.CompactTextString(m) }
 func (*User) ProtoMessage()    {}
 func (*User) Descriptor() ([]byte, []int) {
-	return fileDescriptor_17b8c58d586b62f2, []int{1}
+	return fileDescriptor_67d196fe99e714eb, []int{1}
 }
 
 func (m *User) XXX_Unmarshal(b []byte) error {
@@ -132,106 +129,24 @@ func (m *User) GetAge() int32 {
 }
 
 func init() {
-	proto.RegisterType((*HelloRequest)(nil), "protobuf.HelloRequest")
-	proto.RegisterType((*User)(nil), "protobuf.User")
+	proto.RegisterType((*HelloRequest)(nil), "api.HelloRequest")
+	proto.RegisterType((*User)(nil), "api.User")
 }
 
-func init() { proto.RegisterFile("helloworld.proto", fileDescriptor_17b8c58d586b62f2) }
+func init() { proto.RegisterFile("samples_api.proto", fileDescriptor_67d196fe99e714eb) }
 
-var fileDescriptor_17b8c58d586b62f2 = []byte{
+var fileDescriptor_67d196fe99e714eb = []byte{
 	// 160 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xc8, 0x48, 0xcd, 0xc9,
-	0xc9, 0x2f, 0xcf, 0x2f, 0xca, 0x49, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x00, 0x53,
-	0x49, 0xa5, 0x69, 0x4a, 0x4a, 0x5c, 0x3c, 0x1e, 0x20, 0xd9, 0xa0, 0xd4, 0xc2, 0xd2, 0xd4, 0xe2,
-	0x12, 0x21, 0x21, 0x2e, 0x96, 0xbc, 0xc4, 0xdc, 0x54, 0x09, 0x46, 0x05, 0x46, 0x0d, 0xce, 0x20,
-	0x30, 0x5b, 0xc9, 0x86, 0x8b, 0x25, 0xb4, 0x38, 0xb5, 0x08, 0x9b, 0x9c, 0x10, 0x1f, 0x17, 0x53,
-	0x66, 0x8a, 0x04, 0x13, 0x58, 0x84, 0x29, 0x33, 0x45, 0x48, 0x80, 0x8b, 0x39, 0x31, 0x3d, 0x55,
-	0x82, 0x59, 0x81, 0x51, 0x83, 0x35, 0x08, 0xc4, 0x34, 0xb2, 0xe7, 0x62, 0x77, 0x2f, 0x4a, 0x4d,
-	0x2d, 0x49, 0x2d, 0x12, 0x32, 0xe1, 0xe2, 0x08, 0x4e, 0xac, 0x04, 0xdb, 0x27, 0x24, 0xa6, 0x07,
-	0x73, 0x83, 0x1e, 0xb2, 0x03, 0xa4, 0xf8, 0x10, 0xe2, 0x20, 0x4b, 0x95, 0x18, 0x92, 0xd8, 0xc0,
-	0x02, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcf, 0xdb, 0xd1, 0x8b, 0xc7, 0x00, 0x00, 0x00,
-}
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ context.Context
-var _ grpc.ClientConnInterface
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-const _ = grpc.SupportPackageIsVersion6
-
-// GreeterClient is the client API for Greeter service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
-type GreeterClient interface {
-	// Sends a greeting
-	SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*User, error)
-}
-
-type greeterClient struct {
-	cc grpc.ClientConnInterface
-}
-
-func NewGreeterClient(cc grpc.ClientConnInterface) GreeterClient {
-	return &greeterClient{cc}
-}
-
-func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*User, error) {
-	out := new(User)
-	err := c.cc.Invoke(ctx, "/protobuf.Greeter/SayHello", in, out, opts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
-// GreeterServer is the server API for Greeter service.
-type GreeterServer interface {
-	// Sends a greeting
-	SayHello(context.Context, *HelloRequest) (*User, error)
-}
-
-// UnimplementedGreeterServer can be embedded to have forward compatible implementations.
-type UnimplementedGreeterServer struct {
-}
-
-func (*UnimplementedGreeterServer) SayHello(ctx context.Context, req *HelloRequest) (*User, error) {
-	return nil, status.Errorf(codes.Unimplemented, "method SayHello not implemented")
-}
-
-func RegisterGreeterServer(s *grpc.Server, srv GreeterServer) {
-	s.RegisterService(&_Greeter_serviceDesc, srv)
-}
-
-func _Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(HelloRequest)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	if interceptor == nil {
-		return srv.(GreeterServer).SayHello(ctx, in)
-	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: "/protobuf.Greeter/SayHello",
-	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(GreeterServer).SayHello(ctx, req.(*HelloRequest))
-	}
-	return interceptor(ctx, in, info, handler)
-}
-
-var _Greeter_serviceDesc = grpc.ServiceDesc{
-	ServiceName: "protobuf.Greeter",
-	HandlerType: (*GreeterServer)(nil),
-	Methods: []grpc.MethodDesc{
-		{
-			MethodName: "SayHello",
-			Handler:    _Greeter_SayHello_Handler,
-		},
-	},
-	Streams:  []grpc.StreamDesc{},
-	Metadata: "helloworld.proto",
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x2c, 0x4e, 0xcc, 0x2d,
+	0xc8, 0x49, 0x2d, 0x8e, 0x4f, 0x2c, 0xc8, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x4e,
+	0x2c, 0xc8, 0x54, 0x52, 0xe2, 0xe2, 0xf1, 0x48, 0xcd, 0xc9, 0xc9, 0x0f, 0x4a, 0x2d, 0x2c, 0x4d,
+	0x2d, 0x2e, 0x11, 0x12, 0xe2, 0x62, 0xc9, 0x4b, 0xcc, 0x4d, 0x95, 0x60, 0x54, 0x60, 0xd4, 0xe0,
+	0x0c, 0x02, 0xb3, 0x95, 0x6c, 0xb8, 0x58, 0x42, 0x8b, 0x53, 0x8b, 0xb0, 0xc9, 0x09, 0xf1, 0x71,
+	0x31, 0x65, 0xa6, 0x48, 0x30, 0x81, 0x45, 0x98, 0x32, 0x53, 0x84, 0x04, 0xb8, 0x98, 0x13, 0xd3,
+	0x53, 0x25, 0x98, 0x15, 0x18, 0x35, 0x58, 0x83, 0x40, 0x4c, 0x23, 0x53, 0x2e, 0x76, 0xf7, 0xa2,
+	0xd4, 0xd4, 0x92, 0xd4, 0x22, 0x21, 0x2d, 0x2e, 0x8e, 0xe0, 0xc4, 0x4a, 0xb0, 0x7d, 0x42, 0x82,
+	0x7a, 0x20, 0x97, 0x20, 0xdb, 0x2d, 0xc5, 0x09, 0x16, 0x02, 0x59, 0xa5, 0xc4, 0x90, 0xc4, 0x06,
+	0x76, 0xa4, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x46, 0x82, 0xe3, 0x9f, 0xb9, 0x00, 0x00, 0x00,
 }
 
 type greeterDubbo3Client struct {
@@ -298,7 +213,7 @@ func _DUBBO_Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec f
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/protobuf.Greeter/SayHello",
+		FullMethod: "/api.Greeter/SayHello",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		result := base.GetProxyImpl().Invoke(context.Background(), invo)
@@ -309,7 +224,7 @@ func _DUBBO_Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec f
 
 func (s *GreeterProviderBase) ServiceDesc() *grpc.ServiceDesc {
 	return &grpc.ServiceDesc{
-		ServiceName: "protobuf.Greeter",
+		ServiceName: "api.Greeter",
 		HandlerType: (*GreeterServer)(nil),
 		Methods: []grpc.MethodDesc{
 			{
@@ -318,6 +233,88 @@ func (s *GreeterProviderBase) ServiceDesc() *grpc.ServiceDesc {
 			},
 		},
 		Streams:  []grpc.StreamDesc{},
-		Metadata: "helloworld.proto",
+		Metadata: "samples_api.proto",
+	}
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// GreeterClient is the client API for Greeter service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GreeterClient interface {
+	// Sends a greeting
+	SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*User, error)
+}
+
+type greeterClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewGreeterClient(cc grpc.ClientConnInterface) GreeterClient {
+	return &greeterClient{cc}
+}
+
+func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*User, error) {
+	out := new(User)
+	err := c.cc.Invoke(ctx, "/api.Greeter/SayHello", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// GreeterServer is the server API for Greeter service.
+type GreeterServer interface {
+	// Sends a greeting
+	SayHello(context.Context, *HelloRequest) (*User, error)
+}
+
+// UnimplementedGreeterServer can be embedded to have forward compatible implementations.
+type UnimplementedGreeterServer struct {
+}
+
+func (*UnimplementedGreeterServer) SayHello(ctx context.Context, req *HelloRequest) (*User, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SayHello not implemented")
+}
+
+func RegisterGreeterServer(s *grpc.Server, srv GreeterServer) {
+	s.RegisterService(&_Greeter_serviceDesc, srv)
+}
+
+func _Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(HelloRequest)
+	if err := dec(in); err != nil {
+		return nil, err
 	}
+	if interceptor == nil {
+		return srv.(GreeterServer).SayHello(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/api.Greeter/SayHello",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(GreeterServer).SayHello(ctx, req.(*HelloRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _Greeter_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "api.Greeter",
+	HandlerType: (*GreeterServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "SayHello",
+			Handler:    _Greeter_SayHello_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "samples_api.proto",
 }
diff --git a/general/dubbo3/pb/dubbogo-java/protobuf/helloworld.proto b/api/samples_api.proto
similarity index 98%
rename from general/dubbo3/pb/dubbogo-java/protobuf/helloworld.proto
rename to api/samples_api.proto
index 92b2876..281a9d1 100644
--- a/general/dubbo3/pb/dubbogo-java/protobuf/helloworld.proto
+++ b/api/samples_api.proto
@@ -16,7 +16,7 @@
  */
 
 syntax = "proto3";
-package protobuf;
+package api;
 
 // The greeting service definition.
 service Greeter {
diff --git a/async/README.md b/async/README.md
deleted file mode 100644
index 146da3a..0000000
--- a/async/README.md
+++ /dev/null
@@ -1,46 +0,0 @@
-# Async Sample
-
-### Background
-
-Dubbo-go provides not only synchronous invocation, but also asynchronous invocation on the consumer side. In order to
-use it, the client needs to implement the following interface to asynchronously receive the response from the service
-provider:
-
-```golang
-type AsyncCallbackService interface {
-    CallBack(response CallbackResponse) // callback
-}
-```
-
-### Example
-
-**Code**
-
-```golang
-type UserProvider struct {
-    GetUser func (ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) CallBack(res common.CallbackResponse) {
-    fmt.Println("CallBack res:", res)
-}
-```
-
-**Configuration**
-
-Besides, client also needs to config **"async:true"** in consumer's yaml config file as following:
-
-```yaml
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    # this is necessary to enable async call
-    async: true
-```
-
-Pls. refer to [HOWTO.md](../HOWTO.md) under the root directory to run this sample.
-
-
diff --git a/async/README_zh.md b/async/README_zh.md
deleted file mode 100644
index adcc836..0000000
--- a/async/README_zh.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# Async 示例
-
-### 背景
-
-Dubbo-go 提供同步调用的同时,还提供了客户端异步调用的能力。客户端可以通过实现以下的接口来异步获得服务端返回的响应:
-
-
-```golang
-type AsyncCallbackService interface {
-	CallBack(response CallbackResponse) // callback
-}
-```
-
-### 示例
-
-**代码**
-
-```golang
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) CallBack(res common.CallbackResponse) {
-	fmt.Println("CallBack res:",res)
-}
-```
-
-**配置**
-
-提供回调方法的同时,还需要在客户端的配置中增加 **"async:true"** 的配置,如下所示:
-
-```yaml
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol : "dubbo"
-    interface : "org.apache.dubbo.UserProvider"
-    # this is necessary to enable async call
-    async: true
-```
-
-请参阅根目录中的 [HOWTO.md](../HOWTO_zh.md) 来运行本例。
-
-
diff --git a/async/go-client/cmd/client.go b/async/go-client/cmd/client.go
deleted file mode 100644
index 58cc54c..0000000
--- a/async/go-client/cmd/client.go
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package main
-
-import (
-	"context"
-	"os"
-	"time"
-)
-
-import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log"
-)
-
-import (
-	"github.com/apache/dubbo-go-samples/async/go-client/pkg"
-)
-
-var userProvider = pkg.NewUserProvider()
-
-func init() {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&pkg.User{})
-}
-
-// need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
-func main() {
-	hessian.RegisterPOJO(&pkg.User{})
-	config.Load()
-	time.Sleep(3 * time.Second)
-
-	gxlog.CInfo("\n\n\nstart to test dubbo")
-	user := &pkg.User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
-	if err != nil {
-		gxlog.CError("error: %v\n", err)
-		os.Exit(1)
-		return
-	}
-
-	gxlog.CInfo("response result: %v\n", userProvider.GetResponse())
-}
diff --git a/async/go-client/conf/client.yml b/async/go-client/conf/client.yml
deleted file mode 100644
index 0f09e70..0000000
--- a/async/go-client/conf/client.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout : "3s"
-# connect timeout
-connect_timeout : "3s"
-
-# application config
-application:
-  organization : "dubbo.io"
-  name  : "UserInfoClient"
-  module : "dubbo-go user-info client"
-  version : "0.0.1"
-  environment : "dev"
-
-# registry config
-registries :
-  "demoZk":
-    protocol: "zookeeper"
-    timeout	: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol : "dubbo"
-    interface : "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods :
-    - name: "GetUser"
-      retries: 3
-    # this is necessary to enable async call
-    async: true
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/async/go-client/conf/log.yml b/async/go-client/conf/log.yml
deleted file mode 100644
index 6fb7501..0000000
--- a/async/go-client/conf/log.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-level: "info"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/async/go-client/pkg/user.go b/async/go-client/pkg/user.go
deleted file mode 100644
index b9c400b..0000000
--- a/async/go-client/pkg/user.go
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	"time"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/common"
-	"dubbo.apache.org/dubbo-go/v3/protocol"
-	"dubbo.apache.org/dubbo-go/v3/remoting"
-
-	gxlog "github.com/dubbogo/gost/log"
-)
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-	ch      chan *User
-}
-
-func NewUserProvider() *UserProvider {
-	return &UserProvider{
-		ch: make(chan *User),
-	}
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-// to enable async call:
-// 1. need to implement AsyncCallbackService
-// 2. need to specify references -> UserProvider -> async in conf/client.yml
-func (u *UserProvider) CallBack(res common.CallbackResponse) {
-	gxlog.CInfo("CallBack res: %v", res)
-	if r, ok := res.(remoting.AsyncCallbackResponse); ok {
-		if reply, ok := r.Reply.(*remoting.Response); ok {
-			if result, ok := reply.Result.(*protocol.RPCResult); ok {
-				if user, ok := result.Rest.(*User); ok {
-					u.ch <- user
-				}
-			}
-		}
-	}
-	u.ch <- nil
-}
-
-func (u *UserProvider) GetResponse() *User {
-	user := <-u.ch
-	return user
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/async/go-server/cmd/server.go b/async/go-server/cmd/server.go
deleted file mode 100644
index 9954313..0000000
--- a/async/go-server/cmd/server.go
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package main
-
-import (
-	"fmt"
-	"os"
-	"os/signal"
-	"syscall"
-	"time"
-)
-
-import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	"dubbo.apache.org/dubbo-go/v3/common/logger"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-)
-
-import (
-	"github.com/apache/dubbo-go-samples/async/go-server/pkg"
-)
-
-var (
-	survivalTimeout = int(3e9)
-)
-
-// need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
-func main() {
-	hessian.RegisterPOJO(&pkg.User{})
-	config.Load()
-
-	initSignal()
-}
-
-func initSignal() {
-	signals := make(chan os.Signal, 1)
-	// It is not possible to block SIGKILL or syscall.SIGSTOP
-	signal.Notify(signals, os.Interrupt, os.Kill, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
-	for {
-		sig := <-signals
-		logger.Infof("get signal %s", sig.String())
-		switch sig {
-		case syscall.SIGHUP:
-			// reload()
-		default:
-			time.AfterFunc(time.Duration(survivalTimeout), func() {
-				logger.Warnf("app exit now by force...")
-				os.Exit(1)
-			})
-
-			// The program exits normally or timeout forcibly exits.
-			fmt.Println("provider app exit now...")
-			return
-		}
-	}
-}
diff --git a/async/go-server/conf/client.yml b/async/go-server/conf/client.yml
deleted file mode 100644
index 4193953..0000000
--- a/async/go-server/conf/client.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout : "3s"
-# connect timeout
-connect_timeout : "3s"
-
-# application config
-application:
-  organization : "dubbo.io"
-  name  : "UserInfoTest"
-  module : "dubbo-go user-info client"
-  version : "0.0.1"
-  environment : "dev"
-
-# registry config
-registries :
-  "demoZk":
-    protocol: "zookeeper"
-    timeout	: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol : "dubbo"
-    interface : "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods :
-    - name: "GetUser"
-      retries: 3
-    # this is necessary to enable async call
-    async : true
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/async/go-server/conf/log.yml b/async/go-server/conf/log.yml
deleted file mode 100644
index a75bccb..0000000
--- a/async/go-server/conf/log.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-level: "error"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/async/go-server/conf/server.yml b/async/go-server/conf/server.yml
deleted file mode 100644
index 6e8970c..0000000
--- a/async/go-server/conf/server.yml
+++ /dev/null
@@ -1,55 +0,0 @@
-# dubbo server yaml configure file
-
-# application config
-application:
-  organization : "dubbo.io"
-  name : "UserInfoServer"
-  module : "dubbo-go user-info server"
-  version : "0.0.1"
-  environment : "dev"
-
-# registry config
-registries :
-  "demoZk":
-    protocol: "zookeeper"
-    timeout	: "3s"
-    address: "127.0.0.1:2181"
-
-# service config
-services:
-  "UserProvider":
-    registry: "demoZk"
-    protocol : "dubbo"
-    interface : "org.apache.dubbo.UserProvider"
-    loadbalance: "random"
-    warmup: "100"
-    cluster: "failover"
-    methods:
-    - name: "GetUser"
-      retries: 1
-      loadbalance: "random"
-
-# protocol config
-protocols:
-  "dubbo":
-    name: "dubbo"
-    port: 20000
-
-protocol_conf:
-  dubbo:
-    session_number: 700
-    session_timeout: "180s"
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "server"
diff --git a/async/go-server/docker/docker-compose.yml b/async/go-server/docker/docker-compose.yml
deleted file mode 100644
index 8724179..0000000
--- a/async/go-server/docker/docker-compose.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-version: '3'
-
-services:
-  zookeeper:
-    image: zookeeper
-    ports:
-      - 2181:2181
-    restart: on-failure
-
diff --git a/async/go-server/docker/docker-health-check.sh b/async/go-server/docker/docker-health-check.sh
deleted file mode 100644
index 2cc32c2..0000000
--- a/async/go-server/docker/docker-health-check.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-curl 127.0.0.1:2181
-res=$?
-passCode=52
-while [ "$res" != "$passCode" ];do
-  sleep 5
-  curl 127.0.0.1:2181
-  res=$?
-done
-
-sleep 5
diff --git a/async/go-server/pkg/user.go b/async/go-server/pkg/user.go
deleted file mode 100644
index 75d0916..0000000
--- a/async/go-server/pkg/user.go
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	"time"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log"
-)
-
-func init() {
-	config.SetProviderService(new(UserProvider))
-	// ------for hessian2------
-	hessian.RegisterPOJO(&User{})
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-}
-
-func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
-	gxlog.CInfo("req:%#v", req)
-	rsp := User{"A001", "Alex Stocks", 18, time.Now()}
-	gxlog.CInfo("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/async/go-server/tests/integration/main_test.go b/async/go-server/tests/integration/main_test.go
deleted file mode 100644
index e445185..0000000
--- a/async/go-server/tests/integration/main_test.go
+++ /dev/null
@@ -1,89 +0,0 @@
-// +build integration
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package integration
-
-import (
-	"context"
-	"os"
-	"testing"
-	"time"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/common"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/local"
-	"dubbo.apache.org/dubbo-go/v3/protocol"
-	"dubbo.apache.org/dubbo-go/v3/remoting"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	gxlog "github.com/dubbogo/gost/log"
-)
-
-var userProvider = &UserProvider{
-	ch: make(chan *User),
-}
-
-func TestMain(m *testing.M) {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&User{})
-	config.Load()
-	time.Sleep(3 * time.Second)
-
-	os.Exit(m.Run())
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-	ch      chan *User
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-// to enable async call:
-// 1. need to implement AsyncCallbackService
-// 2. need to specify references -> UserProvider -> async in conf/client.yml
-func (u *UserProvider) CallBack(res common.CallbackResponse) {
-	gxlog.CInfo("CallBack res: %v", res)
-	if r, ok := res.(remoting.AsyncCallbackResponse); ok {
-		if reply, ok := r.Reply.(*remoting.Response); ok {
-			if result, ok := reply.Result.(*protocol.RPCResult); ok {
-				if user, ok := result.Rest.(*User); ok {
-					u.ch <- user
-				}
-			}
-		}
-	}
-	u.ch <- nil
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/async/go-server/tests/integration/userprovider_test.go b/async/go-server/tests/integration/userprovider_test.go
deleted file mode 100644
index adf0e7f..0000000
--- a/async/go-server/tests/integration/userprovider_test.go
+++ /dev/null
@@ -1,54 +0,0 @@
-// +build integration
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package integration
-
-import (
-	"context"
-	"testing"
-)
-
-import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	"github.com/stretchr/testify/assert"
-)
-
-func TestGetUser(t *testing.T) {
-	user := &User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
-	assert.Nil(t, err)
-	assert.Equal(t, "", user.ID)
-	assert.Equal(t, "", user.Name)
-	assert.Equal(t, int32(0), user.Age)
-
-	user = <-userProvider.ch
-
-	assert.NotNil(t, user)
-	assert.Equal(t, "A001", user.ID)
-	assert.Equal(t, "Alex Stocks", user.Name)
-	assert.Equal(t, int32(18), user.Age)
-	assert.NotNil(t, user.Time)
-}
diff --git a/attachment/README.md b/attachment/README.md
deleted file mode 100644
index ad54751..0000000
--- a/attachment/README.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Attachment Example
-
-### Background
-
-A Dubbo client can pass user data to the remote Dubbo server via attachment. Dubbo-go leverages `context.Context` as the attachment between consumer and provider. In order to use attachment, a `context.Context` is required to introduce as the first parameter of the service method, for example:
-
-```go
-GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-```
-
-To pass the user data from the client side, a `map[string]interface{}` should be put into the `context.Context` with the key "attachment". The following code snippet shows how a user data "timestamp" is put into the attachment:
-
-```go
-ctx := context.WithValue(context.Background(), constant.AttachmentKey, 
-	map[string]interface{}{"timestamp": time.Now()})
-err := userProvider.GetUser(ctx, []interface{}{"A001"}, user)
-```
-
-On the provider side, a `context.Context` is passed as the first parameter along with the user data. Here below the code from the current samples shows how the service method is implemented, and how the user data is fetched from the attachment:
-
-```go
-func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
-	t := time.Now()
-	attachment := ctx.Value(constant.AttachmentKey).(map[string]interface{})
-	if v, ok := attachment["timestamp"]; ok {
-		t = v.(time.Time).Add(-1 * 365 * 24 * time.Hour)
-	}
-
-	rsp := User{"A001", "Alex Stocks", 18, t}
-	return &rsp, nil
-}
-```
-
-Pls. refer to [HOWTO.md](../HOWTO.md) under the root directory to run this sample.
-
diff --git a/attachment/README_zh.md b/attachment/README_zh.md
deleted file mode 100644
index 305bb1f..0000000
--- a/attachment/README_zh.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Attachment 示例
-
-### 背景
-
-可以通过 attachment 把用户的数据从 Dubbo 的客户端传递给服务端。在 Dubbo-go 中,attachment 在二者之间的传递是通过 `context.Context` 的机制来完成的。如果要使用 attachment,那么应当把 `context.Context` 作为要调用的服务方法的第一个参数,例如:
-
-```go
-GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-```
-
-为了在客户端传递用户数据到服务端,首先需要在方法的第一个参数 `context.Context` 中放入一个 `map[string]interface{}` 的数据类型,该数据的 Key 值约定为 "attachment"。以下的代码片段展示了如何把用户自定义的的一个时间戳通过该 map 中的 "timestamp" 放入 attachment 中:
-
-```go
-ctx := context.WithValue(context.Background(), constant.AttachmentKey, 
-	map[string]interface{}{"timestamp": time.Now()})
-err := userProvider.GetUser(ctx, []interface{}{"A001"}, user)
-```
-
-在服务提供方,方法的第一个参数 `context.Context` 传入时携带了用户在客户端放入的自定义数据。下面的代码就是本例子中的服务端实现,主要展示了如何从 attachment 中提取用户自定义的数据:
-
-
-```go
-func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
-	t := time.Now()
-	attachment := ctx.Value(constant.AttachmentKey).(map[string]interface{})
-	if v, ok := attachment["timestamp"]; ok {
-		t = v.(time.Time).Add(-1 * 365 * 24 * time.Hour)
-	}
-
-	rsp := User{"A001", "Alex Stocks", 18, t}
-	return &rsp, nil
-}
-```
-
-请参阅根目录中的 [HOWTO.md](../HOWTO_zh.md) 来运行本例。
-
-
diff --git a/attachment/go-client/cmd/client.go b/attachment/go-client/cmd/client.go
deleted file mode 100644
index 14313d4..0000000
--- a/attachment/go-client/cmd/client.go
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package main
-
-import (
-	"context"
-	"os"
-	"time"
-)
-
-import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	"dubbo.apache.org/dubbo-go/v3/common/constant"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log"
-)
-
-import (
-	"github.com/apache/dubbo-go-samples/attachment/go-client/pkg"
-)
-
-var userProvider = new(pkg.UserProvider)
-
-func init() {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&pkg.User{})
-}
-
-// need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
-func main() {
-	hessian.RegisterPOJO(&pkg.User{})
-	config.Load()
-	time.Sleep(3 * time.Second)
-
-	gxlog.CInfo("\n\n\nstart to test dubbo")
-	user := &pkg.User{}
-	ctx := context.WithValue(context.Background(), constant.AttachmentKey, map[string]interface{}{"timestamp": time.Now()})
-	err := userProvider.GetUser(ctx, []interface{}{"A001"}, user)
-	if err != nil {
-		gxlog.CError("error: %v\n", err)
-		os.Exit(1)
-		return
-	}
-	gxlog.CInfo("response result: %v\n", user)
-}
diff --git a/attachment/go-client/conf/client.yml b/attachment/go-client/conf/client.yml
deleted file mode 100644
index 958a65b..0000000
--- a/attachment/go-client/conf/client.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoClient"
-  module: "dubbo-go attachment client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/attachment/go-client/conf/log.yml b/attachment/go-client/conf/log.yml
deleted file mode 100644
index 2b6e93a..0000000
--- a/attachment/go-client/conf/log.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-level: "debug"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/attachment/go-client/pkg/user.go b/attachment/go-client/pkg/user.go
deleted file mode 100644
index 7733ea4..0000000
--- a/attachment/go-client/pkg/user.go
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	"time"
-)
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/attachment/go-server/cmd/server.go b/attachment/go-server/cmd/server.go
deleted file mode 100644
index 351fe89..0000000
--- a/attachment/go-server/cmd/server.go
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package main
-
-import (
-	"fmt"
-	"os"
-	"os/signal"
-	"syscall"
-	"time"
-)
-
-import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	"dubbo.apache.org/dubbo-go/v3/common/logger"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-)
-
-import (
-	"github.com/apache/dubbo-go-samples/attachment/go-server/pkg"
-)
-
-var (
-	survivalTimeout = int(3e9)
-)
-
-// need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
-func main() {
-	hessian.RegisterPOJO(&pkg.User{})
-	config.Load()
-	logger.Info("dubbo-go server started.")
-
-	initSignal()
-}
-
-func initSignal() {
-	signals := make(chan os.Signal, 1)
-	// It is not possible to block SIGKILL or syscall.SIGSTOP
-	signal.Notify(signals, os.Interrupt, os.Kill, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
-	for {
-		sig := <-signals
-		logger.Infof("get signal %s", sig.String())
-		switch sig {
-		case syscall.SIGHUP:
-			// reload()
-		default:
-			time.AfterFunc(time.Duration(survivalTimeout), func() {
-				logger.Warnf("app exit now by force...")
-				os.Exit(1)
-			})
-
-			// The program exits normally or timeout forcibly exits.
-			fmt.Println("provider app exit now...")
-			return
-		}
-	}
-}
diff --git a/attachment/go-server/conf/client.yml b/attachment/go-server/conf/client.yml
deleted file mode 100644
index e9e8cbf..0000000
--- a/attachment/go-server/conf/client.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoTest"
-  module: "dubbo-go attachment consumer"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/attachment/go-server/conf/log.yml b/attachment/go-server/conf/log.yml
deleted file mode 100644
index 970d988..0000000
--- a/attachment/go-server/conf/log.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-level: "error"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/attachment/go-server/conf/server.yml b/attachment/go-server/conf/server.yml
deleted file mode 100644
index 0af09bb..0000000
--- a/attachment/go-server/conf/server.yml
+++ /dev/null
@@ -1,55 +0,0 @@
-# dubbo server yaml configure file
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "AttachmentProvider"
-  module: "dubbo-go attachment provider"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-
-# service config
-services:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    loadbalance: "random"
-    warmup: "100"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 1
-        loadbalance: "random"
-
-# protocol config
-protocols:
-  "dubbo":
-    name: "dubbo"
-    port: 20000
-
-protocol_conf:
-  dubbo:
-    session_number: 700
-    session_timeout: "180s"
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "server"
diff --git a/attachment/go-server/docker/docker-compose.yml b/attachment/go-server/docker/docker-compose.yml
deleted file mode 100644
index 8724179..0000000
--- a/attachment/go-server/docker/docker-compose.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-version: '3'
-
-services:
-  zookeeper:
-    image: zookeeper
-    ports:
-      - 2181:2181
-    restart: on-failure
-
diff --git a/attachment/go-server/docker/docker-health-check.sh b/attachment/go-server/docker/docker-health-check.sh
deleted file mode 100644
index 2cc32c2..0000000
--- a/attachment/go-server/docker/docker-health-check.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-curl 127.0.0.1:2181
-res=$?
-passCode=52
-while [ "$res" != "$passCode" ];do
-  sleep 5
-  curl 127.0.0.1:2181
-  res=$?
-done
-
-sleep 5
diff --git a/attachment/go-server/pkg/user.go b/attachment/go-server/pkg/user.go
deleted file mode 100644
index 465ac72..0000000
--- a/attachment/go-server/pkg/user.go
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	"time"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/common/constant"
-	"dubbo.apache.org/dubbo-go/v3/config"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log"
-)
-
-func init() {
-	config.SetProviderService(new(UserProvider))
-	// ------for hessian2------
-	hessian.RegisterPOJO(&User{})
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-}
-
-func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
-	gxlog.CInfo("req:%#v", req)
-
-	t := time.Now()
-	attachment := ctx.Value(constant.AttachmentKey).(map[string]interface{})
-	if v, ok := attachment["timestamp"]; ok {
-		gxlog.CInfo("attachment: %v", v)
-		t = v.(time.Time).Add(-1 * 365 * 24 * time.Hour)
-	}
-
-	rsp := User{"A001", "Alex Stocks", 18, t}
-	gxlog.CInfo("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/attachment/go-server/tests/integration/main_test.go b/attachment/go-server/tests/integration/main_test.go
deleted file mode 100644
index d028c55..0000000
--- a/attachment/go-server/tests/integration/main_test.go
+++ /dev/null
@@ -1,71 +0,0 @@
-// +build integration
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package integration
-
-import (
-	"context"
-	"os"
-	"testing"
-	"time"
-)
-
-import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/local"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-)
-
-var userProvider = new(UserProvider)
-
-func TestMain(m *testing.M) {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&User{})
-	config.Load()
-	time.Sleep(3 * time.Second)
-
-	os.Exit(m.Run())
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/attachment/go-server/tests/integration/userprovider_test.go b/attachment/go-server/tests/integration/userprovider_test.go
deleted file mode 100644
index fdb38b3..0000000
--- a/attachment/go-server/tests/integration/userprovider_test.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// +build integration
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package integration
-
-import (
-	"context"
-	"testing"
-	"time"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/common/constant"
-
-	"github.com/stretchr/testify/assert"
-)
-
-func TestGetUser(t *testing.T) {
-	user := &User{}
-	timestamp := time.Now()
-	ctx := context.WithValue(context.Background(), constant.AttachmentKey, map[string]interface{}{"timestamp": timestamp})
-	err := userProvider.GetUser(ctx, []interface{}{"A001"}, user)
-
-	assert.Nil(t, err)
-	assert.Equal(t, "A001", user.ID)
-	assert.Equal(t, "Alex Stocks", user.Name)
-	assert.Equal(t, int32(18), user.Age)
-	assert.NotNil(t, user.Time)
-	assert.True(t, user.Time.Before(timestamp))
-
-	t.Logf("consumer timestamp: %v", timestamp)
-	t.Logf("provider timestamp: %v", user.Time)
-}
diff --git a/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/cmd/env.sh b/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/cmd/env.sh
deleted file mode 100644
index 4ac7e80..0000000
--- a/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/cmd/env.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-export CONF_CONSUMER_FILE_PATH="../conf/client.yml"
-export APP_LOG_CONF_FILE="../conf/log.yml"
\ No newline at end of file
diff --git a/general/dubbo3/pb/dubbogo-java/protobuf/protobuf.mk b/general/dubbo3/pb/dubbogo-java/protobuf/protobuf.mk
deleted file mode 100644
index 5680c3d..0000000
--- a/general/dubbo3/pb/dubbogo-java/protobuf/protobuf.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-.PHONY: compile
-PROTOC_GEN_GO := $(GOPATH)/bin/protoc-gen-go
-PROTOC := $(shell which protoc)
-ifeq ($(PROTOC),)
-	PROTOC = must-rebuild
-endif
-
-UNAME := $(shell uname)
-
-$(PROTOC):
-ifeq ($(UNAME), Darwin)
-	brew install protobuf
-endif
-ifeq ($(UNAME), Linux)
-	sudo apt-get install protobuf-compiler
-endif
-
-$(PROTOC_GEN_GO):
-	go get -u dubbo.apache.org/dubbo-go/v3/protocol/dubbo3/protoc-gen-dubbo3
-
-helloworld.pb.go: helloworld.proto | $(PROTOC_GEN_GO) $(PROTOC)
-	protoc -I . helloworld.proto --dubbo3_out=plugins=grpc+dubbo:.
-
-.PHONY: compile
-compile: helloworld.pb.go
-
diff --git a/generic/README.md b/generic/README.md
index f22fe37..5f5943e 100644
--- a/generic/README.md
+++ b/generic/README.md
@@ -36,17 +36,17 @@ cd ./default/go-client/cmd \
 
 ### Protobuf Json (Disabled)
 
-The case for Protobuf Json is at `protobufjson` directory. The first step is to generate struct definitions with proto file.  (The `user.pb.go` is generated for integrated tests, but we highly recommend you generate by yourself.)
+The case for Protobuf Json is at `protobufjson` directory. The first step is to generate struct definitions with proto file.  (The `user.api.go` is generated for integrated tests, but we highly recommend you generate by yourself.)
 
 ```shell
 cd ./protobufjson \
   && protoc --go_out=. user.proto
 ```
 
-Copy `user.pb.go` file generated by protobuf to provider.
+Copy `user.api.go` file generated by protobuf to provider.
 
 ```shell
-mv ./protobufjson/user.pb.go ./protobufjson/go-server/pkg
+mv ./protobufjson/user.api.go ./protobufjson/go-server/pkg
 ```
 
 Launch the provider by the following code.
diff --git a/generic/README_zh.md b/generic/README_zh.md
index 3587dc7..043bcbc 100644
--- a/generic/README_zh.md
+++ b/generic/README_zh.md
@@ -36,17 +36,17 @@ cd ./default/go-client/cmd \
 
 ### Protobuf Json (暂时禁用)
 
-Protobuf Json的例子放在`protobufjson`文件夹中。首先需要根据proto文件生成结构体定义。(注:`user.pb.go`已经生成,这是为了CI的集成测试使用的,但是我们仍然强烈建议你自己生成一次。)
+Protobuf Json的例子放在`protobufjson`文件夹中。首先需要根据proto文件生成结构体定义。(注:`user.api.go`已经生成,这是为了CI的集成测试使用的,但是我们仍然强烈建议你自己生成一次。)
 
 ```shell
 cd ./protobufjson \
   && protoc --go_out=. user.proto
 ```
 
-拷贝`user.pb.go`文件到提供者文件夹。
+拷贝`user.api.go`文件到提供者文件夹。
 
 ```shell
-mv ./protobufjson/user.pb.go ./protobufjson/go-server/pkg
+mv ./protobufjson/user.api.go ./protobufjson/go-server/pkg
 ```
 
 通过下面的代码启动提供者。
diff --git a/go.mod b/go.mod
index 590b9e6..16b4114 100644
--- a/go.mod
+++ b/go.mod
@@ -1,14 +1,14 @@
 module github.com/apache/dubbo-go-samples
 
 require (
-	dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210725154253-9aeb7ff3c612
+	dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210821071019-8cb93935d529
 	github.com/alibaba/sentinel-golang v1.0.2
 	github.com/apache/dubbo-getty v1.4.3
 	github.com/apache/dubbo-go-hessian2 v1.9.2
 	github.com/bwmarrin/snowflake v0.3.0
-	github.com/dubbogo/gost v1.11.14
+	github.com/dubbogo/gost v1.11.16
 	github.com/dubbogo/net v0.0.3
-	github.com/dubbogo/triple v1.0.1
+	github.com/dubbogo/triple v1.0.5
 	github.com/emicklei/go-restful/v3 v3.4.0
 	github.com/golang/protobuf v1.5.2
 	github.com/opentracing/opentracing-go v1.2.0
@@ -20,12 +20,11 @@ require (
 	github.com/transaction-wg/seata-golang v0.2.0
 	github.com/uber/jaeger-client-go v2.22.1+incompatible
 	github.com/uber/jaeger-lib v2.2.0+incompatible // indirect
+	golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect
 	google.golang.org/grpc v1.38.0
-	google.golang.org/protobuf v1.26.0
+	google.golang.org/protobuf v1.27.1
 )
 
 replace github.com/envoyproxy/go-control-plane => github.com/envoyproxy/go-control-plane v0.8.0
 
-// replace dubbo.apache.org/dubbo-go/v3 => /Users/docker/code/github/go/dubbo-go
-
 go 1.13
diff --git a/go.sum b/go.sum
index da228e9..89d7e37 100644
--- a/go.sum
+++ b/go.sum
@@ -12,6 +12,8 @@ cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqCl
 cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
 cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210821071019-8cb93935d529 h1:bIIKczliDGFh9ZHVwOr5NPZKvbAF5XLNeHRDc2/ifsA=
+dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210821071019-8cb93935d529/go.mod h1:EE3h5Dj/YxLm4hDnMsJ3MI50jHqZ3HJqE6IkdUKg4wc=
 github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
 github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
 github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
@@ -143,13 +145,14 @@ github.com/dubbogo/go-zookeeper v1.0.3/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4D
 github.com/dubbogo/gost v1.9.0/go.mod h1:pPTjVyoJan3aPxBPNUX0ADkXjPibLo+/Ib0/fADXSG8=
 github.com/dubbogo/gost v1.10.1/go.mod h1:+mQGS51XQEUWZP2JeGZTxJwipjRKtJO7Tr+FOg+72rI=
 github.com/dubbogo/gost v1.11.13/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
-github.com/dubbogo/gost v1.11.14 h1:9lfcdILOmqTOVAW1fPHa5uf1NrD6jlIOBe4vf8576yQ=
-github.com/dubbogo/gost v1.11.14/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
+github.com/dubbogo/gost v1.11.16 h1:fvOw8aKQ0BuUYuD+MaXAYFvT7tg2l7WAS5SL5gZJpFs=
+github.com/dubbogo/gost v1.11.16/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
 github.com/dubbogo/jsonparser v1.0.1/go.mod h1:tYAtpctvSP/tWw4MeelsowSPgXQRVHHWbqL6ynps8jU=
 github.com/dubbogo/net v0.0.3 h1:2k53mh+1U8h1gFjJ8ykzyP4wNdAdgjc5moD+xVHI/AE=
 github.com/dubbogo/net v0.0.3/go.mod h1:B6/ka3g8VzcyrmdCH4VkHP1K0aHeI37FmclS+TCwIBU=
-github.com/dubbogo/triple v1.0.1 h1:fdBkXTR0I4UBBCDcN+k22uJWU338ZK5mvOPpIBIL5h8=
 github.com/dubbogo/triple v1.0.1/go.mod h1:O6vQD2XLCWugzAk0P27HTW4+Uhkd8sjaQn0BZijdGzU=
+github.com/dubbogo/triple v1.0.5 h1:bDASS3u0ILC+KaUmWaDDuZ7/pVZcljyO/1TkwXMvcsM=
+github.com/dubbogo/triple v1.0.5/go.mod h1:tCl0mV54+V8Br9z71sFbS1IQUG41QKZUrW6FGaLheM0=
 github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
 github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
@@ -821,8 +824,9 @@ golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/
 golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U=
 golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw=
+golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -997,8 +1001,9 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
 google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
 google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
 google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
+google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff --git a/helloworld/README.md b/helloworld/README.md
index 893a170..81616fa 100644
--- a/helloworld/README.md
+++ b/helloworld/README.md
@@ -1,20 +1,21 @@
 # Helloworld for Dubbo-go 3.0
 
-For pb definition and go client and server startup, please refer to [dubbogo-grpc](../dubbogo-grpc/README.md)
+For api definition and go client and server startup, please refer to [dubbo-go 3.0 quickstart](https://dubbogo.github.io/zh-cn/docs/user/quickstart/3.0/quickstart.html)
 
 ## Instructions
+1. Start zookeeper
 
-1. Start the server
+2. Start the server
 
-Use goland to start triple/gojava-go-server
+Use goland to start helloworld-go-server
 
 or
 
 Execute `sh run.sh` in the java-server folder to start the java server
 
-2. Start the client
+3. Start the client
 
-Use goland to start triple/gojava-go-client
+Use goland to start helloworld-go-client
 
 or
 
diff --git a/helloworld/README_zh.md b/helloworld/README_zh.md
index d280c2e..a682c27 100644
--- a/helloworld/README_zh.md
+++ b/helloworld/README_zh.md
@@ -1,20 +1,21 @@
 # Helloworld for Dubbo-go 3.0
 
-pb 定义以及 go 客户端、服务端启动,可以参考 [dubbogo-grpc](../dubbogo-grpc/README_zh.md)
+api 定义以及 go 客户端、服务端启动,可以参考 [dubbo-go 3.0 快速开始](https://dubbogo.github.io/zh-cn/docs/user/quickstart/3.0/quickstart.html)
 
 ## 使用方法
+1. 启动 zookeeper
 
-1. 启动服务端
+2. 启动服务端
 
-使用 goland 启动 triple/gojava-go-server
+使用 goland 启动 helloworld-go-server
 
 或者
 
 在 java-server 文件夹下执行 `sh run.sh` 启动 java server
 
-2. 启动客户端
+3. 启动客户端
 
-使用 goland 启动 triple/gojava-go-client
+使用 goland 启动 helloworld-go-client
 
 或者
 
diff --git a/helloworld/go-client/cmd/client.go b/helloworld/go-client/cmd/client.go
index 3f40b44..68fe2c0 100644
--- a/helloworld/go-client/cmd/client.go
+++ b/helloworld/go-client/cmd/client.go
@@ -19,50 +19,37 @@ package main
 
 import (
 	"context"
-	"fmt"
 	"time"
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 )
 
 import (
-	pb "github.com/apache/dubbo-go-samples/helloworld/protobuf"
+	"github.com/apache/dubbo-go-samples/api"
 )
 
-var grpcGreeterImpl = new(pb.GreeterClientImpl)
+var grpcGreeterImpl = new(api.GreeterClientImpl)
 
 func init() {
 	config.SetConsumerService(grpcGreeterImpl)
 }
 
-// deprecated: need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
-// or config.Load(config.Path("..."))
+// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/helloworld/go-client/conf/dubbogo.yml
 func main() {
 	config.Load()
 	time.Sleep(3 * time.Second)
 
-	fmt.Println("\n\n\nstart to test dubbo")
-	req := &pb.HelloRequest{
+	logger.Info("start to test dubbo")
+	req := &api.HelloRequest{
 		Name: "laurence",
 	}
-
-	reply := &pb.User{}
-
-	ctx := context.Background()
-	ctx = context.WithValue(ctx, "tri-req-id", "test_value_XXXXXXXX")
-
-	err := grpcGreeterImpl.SayHello(ctx, req, reply)
-	if err != nil {
-		panic(err)
+	reply := &api.User{}
+	if err := grpcGreeterImpl.SayHello(context.Background(), req, reply); err != nil {
+		logger.Error(err)
 	}
-	fmt.Printf("client response result: %v\n", reply)
+	logger.Infof("client response result: %v\n", reply)
 }
diff --git a/helloworld/go-client/conf/client.yml b/helloworld/go-client/conf/dubbogo.yml
similarity index 67%
copy from helloworld/go-client/conf/client.yml
copy to helloworld/go-client/conf/dubbogo.yml
index 64b8ae1..c11aef3 100644
--- a/helloworld/go-client/conf/client.yml
+++ b/helloworld/go-client/conf/dubbogo.yml
@@ -10,4 +10,4 @@ dubbo:
     references:
       "greeterImpl":
         protocol: "tri"
-        interface: "protobuf.Greeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
+        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/helloworld/go-server/cmd/server.go b/helloworld/go-server/cmd/server.go
index 68ac7ac..4f23c26 100644
--- a/helloworld/go-server/cmd/server.go
+++ b/helloworld/go-server/cmd/server.go
@@ -18,22 +18,30 @@
 package main
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
+	"context"
+)
+
+import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/helloworld/go-server/pkg"
+	"github.com/apache/dubbo-go-samples/api"
 )
 
-// deprecated: need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
-// config.Load(config.Path("..."))
+type GreeterProvider struct {
+	api.GreeterProviderBase
+}
+
+func (s *GreeterProvider) SayHello(ctx context.Context, in *api.HelloRequest) (*api.User, error) {
+	logger.Infof("Dubbo3 GreeterProvider get user name = %s\n", in.Name)
+	return &api.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
+}
+
 func main() {
-	config.SetProviderService(pkg.NewGreeterProvider())
+	config.SetProviderService(&GreeterProvider{})
 	config.Load()
 	select {}
 }
diff --git a/helloworld/go-server/conf/server.yml b/helloworld/go-server/conf/dubbogo.yml
similarity index 72%
copy from helloworld/go-server/conf/server.yml
copy to helloworld/go-server/conf/dubbogo.yml
index a435688..5e9cfb4 100644
--- a/helloworld/go-server/conf/server.yml
+++ b/helloworld/go-server/conf/dubbogo.yml
@@ -14,4 +14,4 @@ dubbo:
     services:
       "greeterImpl":
         protocol: "triple"
-        interface: "protobuf.Greeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
+        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/helloworld/go-server/pkg/greeter.go b/helloworld/go-server/pkg/greeter.go
deleted file mode 100644
index 08b393a..0000000
--- a/helloworld/go-server/pkg/greeter.go
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package pkg
-
-import (
-	"context"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/common/logger"
-)
-
-import (
-	pb "github.com/apache/dubbo-go-samples/helloworld/protobuf"
-)
-
-type GreeterProvider struct {
-	*pb.GreeterProviderBase
-}
-
-func NewGreeterProvider() *GreeterProvider {
-	return &GreeterProvider{
-		GreeterProviderBase: &pb.GreeterProviderBase{},
-	}
-}
-
-func (s *GreeterProvider) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.User, error) {
-	logger.Infof("Dubbo3 GreeterProvider get user name = %s\n", in.Name)
-	return &pb.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
-}
diff --git a/helloworld/java-client/pom.xml b/helloworld/java-client/pom.xml
index 10ae5bb..4cf91bd 100644
--- a/helloworld/java-client/pom.xml
+++ b/helloworld/java-client/pom.xml
@@ -27,7 +27,7 @@
     <properties>
         <source.level>1.8</source.level>
         <target.level>1.8</target.level>
-        <dubbo.version>3.0.0</dubbo.version>
+        <dubbo.version>3.0.2</dubbo.version>
         <junit.version>4.12</junit.version>
         <spring-test.version>4.3.16.RELEASE</spring-test.version>
         <maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
diff --git a/helloworld/java-server/pom.xml b/helloworld/java-server/pom.xml
index dd518ca..bac62e9 100644
--- a/helloworld/java-server/pom.xml
+++ b/helloworld/java-server/pom.xml
@@ -29,7 +29,7 @@
     <properties>
         <source.level>1.8</source.level>
         <target.level>1.8</target.level>
-        <dubbo.version>3.0.0</dubbo.version>
+        <dubbo.version>3.0.2</dubbo.version>
         <junit.version>4.12</junit.version>
         <spring-test.version>4.3.16.RELEASE</spring-test.version>
         <maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
diff --git a/registry/zookeeper/go-server/docker/docker-compose.yml b/integrate_test/helloworld/docker/docker-compose.yml
similarity index 100%
rename from registry/zookeeper/go-server/docker/docker-compose.yml
rename to integrate_test/helloworld/docker/docker-compose.yml
diff --git a/helloworld/go-server/tests/integration/main_test.go b/integrate_test/helloworld/tests/integration/main_test.go
similarity index 95%
rename from helloworld/go-server/tests/integration/main_test.go
rename to integrate_test/helloworld/tests/integration/main_test.go
index c739d6c..d8a0568 100644
--- a/helloworld/go-server/tests/integration/main_test.go
+++ b/integrate_test/helloworld/tests/integration/main_test.go
@@ -38,7 +38,7 @@ import (
 )
 
 import (
-	dubbo3pb "github.com/apache/dubbo-go-samples/helloworld/protobuf"
+	dubbo3pb "github.com/apache/dubbo-go-samples/api"
 )
 
 var greeterProvider = new(dubbo3pb.GreeterClientImpl)
diff --git a/helloworld/go-server/tests/integration/userprovider_test.go b/integrate_test/helloworld/tests/integration/userprovider_test.go
similarity index 95%
rename from helloworld/go-server/tests/integration/userprovider_test.go
rename to integrate_test/helloworld/tests/integration/userprovider_test.go
index 01a7855..992c55d 100644
--- a/helloworld/go-server/tests/integration/userprovider_test.go
+++ b/integrate_test/helloworld/tests/integration/userprovider_test.go
@@ -29,7 +29,7 @@ import (
 )
 
 import (
-	dubbo3pb "github.com/apache/dubbo-go-samples/helloworld/protobuf"
+	dubbo3pb "github.com/apache/dubbo-go-samples/api"
 )
 
 func TestSayHello(t *testing.T) {
diff --git a/helloworld/go-server/docker/docker-compose.yml b/integrate_test/registry/zookeeper/docker/docker-compose.yml
similarity index 100%
rename from helloworld/go-server/docker/docker-compose.yml
rename to integrate_test/registry/zookeeper/docker/docker-compose.yml
diff --git a/registry/zookeeper/go-server/docker/docker-health-check.sh b/integrate_test/registry/zookeeper/docker/docker-health-check.sh
similarity index 100%
rename from registry/zookeeper/go-server/docker/docker-health-check.sh
rename to integrate_test/registry/zookeeper/docker/docker-health-check.sh
diff --git a/registry/zookeeper/go-server/tests/integration/main_test.go b/integrate_test/registry/zookeeper/tests/integration/main_test.go
similarity index 100%
rename from registry/zookeeper/go-server/tests/integration/main_test.go
rename to integrate_test/registry/zookeeper/tests/integration/main_test.go
diff --git a/registry/zookeeper/go-server/tests/integration/userprovider_test.go b/integrate_test/registry/zookeeper/tests/integration/userprovider_test.go
similarity index 100%
rename from registry/zookeeper/go-server/tests/integration/userprovider_test.go
rename to integrate_test/registry/zookeeper/tests/integration/userprovider_test.go
diff --git a/logger/go-server/cmd/server.go b/logger/go-server/cmd/server.go
index 5fe60e0..d26cdf2 100755
--- a/logger/go-server/cmd/server.go
+++ b/logger/go-server/cmd/server.go
@@ -40,7 +40,7 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/helloworld/go-server/pkg"
+	"github.com/apache/dubbo-go-samples/logger/go-server/pkg"
 )
 
 var (
diff --git a/registry/zookeeper/go-client/cmd/client.go b/registry/zookeeper/go-client/cmd/client.go
index 1735077..a7cb8cd 100644
--- a/registry/zookeeper/go-client/cmd/client.go
+++ b/registry/zookeeper/go-client/cmd/client.go
@@ -19,49 +19,40 @@ package main
 
 import (
 	"context"
-	"os"
 	"time"
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	gxlog "github.com/dubbogo/gost/log"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/registry/zookeeper/go-client/pkg"
+	"github.com/apache/dubbo-go-samples/api"
 )
 
-var userProvider = new(pkg.UserProvider)
+var grpcGreeterImpl = new(api.GreeterClientImpl)
 
 func init() {
-	config.SetConsumerService(userProvider)
-
+	config.SetConsumerService(grpcGreeterImpl)
 }
 
-// need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
+// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/helloworld/go-client/conf/dubbogo.yml if needed
 func main() {
-	path := "./registry/zookeeper/go-client/conf/application.yml"
+	path := "./registry/zookeeper/go-client/conf/dubbogo.yml"
 	if err := config.Load(config.WithPath(path)); err != nil {
 		panic(err)
 	}
 	time.Sleep(3 * time.Second)
 
-	gxlog.CInfo("\n\n\nstart to test dubbo")
-	user := &pkg.User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
-	if err != nil {
-		gxlog.CError("error: %v\n", err)
-		os.Exit(1)
-		return
+	logger.Info("start to test dubbo")
+	req := &api.HelloRequest{
+		Name: "laurence",
+	}
+	reply := &api.User{}
+	if err := grpcGreeterImpl.SayHello(context.Background(), req, reply); err != nil {
+		logger.Error(err)
 	}
-	gxlog.CInfo("response result: %v\n", user)
+	logger.Infof("client response result: %v\n", reply)
 }
diff --git a/registry/zookeeper/go-client/conf/application.yml b/registry/zookeeper/go-client/conf/application.yml
deleted file mode 100644
index 9e84b93..0000000
--- a/registry/zookeeper/go-client/conf/application.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-dubbo:
-  registries:
-    zk:
-      timeout: 10s
-      address: zookeeper://127.0.0.1:2181
-  protocols:
-    dubbo:
-      name: dubbo
-      port: 20000
-  consumer:
-    check: false
-    references:
-      UserProvider:
-        registry: zk
-        protocol: dubbo
-        interface: org.apache.dubbo.UserService
-        cluster: failover
-        methods:
-          - name: GetUser
-            retries: 3
\ No newline at end of file
diff --git a/helloworld/go-client/conf/client.yml b/registry/zookeeper/go-client/conf/dubbogo.yml
similarity index 67%
rename from helloworld/go-client/conf/client.yml
rename to registry/zookeeper/go-client/conf/dubbogo.yml
index 64b8ae1..c11aef3 100644
--- a/helloworld/go-client/conf/client.yml
+++ b/registry/zookeeper/go-client/conf/dubbogo.yml
@@ -10,4 +10,4 @@ dubbo:
     references:
       "greeterImpl":
         protocol: "tri"
-        interface: "protobuf.Greeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
+        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/registry/zookeeper/go-client/pkg/user.go b/registry/zookeeper/go-client/pkg/user.go
deleted file mode 100644
index dac6ccf..0000000
--- a/registry/zookeeper/go-client/pkg/user.go
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	"time"
-)
-
-import "github.com/apache/dubbo-go-hessian2"
-
-func init() {
-	hessian.RegisterPOJO(new(User))
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/registry/zookeeper/go-server/cmd/server.go b/registry/zookeeper/go-server/cmd/server.go
index fb82cfa..ffe7f46 100644
--- a/registry/zookeeper/go-server/cmd/server.go
+++ b/registry/zookeeper/go-server/cmd/server.go
@@ -18,8 +18,8 @@
 package main
 
 import (
+	"context"
 	"fmt"
-	"github.com/apache/dubbo-go-samples/registry/zookeeper/go-server/pkg"
 	"os"
 	"os/signal"
 	"syscall"
@@ -27,26 +27,32 @@ import (
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+)
+
+import (
+	"github.com/apache/dubbo-go-samples/api"
 )
 
 var (
 	survivalTimeout = int(3e9)
 )
 
-// need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
+type GreeterProvider struct {
+	api.GreeterProviderBase
+}
+
+func (s *GreeterProvider) SayHello(ctx context.Context, in *api.HelloRequest) (*api.User, error) {
+	logger.Infof("Dubbo3 GreeterProvider get user name = %s\n", in.Name)
+	return &api.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
+}
+
 func main() {
-	config.SetProviderService(new(pkg.UserProvider))
+	config.SetProviderService(&GreeterProvider{})
 
-	path := "./registry/zookeeper/go-server/conf/server.yml"
+	path := "./registry/zookeeper/go-server/conf/dubbogo.yml"
 
 	if err := config.Load(config.WithPath(path)); err != nil {
 		panic(err)
diff --git a/helloworld/go-server/conf/server.yml b/registry/zookeeper/go-server/conf/dubbogo.yml
similarity index 72%
rename from helloworld/go-server/conf/server.yml
rename to registry/zookeeper/go-server/conf/dubbogo.yml
index a435688..5e9cfb4 100644
--- a/helloworld/go-server/conf/server.yml
+++ b/registry/zookeeper/go-server/conf/dubbogo.yml
@@ -14,4 +14,4 @@ dubbo:
     services:
       "greeterImpl":
         protocol: "triple"
-        interface: "protobuf.Greeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
+        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/registry/zookeeper/go-server/conf/server.yml b/registry/zookeeper/go-server/conf/server.yml
deleted file mode 100644
index bb45535..0000000
--- a/registry/zookeeper/go-server/conf/server.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-dubbo:
-  registries:
-    zk:
-      timeout: 10s
-      address: zookeeper://127.0.0.1:2181
-  protocols:
-    dubbo:
-      name: dubbo
-      port: 20000
-  provider:
-    register: true
-    registry: zk
-    services:
-      UserProvider:
-        registry: zk
-        protocol: dubbo
-        interface: org.apache.dubbo.UserService
-        loadbalance: random
-        warmup: 100
-        cluster: failover
-        methods:
-          - name: GetUser
-            retries: 1
-            loadbalance: random
\ No newline at end of file
diff --git a/registry/zookeeper/go-server/pkg/user.go b/registry/zookeeper/go-server/pkg/user.go
deleted file mode 100644
index e9c2e56..0000000
--- a/registry/zookeeper/go-server/pkg/user.go
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	hessian "github.com/apache/dubbo-go-hessian2"
-	"time"
-)
-
-import (
-	"github.com/dubbogo/gost/log"
-)
-
-func init() {
-	hessian.RegisterPOJO(new(User))
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-}
-
-func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
-	gxlog.CInfo("req:%#v", req)
-	rsp := User{"A001", "Alex Stocks", 18, time.Now()}
-	gxlog.CInfo("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/general/dubbo/go-client/cmd/client.go b/rpc/dubbo/go-client/cmd/client.go
similarity index 100%
rename from general/dubbo/go-client/cmd/client.go
rename to rpc/dubbo/go-client/cmd/client.go
diff --git a/general/dubbo/go-client/conf/client.yml b/rpc/dubbo/go-client/conf/client.yml
similarity index 100%
rename from general/dubbo/go-client/conf/client.yml
rename to rpc/dubbo/go-client/conf/client.yml
diff --git a/general/dubbo3/pb/dubbogo-java/go-server/conf/log.yml b/rpc/dubbo/go-client/conf/log.yml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/go-server/conf/log.yml
rename to rpc/dubbo/go-client/conf/log.yml
diff --git a/general/dubbo/go-client/pkg/user.go b/rpc/dubbo/go-client/pkg/user.go
similarity index 100%
rename from general/dubbo/go-client/pkg/user.go
rename to rpc/dubbo/go-client/pkg/user.go
diff --git a/general/dubbo/go-server/cmd/server.go b/rpc/dubbo/go-server/cmd/server.go
similarity index 100%
rename from general/dubbo/go-server/cmd/server.go
rename to rpc/dubbo/go-server/cmd/server.go
diff --git a/general/dubbo/go-server/conf/client.yml b/rpc/dubbo/go-server/conf/client.yml
similarity index 100%
rename from general/dubbo/go-server/conf/client.yml
rename to rpc/dubbo/go-server/conf/client.yml
diff --git a/general/dubbo3/pb/dubbogo-java/go-client/conf/log.yml b/rpc/dubbo/go-server/conf/log.yml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/go-client/conf/log.yml
rename to rpc/dubbo/go-server/conf/log.yml
diff --git a/general/dubbo/go-server/conf/server.yml b/rpc/dubbo/go-server/conf/server.yml
similarity index 100%
rename from general/dubbo/go-server/conf/server.yml
rename to rpc/dubbo/go-server/conf/server.yml
diff --git a/general/rest/go-server/docker/docker-compose.yml b/rpc/dubbo/go-server/docker/docker-compose.yml
similarity index 100%
rename from general/rest/go-server/docker/docker-compose.yml
rename to rpc/dubbo/go-server/docker/docker-compose.yml
diff --git a/general/grpc/go-server/docker/docker-health-check.sh b/rpc/dubbo/go-server/docker/docker-health-check.sh
similarity index 100%
rename from general/grpc/go-server/docker/docker-health-check.sh
rename to rpc/dubbo/go-server/docker/docker-health-check.sh
diff --git a/general/dubbo/go-server/pkg/user.go b/rpc/dubbo/go-server/pkg/user.go
similarity index 100%
rename from general/dubbo/go-server/pkg/user.go
rename to rpc/dubbo/go-server/pkg/user.go
diff --git a/general/dubbo/go-server/pkg/user_provider.go b/rpc/dubbo/go-server/pkg/user_provider.go
similarity index 100%
rename from general/dubbo/go-server/pkg/user_provider.go
rename to rpc/dubbo/go-server/pkg/user_provider.go
diff --git a/general/dubbo/go-server/tests/integration/main_test.go b/rpc/dubbo/go-server/tests/integration/main_test.go
similarity index 100%
rename from general/dubbo/go-server/tests/integration/main_test.go
rename to rpc/dubbo/go-server/tests/integration/main_test.go
diff --git a/general/dubbo/go-server/tests/integration/userprovider_test.go b/rpc/dubbo/go-server/tests/integration/userprovider_test.go
similarity index 100%
rename from general/dubbo/go-server/tests/integration/userprovider_test.go
rename to rpc/dubbo/go-server/tests/integration/userprovider_test.go
diff --git a/general/dubbo/java-server/2.6/pom.xml b/rpc/dubbo/java-client/2.6/pom.xml
similarity index 100%
rename from general/dubbo/java-server/2.6/pom.xml
rename to rpc/dubbo/java-client/2.6/pom.xml
diff --git a/general/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/Consumer.java b/rpc/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/Consumer.java
similarity index 100%
rename from general/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/Consumer.java
rename to rpc/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/Consumer.java
diff --git a/general/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/Gender.java b/rpc/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/Gender.java
similarity index 100%
rename from general/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/Gender.java
rename to rpc/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/Gender.java
diff --git a/general/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/User.java b/rpc/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/User.java
similarity index 100%
rename from general/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/User.java
rename to rpc/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/User.java
diff --git a/general/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/UserProvider.java b/rpc/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/UserProvider.java
similarity index 100%
rename from general/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/UserProvider.java
rename to rpc/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/UserProvider.java
diff --git a/general/dubbo/java-client/2.7/src/main/resources/META-INF/spring/dubbo.consumer.xml b/rpc/dubbo/java-client/2.6/src/main/resources/META-INF/spring/dubbo.consumer.xml
similarity index 100%
rename from general/dubbo/java-client/2.7/src/main/resources/META-INF/spring/dubbo.consumer.xml
rename to rpc/dubbo/java-client/2.6/src/main/resources/META-INF/spring/dubbo.consumer.xml
diff --git a/general/jsonrpc/java-client/src/main/resources/log4j.properties b/rpc/dubbo/java-client/2.6/src/main/resources/log4j.properties
similarity index 100%
rename from general/jsonrpc/java-client/src/main/resources/log4j.properties
rename to rpc/dubbo/java-client/2.6/src/main/resources/log4j.properties
diff --git a/general/dubbo/java-server/2.7/pom.xml b/rpc/dubbo/java-client/2.7/pom.xml
similarity index 100%
rename from general/dubbo/java-server/2.7/pom.xml
rename to rpc/dubbo/java-client/2.7/pom.xml
diff --git a/general/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/Consumer.java b/rpc/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/Consumer.java
similarity index 100%
rename from general/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/Consumer.java
rename to rpc/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/Consumer.java
diff --git a/general/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/Gender.java b/rpc/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/Gender.java
similarity index 100%
rename from general/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/Gender.java
rename to rpc/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/Gender.java
diff --git a/general/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/User.java b/rpc/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/User.java
similarity index 100%
rename from general/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/User.java
rename to rpc/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/User.java
diff --git a/general/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/UserProvider.java b/rpc/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/UserProvider.java
similarity index 100%
rename from general/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/UserProvider.java
rename to rpc/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/UserProvider.java
diff --git a/general/dubbo/java-client/2.6/src/main/resources/META-INF/spring/dubbo.consumer.xml b/rpc/dubbo/java-client/2.7/src/main/resources/META-INF/spring/dubbo.consumer.xml
similarity index 100%
rename from general/dubbo/java-client/2.6/src/main/resources/META-INF/spring/dubbo.consumer.xml
rename to rpc/dubbo/java-client/2.7/src/main/resources/META-INF/spring/dubbo.consumer.xml
diff --git a/general/jsonrpc/java-client/src/main/assembly/conf/log4j.properties b/rpc/dubbo/java-client/2.7/src/main/resources/log4j.properties
similarity index 100%
rename from general/jsonrpc/java-client/src/main/assembly/conf/log4j.properties
rename to rpc/dubbo/java-client/2.7/src/main/resources/log4j.properties
diff --git a/general/dubbo/java-client/2.6/pom.xml b/rpc/dubbo/java-server/2.6/pom.xml
similarity index 100%
rename from general/dubbo/java-client/2.6/pom.xml
rename to rpc/dubbo/java-server/2.6/pom.xml
diff --git a/general/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/Gender.java b/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/Gender.java
similarity index 100%
rename from general/dubbo/java-client/2.7/src/main/java/org/apache/dubbo/Gender.java
rename to rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/Gender.java
diff --git a/general/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/Provider.java b/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/Provider.java
similarity index 100%
rename from general/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/Provider.java
rename to rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/Provider.java
diff --git a/general/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/Response.java b/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/Response.java
similarity index 100%
rename from general/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/Response.java
rename to rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/Response.java
diff --git a/general/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/User.java b/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/User.java
similarity index 100%
rename from general/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/User.java
rename to rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/User.java
diff --git a/general/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProvider.java b/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProvider.java
similarity index 100%
rename from general/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProvider.java
rename to rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProvider.java
diff --git a/general/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java b/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java
similarity index 100%
rename from general/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java
rename to rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java
diff --git a/general/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderImpl.java b/rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderImpl.java
similarity index 100%
rename from general/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderImpl.java
rename to rpc/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderImpl.java
diff --git a/general/dubbo/java-server/2.7/src/main/resources/META-INF/spring/dubbo.provider.xml b/rpc/dubbo/java-server/2.6/src/main/resources/META-INF/spring/dubbo.provider.xml
similarity index 100%
rename from general/dubbo/java-server/2.7/src/main/resources/META-INF/spring/dubbo.provider.xml
rename to rpc/dubbo/java-server/2.6/src/main/resources/META-INF/spring/dubbo.provider.xml
diff --git a/general/jsonrpc/java-server/src/main/resources/log4j.properties b/rpc/dubbo/java-server/2.6/src/main/resources/log4j.properties
similarity index 100%
rename from general/jsonrpc/java-server/src/main/resources/log4j.properties
rename to rpc/dubbo/java-server/2.6/src/main/resources/log4j.properties
diff --git a/general/dubbo/java-client/2.7/pom.xml b/rpc/dubbo/java-server/2.7/pom.xml
similarity index 100%
rename from general/dubbo/java-client/2.7/pom.xml
rename to rpc/dubbo/java-server/2.7/pom.xml
diff --git a/general/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/Gender.java b/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/Gender.java
similarity index 100%
rename from general/dubbo/java-client/2.6/src/main/java/org/apache/dubbo/Gender.java
rename to rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/Gender.java
diff --git a/general/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/Provider.java b/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/Provider.java
similarity index 100%
rename from general/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/Provider.java
rename to rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/Provider.java
diff --git a/general/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/Response.java b/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/Response.java
similarity index 100%
rename from general/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/Response.java
rename to rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/Response.java
diff --git a/general/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/User.java b/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/User.java
similarity index 100%
rename from general/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/User.java
rename to rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/User.java
diff --git a/general/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProvider.java b/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProvider.java
similarity index 100%
rename from general/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProvider.java
rename to rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProvider.java
diff --git a/general/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java b/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java
similarity index 100%
rename from general/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java
rename to rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderAnotherImpl.java
diff --git a/general/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderImpl.java b/rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderImpl.java
similarity index 100%
rename from general/dubbo/java-server/2.6/src/main/java/org/apache/dubbo/UserProviderImpl.java
rename to rpc/dubbo/java-server/2.7/src/main/java/org/apache/dubbo/UserProviderImpl.java
diff --git a/general/dubbo/java-server/2.6/src/main/resources/META-INF/spring/dubbo.provider.xml b/rpc/dubbo/java-server/2.7/src/main/resources/META-INF/spring/dubbo.provider.xml
similarity index 100%
rename from general/dubbo/java-server/2.6/src/main/resources/META-INF/spring/dubbo.provider.xml
rename to rpc/dubbo/java-server/2.7/src/main/resources/META-INF/spring/dubbo.provider.xml
diff --git a/general/jsonrpc/java-server/src/main/assembly/conf/log4j.properties b/rpc/dubbo/java-server/2.7/src/main/resources/log4j.properties
similarity index 100%
rename from general/jsonrpc/java-server/src/main/assembly/conf/log4j.properties
rename to rpc/dubbo/java-server/2.7/src/main/resources/log4j.properties
diff --git a/general/dubbo3/README.md b/rpc/dubbo3/README.md
similarity index 85%
rename from general/dubbo3/README.md
rename to rpc/dubbo3/README.md
index 462fab7..08f6ea5 100644
--- a/general/dubbo3/README.md
+++ b/rpc/dubbo3/README.md
@@ -10,14 +10,14 @@ https://github.com/dubbogo/triple
 ## Triple-go provides capabilities:
 -Intercommunication with Grpc, supporting normal calls and streaming calls
 
-[Example](./pb/dubbogo-grpc/README.md)
+[Example](./api/dubbogo-grpc/README.md)
 
 -Intercommunication with Triple-java, currently the java side supports ordinary calls
 
-[Example](./pb/dubbogo-java/README.md)
+[Example](./api/dubbogo-java/README.md)
 
 
--Support Pb serialization and Hessian serialization. After Hessian serialization, it can be serialized again by nesting the following pb:
+-Support Pb serialization and Hessian serialization. After Hessian serialization, it can be serialized again by nesting the following api:
 https://github.com/dubbogo/triple/blob/master/internal/codec/proto/triple_wrapper.proto
 
 [Example](./hessian2/README.md)
diff --git a/general/dubbo3/README_zh.md b/rpc/dubbo3/README_zh.md
similarity index 77%
rename from general/dubbo3/README_zh.md
rename to rpc/dubbo3/README_zh.md
index 615ba3c..33f8389 100644
--- a/general/dubbo3/README_zh.md
+++ b/rpc/dubbo3/README_zh.md
@@ -10,14 +10,14 @@ https://github.com/dubbogo/triple
 ## Triple-go 提供能力:
 - 与 Grpc 互通,支持普通调用和流式调用
   
-  [例子](./pb/dubbogo-grpc/README_zh.md)
+  [例子](./api/dubbogo-grpc/README_zh.md)
   
 - 与 Triple-java 互通,目前java端支持普通调用
 
-  [例子](./pb/dubbogo-java/README_zh.md)
+  [例子](./api/dubbogo-java/README_zh.md)
   
 
-- 支持 Pb 序列化和 Hessian 序列化,Hessian 序列化后通过嵌套入如下 pb,再次进行序列化:
+- 支持 Pb 序列化和 Hessian 序列化,Hessian 序列化后通过嵌套入如下 api,再次进行序列化:
   https://github.com/dubbogo/triple/blob/master/internal/codec/proto/triple_wrapper.proto
   
   [例子](./hessian2/README_zh.md)
diff --git a/general/dubbo3/codec-extension/go-client/cmd/client.go b/rpc/dubbo3/codec-extension/go-client/cmd/client.go
similarity index 100%
rename from general/dubbo3/codec-extension/go-client/cmd/client.go
rename to rpc/dubbo3/codec-extension/go-client/cmd/client.go
diff --git a/general/dubbo3/codec-extension/go-server/codec/codec.go b/rpc/dubbo3/codec-extension/go-client/codec/codec.go
similarity index 100%
rename from general/dubbo3/codec-extension/go-server/codec/codec.go
rename to rpc/dubbo3/codec-extension/go-client/codec/codec.go
diff --git a/general/dubbo3/codec-extension/go-client/conf/client.yml b/rpc/dubbo3/codec-extension/go-client/conf/client.yml
similarity index 100%
rename from general/dubbo3/codec-extension/go-client/conf/client.yml
rename to rpc/dubbo3/codec-extension/go-client/conf/client.yml
diff --git a/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/conf/log.yml b/rpc/dubbo3/codec-extension/go-client/conf/log.yml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/conf/log.yml
rename to rpc/dubbo3/codec-extension/go-client/conf/log.yml
diff --git a/general/dubbo3/msgpack/go-client/pkg/hello.go b/rpc/dubbo3/codec-extension/go-client/pkg/hello.go
similarity index 100%
rename from general/dubbo3/msgpack/go-client/pkg/hello.go
rename to rpc/dubbo3/codec-extension/go-client/pkg/hello.go
diff --git a/general/dubbo3/codec-extension/go-server/cmd/server.go b/rpc/dubbo3/codec-extension/go-server/cmd/server.go
similarity index 100%
rename from general/dubbo3/codec-extension/go-server/cmd/server.go
rename to rpc/dubbo3/codec-extension/go-server/cmd/server.go
diff --git a/general/dubbo3/codec-extension/go-client/codec/codec.go b/rpc/dubbo3/codec-extension/go-server/codec/codec.go
similarity index 100%
rename from general/dubbo3/codec-extension/go-client/codec/codec.go
rename to rpc/dubbo3/codec-extension/go-server/codec/codec.go
diff --git a/general/dubbo3/codec-extension/go-server/conf/client.yml b/rpc/dubbo3/codec-extension/go-server/conf/client.yml
similarity index 100%
rename from general/dubbo3/codec-extension/go-server/conf/client.yml
rename to rpc/dubbo3/codec-extension/go-server/conf/client.yml
diff --git a/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/conf/log.yml b/rpc/dubbo3/codec-extension/go-server/conf/log.yml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/conf/log.yml
rename to rpc/dubbo3/codec-extension/go-server/conf/log.yml
diff --git a/general/dubbo3/codec-extension/go-server/conf/server.yml b/rpc/dubbo3/codec-extension/go-server/conf/server.yml
similarity index 100%
rename from general/dubbo3/codec-extension/go-server/conf/server.yml
rename to rpc/dubbo3/codec-extension/go-server/conf/server.yml
diff --git a/general/rest/go-client/docker/docker-compose.yml b/rpc/dubbo3/codec-extension/go-server/docker/docker-compose.yml
similarity index 100%
rename from general/rest/go-client/docker/docker-compose.yml
rename to rpc/dubbo3/codec-extension/go-server/docker/docker-compose.yml
diff --git a/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/docker/docker-health-check.sh b/rpc/dubbo3/codec-extension/go-server/docker/docker-health-check.sh
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/docker/docker-health-check.sh
rename to rpc/dubbo3/codec-extension/go-server/docker/docker-health-check.sh
diff --git a/general/dubbo3/codec-extension/go-server/pkg/greeter.go b/rpc/dubbo3/codec-extension/go-server/pkg/greeter.go
similarity index 100%
rename from general/dubbo3/codec-extension/go-server/pkg/greeter.go
rename to rpc/dubbo3/codec-extension/go-server/pkg/greeter.go
diff --git a/general/dubbo3/codec-extension/go-server/tests/integration/codec.go b/rpc/dubbo3/codec-extension/go-server/tests/integration/codec.go
similarity index 100%
rename from general/dubbo3/codec-extension/go-server/tests/integration/codec.go
rename to rpc/dubbo3/codec-extension/go-server/tests/integration/codec.go
diff --git a/general/dubbo3/msgpack/go-server/tests/integration/main_test.go b/rpc/dubbo3/codec-extension/go-server/tests/integration/main_test.go
similarity index 100%
rename from general/dubbo3/msgpack/go-server/tests/integration/main_test.go
rename to rpc/dubbo3/codec-extension/go-server/tests/integration/main_test.go
diff --git a/general/dubbo3/msgpack/go-server/tests/integration/userprovider_test.go b/rpc/dubbo3/codec-extension/go-server/tests/integration/userprovider_test.go
similarity index 100%
rename from general/dubbo3/msgpack/go-server/tests/integration/userprovider_test.go
rename to rpc/dubbo3/codec-extension/go-server/tests/integration/userprovider_test.go
diff --git a/general/dubbo3/hessian2/README.md b/rpc/dubbo3/hessian2/README.md
similarity index 84%
rename from general/dubbo3/hessian2/README.md
rename to rpc/dubbo3/hessian2/README.md
index 45b4169..17a37e5 100644
--- a/general/dubbo3/hessian2/README.md
+++ b/rpc/dubbo3/hessian2/README.md
@@ -1,6 +1,6 @@
 # Triple protocol Hessian2 (Hessian+PB) serialization scheme
 
-Triple-go supports Pb serialization and Hessian serialization. After Hessian serialization, pb serialization is performed again by nesting the following pb:
+Triple-go supports Pb serialization and Hessian serialization. After Hessian serialization, api serialization is performed again by nesting the following api:
 https://github.com/dubbogo/triple/blob/master/internal/codec/proto/triple_wrapper.proto
 
 ## Serialization scheme selection
diff --git a/general/dubbo3/hessian2/README_zh.md b/rpc/dubbo3/hessian2/README_zh.md
similarity index 100%
rename from general/dubbo3/hessian2/README_zh.md
rename to rpc/dubbo3/hessian2/README_zh.md
diff --git a/general/dubbo3/hessian2/go-client/cmd/client.go b/rpc/dubbo3/hessian2/go-client/cmd/client.go
similarity index 100%
rename from general/dubbo3/hessian2/go-client/cmd/client.go
rename to rpc/dubbo3/hessian2/go-client/cmd/client.go
diff --git a/general/dubbo3/hessian2/go-client/conf/client.yml b/rpc/dubbo3/hessian2/go-client/conf/client.yml
similarity index 100%
rename from general/dubbo3/hessian2/go-client/conf/client.yml
rename to rpc/dubbo3/hessian2/go-client/conf/client.yml
diff --git a/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/log.yml b/rpc/dubbo3/hessian2/go-client/conf/log.yml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/log.yml
rename to rpc/dubbo3/hessian2/go-client/conf/log.yml
diff --git a/general/dubbo3/hessian2/go-client/pkg/hello.go b/rpc/dubbo3/hessian2/go-client/pkg/hello.go
similarity index 100%
rename from general/dubbo3/hessian2/go-client/pkg/hello.go
rename to rpc/dubbo3/hessian2/go-client/pkg/hello.go
diff --git a/general/dubbo3/hessian2/go-server/cmd/server.go b/rpc/dubbo3/hessian2/go-server/cmd/server.go
similarity index 100%
rename from general/dubbo3/hessian2/go-server/cmd/server.go
rename to rpc/dubbo3/hessian2/go-server/cmd/server.go
diff --git a/general/dubbo3/hessian2/go-server/conf/client.yml b/rpc/dubbo3/hessian2/go-server/conf/client.yml
similarity index 100%
rename from general/dubbo3/hessian2/go-server/conf/client.yml
rename to rpc/dubbo3/hessian2/go-server/conf/client.yml
diff --git a/general/dubbo3/msgpack/go-server/conf/log.yml b/rpc/dubbo3/hessian2/go-server/conf/log.yml
similarity index 100%
rename from general/dubbo3/msgpack/go-server/conf/log.yml
rename to rpc/dubbo3/hessian2/go-server/conf/log.yml
diff --git a/general/dubbo3/hessian2/go-server/conf/server.yml b/rpc/dubbo3/hessian2/go-server/conf/server.yml
similarity index 100%
rename from general/dubbo3/hessian2/go-server/conf/server.yml
rename to rpc/dubbo3/hessian2/go-server/conf/server.yml
diff --git a/general/dubbo3/pb/dubbogo-java/go-server/docker/docker-compose.yml b/rpc/dubbo3/hessian2/go-server/docker/docker-compose.yml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/go-server/docker/docker-compose.yml
rename to rpc/dubbo3/hessian2/go-server/docker/docker-compose.yml
diff --git a/general/dubbo3/msgpack/go-server/docker/docker-health-check.sh b/rpc/dubbo3/hessian2/go-server/docker/docker-health-check.sh
similarity index 100%
rename from general/dubbo3/msgpack/go-server/docker/docker-health-check.sh
rename to rpc/dubbo3/hessian2/go-server/docker/docker-health-check.sh
diff --git a/general/dubbo3/hessian2/go-server/pkg/greeter.go b/rpc/dubbo3/hessian2/go-server/pkg/greeter.go
similarity index 100%
rename from general/dubbo3/hessian2/go-server/pkg/greeter.go
rename to rpc/dubbo3/hessian2/go-server/pkg/greeter.go
diff --git a/general/dubbo3/hessian2/go-server/tests/integration/main_test.go b/rpc/dubbo3/hessian2/go-server/tests/integration/main_test.go
similarity index 100%
rename from general/dubbo3/hessian2/go-server/tests/integration/main_test.go
rename to rpc/dubbo3/hessian2/go-server/tests/integration/main_test.go
diff --git a/general/dubbo3/hessian2/go-server/tests/integration/userprovider_test.go b/rpc/dubbo3/hessian2/go-server/tests/integration/userprovider_test.go
similarity index 100%
rename from general/dubbo3/hessian2/go-server/tests/integration/userprovider_test.go
rename to rpc/dubbo3/hessian2/go-server/tests/integration/userprovider_test.go
diff --git a/general/dubbo3/hessian2/java-server/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java b/rpc/dubbo3/hessian2/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
similarity index 100%
rename from general/dubbo3/hessian2/java-server/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
rename to rpc/dubbo3/hessian2/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
diff --git a/general/dubbo3/hessian2/java-client/pom.xml b/rpc/dubbo3/hessian2/java-client/pom.xml
similarity index 100%
rename from general/dubbo3/hessian2/java-client/pom.xml
rename to rpc/dubbo3/hessian2/java-client/pom.xml
diff --git a/general/dubbo3/pb/dubbogo-java/java-client/run.sh b/rpc/dubbo3/hessian2/java-client/run.sh
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/java-client/run.sh
rename to rpc/dubbo3/hessian2/java-client/run.sh
diff --git a/general/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java b/rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java
similarity index 100%
rename from general/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java
rename to rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java
diff --git a/general/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java b/rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
similarity index 100%
rename from general/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
rename to rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
diff --git a/general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/User.java b/rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/User.java
similarity index 100%
rename from general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/User.java
rename to rpc/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/User.java
diff --git a/general/dubbo3/pb/dubbogo-java/java-server/src/main/proto/helloworld.proto b/rpc/dubbo3/hessian2/java-client/src/main/proto/helloworld.proto
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/java-server/src/main/proto/helloworld.proto
rename to rpc/dubbo3/hessian2/java-client/src/main/proto/helloworld.proto
diff --git a/general/dubbo3/pb/dubbogo-java/java-server/src/main/resources/log4j.properties b/rpc/dubbo3/hessian2/java-client/src/main/resources/log4j.properties
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/java-server/src/main/resources/log4j.properties
rename to rpc/dubbo3/hessian2/java-client/src/main/resources/log4j.properties
diff --git a/general/dubbo3/hessian2/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java b/rpc/dubbo3/hessian2/java-server/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
similarity index 100%
copy from general/dubbo3/hessian2/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
copy to rpc/dubbo3/hessian2/java-server/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
diff --git a/general/dubbo3/hessian2/java-server/pom.xml b/rpc/dubbo3/hessian2/java-server/pom.xml
similarity index 100%
rename from general/dubbo3/hessian2/java-server/pom.xml
rename to rpc/dubbo3/hessian2/java-server/pom.xml
diff --git a/general/dubbo3/pb/dubbogo-java/java-server/run.sh b/rpc/dubbo3/hessian2/java-server/run.sh
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/java-server/run.sh
rename to rpc/dubbo3/hessian2/java-server/run.sh
diff --git a/general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java b/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java
similarity index 100%
rename from general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java
rename to rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java
diff --git a/general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java b/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
similarity index 100%
rename from general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
rename to rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
diff --git a/general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter1Impl.java b/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter1Impl.java
similarity index 100%
rename from general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter1Impl.java
rename to rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter1Impl.java
diff --git a/general/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/User.java b/rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/User.java
similarity index 100%
rename from general/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/User.java
rename to rpc/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/User.java
diff --git a/general/dubbo3/pb/dubbogo-java/java-client/src/main/proto/helloworld.proto b/rpc/dubbo3/hessian2/java-server/src/main/proto/helloworld.proto
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/java-client/src/main/proto/helloworld.proto
rename to rpc/dubbo3/hessian2/java-server/src/main/proto/helloworld.proto
diff --git a/general/dubbo3/pb/dubbogo-java/java-client/src/main/resources/log4j.properties b/rpc/dubbo3/hessian2/java-server/src/main/resources/log4j.properties
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/java-client/src/main/resources/log4j.properties
rename to rpc/dubbo3/hessian2/java-server/src/main/resources/log4j.properties
diff --git a/general/dubbo3/msgpack/go-client/cmd/client.go b/rpc/dubbo3/msgpack/go-client/cmd/client.go
similarity index 100%
rename from general/dubbo3/msgpack/go-client/cmd/client.go
rename to rpc/dubbo3/msgpack/go-client/cmd/client.go
diff --git a/general/dubbo3/msgpack/go-client/conf/client.yml b/rpc/dubbo3/msgpack/go-client/conf/client.yml
similarity index 100%
rename from general/dubbo3/msgpack/go-client/conf/client.yml
rename to rpc/dubbo3/msgpack/go-client/conf/client.yml
diff --git a/general/dubbo3/msgpack/go-client/conf/log.yml b/rpc/dubbo3/msgpack/go-client/conf/log.yml
similarity index 100%
rename from general/dubbo3/msgpack/go-client/conf/log.yml
rename to rpc/dubbo3/msgpack/go-client/conf/log.yml
diff --git a/general/dubbo3/codec-extension/go-client/pkg/hello.go b/rpc/dubbo3/msgpack/go-client/pkg/hello.go
similarity index 100%
rename from general/dubbo3/codec-extension/go-client/pkg/hello.go
rename to rpc/dubbo3/msgpack/go-client/pkg/hello.go
diff --git a/general/dubbo3/msgpack/go-server/cmd/server.go b/rpc/dubbo3/msgpack/go-server/cmd/server.go
similarity index 100%
rename from general/dubbo3/msgpack/go-server/cmd/server.go
rename to rpc/dubbo3/msgpack/go-server/cmd/server.go
diff --git a/general/dubbo3/msgpack/go-server/conf/client.yml b/rpc/dubbo3/msgpack/go-server/conf/client.yml
similarity index 100%
rename from general/dubbo3/msgpack/go-server/conf/client.yml
rename to rpc/dubbo3/msgpack/go-server/conf/client.yml
diff --git a/general/dubbo3/hessian2/go-server/conf/log.yml b/rpc/dubbo3/msgpack/go-server/conf/log.yml
similarity index 100%
rename from general/dubbo3/hessian2/go-server/conf/log.yml
rename to rpc/dubbo3/msgpack/go-server/conf/log.yml
diff --git a/general/dubbo3/msgpack/go-server/conf/server.yml b/rpc/dubbo3/msgpack/go-server/conf/server.yml
similarity index 100%
rename from general/dubbo3/msgpack/go-server/conf/server.yml
rename to rpc/dubbo3/msgpack/go-server/conf/server.yml
diff --git a/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/docker/docker-compose.yml b/rpc/dubbo3/msgpack/go-server/docker/docker-compose.yml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/docker/docker-compose.yml
rename to rpc/dubbo3/msgpack/go-server/docker/docker-compose.yml
diff --git a/general/dubbo3/hessian2/go-server/docker/docker-health-check.sh b/rpc/dubbo3/msgpack/go-server/docker/docker-health-check.sh
similarity index 100%
rename from general/dubbo3/hessian2/go-server/docker/docker-health-check.sh
rename to rpc/dubbo3/msgpack/go-server/docker/docker-health-check.sh
diff --git a/general/dubbo3/msgpack/go-server/pkg/greeter.go b/rpc/dubbo3/msgpack/go-server/pkg/greeter.go
similarity index 100%
rename from general/dubbo3/msgpack/go-server/pkg/greeter.go
rename to rpc/dubbo3/msgpack/go-server/pkg/greeter.go
diff --git a/general/dubbo3/codec-extension/go-server/tests/integration/main_test.go b/rpc/dubbo3/msgpack/go-server/tests/integration/main_test.go
similarity index 100%
rename from general/dubbo3/codec-extension/go-server/tests/integration/main_test.go
rename to rpc/dubbo3/msgpack/go-server/tests/integration/main_test.go
diff --git a/general/dubbo3/codec-extension/go-server/tests/integration/userprovider_test.go b/rpc/dubbo3/msgpack/go-server/tests/integration/userprovider_test.go
similarity index 100%
rename from general/dubbo3/codec-extension/go-server/tests/integration/userprovider_test.go
rename to rpc/dubbo3/msgpack/go-server/tests/integration/userprovider_test.go
diff --git a/general/dubbo3/pb/dubbogo-grpc/README.md b/rpc/dubbo3/pb/dubbogo-grpc/README.md
similarity index 87%
rename from general/dubbo3/pb/dubbogo-grpc/README.md
rename to rpc/dubbo3/pb/dubbogo-grpc/README.md
index a79d119..3f30b60 100644
--- a/general/dubbo3/pb/dubbogo-grpc/README.md
+++ b/rpc/dubbo3/pb/dubbogo-grpc/README.md
@@ -8,7 +8,7 @@ Any group of client and server can be used interchangeably to implement RPC call
 
 ## Triple service start
 
-### pb generation
+### api generation
 1. First write the proto file
 
 ```protobuf
@@ -44,7 +44,7 @@ message User {
     go get -u dubbo.apache.org/dubbo-go/v3/protocol/dubbo3/protoc-gen-dubbo3@3.0
 ```
 
-4. generate pb file
+4. generate api file
 ```shell
     protoc -I . helloworld.proto --dubbo3_out=plugins=grpc+dubbo:.
 ```
@@ -64,7 +64,7 @@ import (
 )
 
 import (
-    dubbo3 "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3"
+    dubbo3 "github.com/apache/dubbo-go-samples/general/dubbo3/api/dubbogo-grpc/protobuf/dubbo3"
 )
 
 type GreeterProvider struct {
@@ -73,7 +73,7 @@ type GreeterProvider struct {
 }
 
 func NewGreeterProvider() *GreeterProvider {
-    return &GreeterProvider{// Initialize base with the instance in the generated pb
+    return &GreeterProvider{// Initialize base with the instance in the generated api
         GreeterProviderBase: &dubbo3.GreeterProviderBase{},
     }
 }
@@ -132,10 +132,10 @@ services:
     interface: "protobuf.Greeter" # Same as the interface name generated by grpc, as follows
 ```
 
-The interface name of the Grpc pb file can be seen as protobuf.Greeter, which is defined by the user as required.
+The interface name of the Grpc api file can be seen as protobuf.Greeter, which is defined by the user as required.
 In order for triple-go to get through with grpc, it must be the same as the grpc interface name and correctly configured in the yaml file.
 
-protobuf/grpc/helloworld.pb.go:
+protobuf/grpc/helloworld.api.go:
 ```go
 func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*User, error) {
     out := new(User)
@@ -155,10 +155,10 @@ triple/triple-server
 ## Client (take ordinary rpc call as an example, the same for streaming RPC)
 
 1. Consumer end structure definition
-   The Consumer structure has been implemented in the pb file and can be imported directly
+   The Consumer structure has been implemented in the api file and can be imported directly
 ```go
 import (
-    dubbo3pb "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3"
+    dubbo3pb "github.com/apache/dubbo-go-samples/general/dubbo3/api/dubbogo-grpc/protobuf/dubbo3"
 )
 
 // Directly introduce the GreeterClientImpl structure, you can enter the structure, and see the Reference as "greeterImpl"
diff --git a/general/dubbo3/pb/dubbogo-grpc/README_zh.md b/rpc/dubbo3/pb/dubbogo-grpc/README_zh.md
similarity index 90%
rename from general/dubbo3/pb/dubbogo-grpc/README_zh.md
rename to rpc/dubbo3/pb/dubbogo-grpc/README_zh.md
index bb8f130..0d0e946 100644
--- a/general/dubbo3/pb/dubbogo-grpc/README_zh.md
+++ b/rpc/dubbo3/pb/dubbogo-grpc/README_zh.md
@@ -8,7 +8,7 @@
 
 ## Triple 服务启动
 
-### pb 生成
+### api 生成
 1. 首先编写 proto 文件
   
 ```protobuf
@@ -43,7 +43,7 @@ message User {
 ```shell
 go get -u dubbo.apache.org/dubbo-go/v3/protocol/dubbo3/protoc-gen-dubbo3@3.0
 ```
-4. 生成 pb 文件
+4. 生成 api 文件
 ```shell
     protoc -I . helloworld.proto --dubbo3_out=plugins=grpc+dubbo:.
 ```
@@ -63,7 +63,7 @@ import (
 )
 
 import (
-	dubbo3 "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3"
+	dubbo3 "github.com/apache/dubbo-go-samples/general/dubbo3/api/dubbogo-grpc/protobuf/dubbo3"
 )
 
 type GreeterProvider struct {
@@ -132,10 +132,10 @@ services:
     interface: "protobuf.Greeter" # 和grpc生成的的接口名一致,如下
 ```
 
-Grpc pb 文件的接口名可见为 protobuf.Greeter, 是用户根据需要定义的。
+Grpc api 文件的接口名可见为 protobuf.Greeter, 是用户根据需要定义的。
 triple-go 要想和 grpc 打通,一定要和 grpc 的接口名一致,并正确配置在 yaml 文件中。
 
-protobuf/grpc/helloworld.pb.go:
+protobuf/grpc/helloworld.api.go:
 ```go
 func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*User, error) {
 	out := new(User)
@@ -158,7 +158,7 @@ triple/triple-server
 Consumer 结构已经在pb文件中实现好,可直接引入
 ```go
 import (
-    dubbo3pb "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3"
+    dubbo3pb "github.com/apache/dubbo-go-samples/general/dubbo3/api/dubbogo-grpc/protobuf/dubbo3"
 )
 
 // 直接引入GreeterClientImpl 结构,可以进入该结构,查看Reference为“greeterImpl”
diff --git a/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/helloworld.pb.go b/rpc/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/helloworld.pb.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/helloworld.pb.go
rename to rpc/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/helloworld.pb.go
diff --git a/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/helloworld.proto b/rpc/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/helloworld.proto
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/helloworld.proto
rename to rpc/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/helloworld.proto
diff --git a/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/protobuf.mk b/rpc/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/protobuf.mk
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/protobuf.mk
rename to rpc/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/protobuf.mk
diff --git a/general/dubbo3/pb/dubbogo-grpc/protobuf/grpc/helloworld.pb.go b/rpc/dubbo3/pb/dubbogo-grpc/protobuf/grpc/helloworld.pb.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/protobuf/grpc/helloworld.pb.go
rename to rpc/dubbo3/pb/dubbogo-grpc/protobuf/grpc/helloworld.pb.go
diff --git a/general/dubbo3/pb/dubbogo-grpc/protobuf/grpc/helloworld.proto b/rpc/dubbo3/pb/dubbogo-grpc/protobuf/grpc/helloworld.proto
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/protobuf/grpc/helloworld.proto
rename to rpc/dubbo3/pb/dubbogo-grpc/protobuf/grpc/helloworld.proto
diff --git a/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/server.go b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/server.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/server.go
rename to rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/server.go
diff --git a/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/client.yml b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/client.yml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/client.yml
rename to rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/client.yml
diff --git a/general/dubbo3/hessian2/go-client/conf/log.yml b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/log.yml
similarity index 100%
rename from general/dubbo3/hessian2/go-client/conf/log.yml
rename to rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/log.yml
diff --git a/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/server.yml b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/server.yml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/server.yml
rename to rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/server.yml
diff --git a/general/dubbo3/msgpack/go-server/docker/docker-compose.yml b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/docker/docker-compose.yml
similarity index 100%
rename from general/dubbo3/msgpack/go-server/docker/docker-compose.yml
rename to rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/docker/docker-compose.yml
diff --git a/general/dubbo3/codec-extension/go-server/docker/docker-health-check.sh b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/docker/docker-health-check.sh
similarity index 100%
rename from general/dubbo3/codec-extension/go-server/docker/docker-health-check.sh
rename to rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/docker/docker-health-check.sh
diff --git a/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/pkg/greeter.go b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/pkg/greeter.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/pkg/greeter.go
rename to rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/pkg/greeter.go
diff --git a/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/grpc_test_proto/helloworld.pb.go b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/grpc_test_proto/helloworld.pb.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/grpc_test_proto/helloworld.pb.go
rename to rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/grpc_test_proto/helloworld.pb.go
diff --git a/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/main_test.go b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/main_test.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/main_test.go
rename to rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/main_test.go
diff --git a/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/userprovider_test.go b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/userprovider_test.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/userprovider_test.go
rename to rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/tests/integration/userprovider_test.go
diff --git a/general/dubbo3/pb/dubbogo-grpc/server/grpcgo-server/main.go b/rpc/dubbo3/pb/dubbogo-grpc/server/grpcgo-server/main.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/server/grpcgo-server/main.go
rename to rpc/dubbo3/pb/dubbogo-grpc/server/grpcgo-server/main.go
diff --git a/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/cmd/client.go b/rpc/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/cmd/client.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/cmd/client.go
rename to rpc/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/cmd/client.go
diff --git a/helloworld/go-client/cmd/env.sh b/rpc/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/cmd/env.sh
similarity index 100%
rename from helloworld/go-client/cmd/env.sh
rename to rpc/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/cmd/env.sh
diff --git a/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/conf/client.yml b/rpc/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/conf/client.yml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/conf/client.yml
rename to rpc/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/conf/client.yml
diff --git a/general/dubbo3/codec-extension/go-server/conf/log.yml b/rpc/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/conf/log.yml
similarity index 100%
rename from general/dubbo3/codec-extension/go-server/conf/log.yml
rename to rpc/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/conf/log.yml
diff --git a/general/dubbo3/pb/dubbogo-grpc/stream-client/grpcgo-client/main.go b/rpc/dubbo3/pb/dubbogo-grpc/stream-client/grpcgo-client/main.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/stream-client/grpcgo-client/main.go
rename to rpc/dubbo3/pb/dubbogo-grpc/stream-client/grpcgo-client/main.go
diff --git a/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/cmd/client.go b/rpc/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/cmd/client.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/cmd/client.go
rename to rpc/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/cmd/client.go
diff --git a/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/conf/client.yml b/rpc/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/conf/client.yml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/conf/client.yml
rename to rpc/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/conf/client.yml
diff --git a/general/dubbo3/codec-extension/go-client/conf/log.yml b/rpc/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/conf/log.yml
similarity index 100%
rename from general/dubbo3/codec-extension/go-client/conf/log.yml
rename to rpc/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/conf/log.yml
diff --git a/general/dubbo3/pb/dubbogo-grpc/unary-client/grpcgo-client/main.go b/rpc/dubbo3/pb/dubbogo-grpc/unary-client/grpcgo-client/main.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-grpc/unary-client/grpcgo-client/main.go
rename to rpc/dubbo3/pb/dubbogo-grpc/unary-client/grpcgo-client/main.go
diff --git a/general/dubbo3/pb/dubbogo-java/README.md b/rpc/dubbo3/pb/dubbogo-java/README.md
similarity index 71%
rename from general/dubbo3/pb/dubbogo-java/README.md
rename to rpc/dubbo3/pb/dubbogo-java/README.md
index 74ec5d1..1b1ae15 100644
--- a/general/dubbo3/pb/dubbogo-java/README.md
+++ b/rpc/dubbo3/pb/dubbogo-java/README.md
@@ -1,6 +1,6 @@
 # dubbo-java intercommunication
 
-For pb definition and go client and server startup, please refer to [dubbogo-grpc](../dubbogo-grpc/README.md)
+For api definition and go client and server startup, please refer to [dubbogo-grpc](../dubbogo-grpc/README.md)
 
 ## Instructions
 
diff --git a/general/dubbo3/pb/dubbogo-java/README_zh.md b/rpc/dubbo3/pb/dubbogo-java/README_zh.md
similarity index 71%
rename from general/dubbo3/pb/dubbogo-java/README_zh.md
rename to rpc/dubbo3/pb/dubbogo-java/README_zh.md
index d84970d..b3d8f8a 100644
--- a/general/dubbo3/pb/dubbogo-java/README_zh.md
+++ b/rpc/dubbo3/pb/dubbogo-java/README_zh.md
@@ -1,6 +1,6 @@
 # dubbo-java互通
 
-pb 定义以及 go 客户端、服务端启动,可以参考 [dubbogo-grpc](../dubbogo-grpc/README_zh.md)
+api 定义以及 go 客户端、服务端启动,可以参考 [dubbogo-grpc](../dubbogo-grpc/README_zh.md)
 
 ## 使用方法
 
diff --git a/general/dubbo3/pb/dubbogo-java/go-client/cmd/client.go b/rpc/dubbo3/pb/dubbogo-java/go-client/cmd/client.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/go-client/cmd/client.go
rename to rpc/dubbo3/pb/dubbogo-java/go-client/cmd/client.go
diff --git a/general/dubbo3/pb/dubbogo-java/go-client/cmd/env.sh b/rpc/dubbo3/pb/dubbogo-java/go-client/cmd/env.sh
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/go-client/cmd/env.sh
rename to rpc/dubbo3/pb/dubbogo-java/go-client/cmd/env.sh
diff --git a/general/dubbo3/pb/dubbogo-java/go-server/conf/client.yml b/rpc/dubbo3/pb/dubbogo-java/go-client/conf/client.yml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/go-server/conf/client.yml
rename to rpc/dubbo3/pb/dubbogo-java/go-client/conf/client.yml
diff --git a/general/dubbo/go-server/conf/log.yml b/rpc/dubbo3/pb/dubbogo-java/go-client/conf/log.yml
similarity index 100%
rename from general/dubbo/go-server/conf/log.yml
rename to rpc/dubbo3/pb/dubbogo-java/go-client/conf/log.yml
diff --git a/general/dubbo3/pb/dubbogo-java/go-server/cmd/env.sh b/rpc/dubbo3/pb/dubbogo-java/go-server/cmd/env.sh
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/go-server/cmd/env.sh
rename to rpc/dubbo3/pb/dubbogo-java/go-server/cmd/env.sh
diff --git a/general/dubbo3/pb/dubbogo-java/go-server/cmd/server.go b/rpc/dubbo3/pb/dubbogo-java/go-server/cmd/server.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/go-server/cmd/server.go
rename to rpc/dubbo3/pb/dubbogo-java/go-server/cmd/server.go
diff --git a/general/dubbo3/pb/dubbogo-java/go-client/conf/client.yml b/rpc/dubbo3/pb/dubbogo-java/go-server/conf/client.yml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/go-client/conf/client.yml
rename to rpc/dubbo3/pb/dubbogo-java/go-server/conf/client.yml
diff --git a/general/dubbo/go-client/conf/log.yml b/rpc/dubbo3/pb/dubbogo-java/go-server/conf/log.yml
similarity index 100%
rename from general/dubbo/go-client/conf/log.yml
rename to rpc/dubbo3/pb/dubbogo-java/go-server/conf/log.yml
diff --git a/general/dubbo3/pb/dubbogo-java/go-server/conf/server.yml b/rpc/dubbo3/pb/dubbogo-java/go-server/conf/server.yml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/go-server/conf/server.yml
rename to rpc/dubbo3/pb/dubbogo-java/go-server/conf/server.yml
diff --git a/general/dubbo3/hessian2/go-server/docker/docker-compose.yml b/rpc/dubbo3/pb/dubbogo-java/go-server/docker/docker-compose.yml
similarity index 100%
rename from general/dubbo3/hessian2/go-server/docker/docker-compose.yml
rename to rpc/dubbo3/pb/dubbogo-java/go-server/docker/docker-compose.yml
diff --git a/general/dubbo3/pb/dubbogo-java/go-server/pkg/greeter.go b/rpc/dubbo3/pb/dubbogo-java/go-server/pkg/greeter.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/go-server/pkg/greeter.go
rename to rpc/dubbo3/pb/dubbogo-java/go-server/pkg/greeter.go
diff --git a/general/dubbo3/pb/dubbogo-java/go-server/tests/integration/main_test.go b/rpc/dubbo3/pb/dubbogo-java/go-server/tests/integration/main_test.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/go-server/tests/integration/main_test.go
rename to rpc/dubbo3/pb/dubbogo-java/go-server/tests/integration/main_test.go
diff --git a/general/dubbo3/pb/dubbogo-java/go-server/tests/integration/userprovider_test.go b/rpc/dubbo3/pb/dubbogo-java/go-server/tests/integration/userprovider_test.go
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/go-server/tests/integration/userprovider_test.go
rename to rpc/dubbo3/pb/dubbogo-java/go-server/tests/integration/userprovider_test.go
diff --git a/general/dubbo3/hessian2/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java b/rpc/dubbo3/pb/dubbogo-java/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
similarity index 95%
copy from general/dubbo3/hessian2/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
copy to rpc/dubbo3/pb/dubbogo-java/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
index 4df0b78..99758ac 100644
--- a/general/dubbo3/hessian2/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
+++ b/rpc/dubbo3/pb/dubbogo-java/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
@@ -20,10 +20,12 @@ public final class Helloworld {
 
     /**
      * <code>string name = 1;</code>
+     * @return The name.
      */
     java.lang.String getName();
     /**
      * <code>string name = 1;</code>
+     * @return The bytes for name.
      */
     com.google.protobuf.ByteString
         getNameBytes();
@@ -35,7 +37,7 @@ public final class Helloworld {
    *
    * Protobuf type {@code helloworld.HelloRequest}
    */
-  public  static final class HelloRequest extends
+  public static final class HelloRequest extends
       com.google.protobuf.GeneratedMessageV3 implements
       // @@protoc_insertion_point(message_implements:helloworld.HelloRequest)
       HelloRequestOrBuilder {
@@ -49,6 +51,13 @@ public final class Helloworld {
     }
 
     @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new HelloRequest();
+    }
+
+    @java.lang.Override
     public final com.google.protobuf.UnknownFieldSet
     getUnknownFields() {
       return this.unknownFields;
@@ -61,7 +70,6 @@ public final class Helloworld {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -114,7 +122,9 @@ public final class Helloworld {
     private volatile java.lang.Object name_;
     /**
      * <code>string name = 1;</code>
+     * @return The name.
      */
+    @java.lang.Override
     public java.lang.String getName() {
       java.lang.Object ref = name_;
       if (ref instanceof java.lang.String) {
@@ -129,7 +139,9 @@ public final class Helloworld {
     }
     /**
      * <code>string name = 1;</code>
+     * @return The bytes for name.
      */
+    @java.lang.Override
     public com.google.protobuf.ByteString
         getNameBytes() {
       java.lang.Object ref = name_;
@@ -453,6 +465,7 @@ public final class Helloworld {
       private java.lang.Object name_ = "";
       /**
        * <code>string name = 1;</code>
+       * @return The name.
        */
       public java.lang.String getName() {
         java.lang.Object ref = name_;
@@ -468,6 +481,7 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @return The bytes for name.
        */
       public com.google.protobuf.ByteString
           getNameBytes() {
@@ -484,6 +498,8 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
        */
       public Builder setName(
           java.lang.String value) {
@@ -497,6 +513,7 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @return This builder for chaining.
        */
       public Builder clearName() {
         
@@ -506,6 +523,8 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
        */
       public Builder setNameBytes(
           com.google.protobuf.ByteString value) {
@@ -577,26 +596,31 @@ public final class Helloworld {
 
     /**
      * <code>string name = 1;</code>
+     * @return The name.
      */
     java.lang.String getName();
     /**
      * <code>string name = 1;</code>
+     * @return The bytes for name.
      */
     com.google.protobuf.ByteString
         getNameBytes();
 
     /**
      * <code>string id = 2;</code>
+     * @return The id.
      */
     java.lang.String getId();
     /**
      * <code>string id = 2;</code>
+     * @return The bytes for id.
      */
     com.google.protobuf.ByteString
         getIdBytes();
 
     /**
      * <code>int32 age = 3;</code>
+     * @return The age.
      */
     int getAge();
   }
@@ -607,7 +631,7 @@ public final class Helloworld {
    *
    * Protobuf type {@code helloworld.User}
    */
-  public  static final class User extends
+  public static final class User extends
       com.google.protobuf.GeneratedMessageV3 implements
       // @@protoc_insertion_point(message_implements:helloworld.User)
       UserOrBuilder {
@@ -622,6 +646,13 @@ public final class Helloworld {
     }
 
     @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new User();
+    }
+
+    @java.lang.Override
     public final com.google.protobuf.UnknownFieldSet
     getUnknownFields() {
       return this.unknownFields;
@@ -634,7 +665,6 @@ public final class Helloworld {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -698,7 +728,9 @@ public final class Helloworld {
     private volatile java.lang.Object name_;
     /**
      * <code>string name = 1;</code>
+     * @return The name.
      */
+    @java.lang.Override
     public java.lang.String getName() {
       java.lang.Object ref = name_;
       if (ref instanceof java.lang.String) {
@@ -713,7 +745,9 @@ public final class Helloworld {
     }
     /**
      * <code>string name = 1;</code>
+     * @return The bytes for name.
      */
+    @java.lang.Override
     public com.google.protobuf.ByteString
         getNameBytes() {
       java.lang.Object ref = name_;
@@ -732,7 +766,9 @@ public final class Helloworld {
     private volatile java.lang.Object id_;
     /**
      * <code>string id = 2;</code>
+     * @return The id.
      */
+    @java.lang.Override
     public java.lang.String getId() {
       java.lang.Object ref = id_;
       if (ref instanceof java.lang.String) {
@@ -747,7 +783,9 @@ public final class Helloworld {
     }
     /**
      * <code>string id = 2;</code>
+     * @return The bytes for id.
      */
+    @java.lang.Override
     public com.google.protobuf.ByteString
         getIdBytes() {
       java.lang.Object ref = id_;
@@ -766,7 +804,9 @@ public final class Helloworld {
     private int age_;
     /**
      * <code>int32 age = 3;</code>
+     * @return The age.
      */
+    @java.lang.Override
     public int getAge() {
       return age_;
     }
@@ -1114,6 +1154,7 @@ public final class Helloworld {
       private java.lang.Object name_ = "";
       /**
        * <code>string name = 1;</code>
+       * @return The name.
        */
       public java.lang.String getName() {
         java.lang.Object ref = name_;
@@ -1129,6 +1170,7 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @return The bytes for name.
        */
       public com.google.protobuf.ByteString
           getNameBytes() {
@@ -1145,6 +1187,8 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
        */
       public Builder setName(
           java.lang.String value) {
@@ -1158,6 +1202,7 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @return This builder for chaining.
        */
       public Builder clearName() {
         
@@ -1167,6 +1212,8 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
        */
       public Builder setNameBytes(
           com.google.protobuf.ByteString value) {
@@ -1183,6 +1230,7 @@ public final class Helloworld {
       private java.lang.Object id_ = "";
       /**
        * <code>string id = 2;</code>
+       * @return The id.
        */
       public java.lang.String getId() {
         java.lang.Object ref = id_;
@@ -1198,6 +1246,7 @@ public final class Helloworld {
       }
       /**
        * <code>string id = 2;</code>
+       * @return The bytes for id.
        */
       public com.google.protobuf.ByteString
           getIdBytes() {
@@ -1214,6 +1263,8 @@ public final class Helloworld {
       }
       /**
        * <code>string id = 2;</code>
+       * @param value The id to set.
+       * @return This builder for chaining.
        */
       public Builder setId(
           java.lang.String value) {
@@ -1227,6 +1278,7 @@ public final class Helloworld {
       }
       /**
        * <code>string id = 2;</code>
+       * @return This builder for chaining.
        */
       public Builder clearId() {
         
@@ -1236,6 +1288,8 @@ public final class Helloworld {
       }
       /**
        * <code>string id = 2;</code>
+       * @param value The bytes for id to set.
+       * @return This builder for chaining.
        */
       public Builder setIdBytes(
           com.google.protobuf.ByteString value) {
@@ -1252,12 +1306,16 @@ public final class Helloworld {
       private int age_ ;
       /**
        * <code>int32 age = 3;</code>
+       * @return The age.
        */
+      @java.lang.Override
       public int getAge() {
         return age_;
       }
       /**
        * <code>int32 age = 3;</code>
+       * @param value The age to set.
+       * @return This builder for chaining.
        */
       public Builder setAge(int value) {
         
@@ -1267,6 +1325,7 @@ public final class Helloworld {
       }
       /**
        * <code>int32 age = 3;</code>
+       * @return This builder for chaining.
        */
       public Builder clearAge() {
         
@@ -1351,18 +1410,10 @@ public final class Helloworld {
       "(\t\022\n\n\002id\030\002 \001(\t\022\013\n\003age\030\003 \001(\005B\037\n\035org.apach" +
       "e.dubbo.sample.hellob\006proto3"
     };
-    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
-        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
-          public com.google.protobuf.ExtensionRegistry assignDescriptors(
-              com.google.protobuf.Descriptors.FileDescriptor root) {
-            descriptor = root;
-            return null;
-          }
-        };
-    com.google.protobuf.Descriptors.FileDescriptor
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
         new com.google.protobuf.Descriptors.FileDescriptor[] {
-        }, assigner);
+        });
     internal_static_helloworld_HelloRequest_descriptor =
       getDescriptor().getMessageTypes().get(0);
     internal_static_helloworld_HelloRequest_fieldAccessorTable = new
diff --git a/general/dubbo3/pb/dubbogo-java/java-client/pom.xml b/rpc/dubbo3/pb/dubbogo-java/java-client/pom.xml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/java-client/pom.xml
rename to rpc/dubbo3/pb/dubbogo-java/java-client/pom.xml
diff --git a/general/dubbo3/hessian2/java-client/run.sh b/rpc/dubbo3/pb/dubbogo-java/java-client/run.sh
similarity index 100%
rename from general/dubbo3/hessian2/java-client/run.sh
rename to rpc/dubbo3/pb/dubbogo-java/java-client/run.sh
diff --git a/general/dubbo3/pb/dubbogo-java/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java b/rpc/dubbo3/pb/dubbogo-java/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java
rename to rpc/dubbo3/pb/dubbogo-java/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java
diff --git a/general/dubbo3/pb/dubbogo-java/java-client/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java b/rpc/dubbo3/pb/dubbogo-java/java-client/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/java-client/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
rename to rpc/dubbo3/pb/dubbogo-java/java-client/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
diff --git a/general/dubbo3/hessian2/java-server/src/main/proto/helloworld.proto b/rpc/dubbo3/pb/dubbogo-java/java-client/src/main/proto/helloworld.proto
similarity index 100%
rename from general/dubbo3/hessian2/java-server/src/main/proto/helloworld.proto
rename to rpc/dubbo3/pb/dubbogo-java/java-client/src/main/proto/helloworld.proto
diff --git a/general/dubbo3/hessian2/java-server/src/main/resources/log4j.properties b/rpc/dubbo3/pb/dubbogo-java/java-client/src/main/resources/log4j.properties
similarity index 100%
rename from general/dubbo3/hessian2/java-server/src/main/resources/log4j.properties
rename to rpc/dubbo3/pb/dubbogo-java/java-client/src/main/resources/log4j.properties
diff --git a/general/dubbo3/hessian2/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java b/rpc/dubbo3/pb/dubbogo-java/java-server/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
similarity index 95%
rename from general/dubbo3/hessian2/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
rename to rpc/dubbo3/pb/dubbogo-java/java-server/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
index 4df0b78..99758ac 100644
--- a/general/dubbo3/hessian2/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
+++ b/rpc/dubbo3/pb/dubbogo-java/java-server/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
@@ -20,10 +20,12 @@ public final class Helloworld {
 
     /**
      * <code>string name = 1;</code>
+     * @return The name.
      */
     java.lang.String getName();
     /**
      * <code>string name = 1;</code>
+     * @return The bytes for name.
      */
     com.google.protobuf.ByteString
         getNameBytes();
@@ -35,7 +37,7 @@ public final class Helloworld {
    *
    * Protobuf type {@code helloworld.HelloRequest}
    */
-  public  static final class HelloRequest extends
+  public static final class HelloRequest extends
       com.google.protobuf.GeneratedMessageV3 implements
       // @@protoc_insertion_point(message_implements:helloworld.HelloRequest)
       HelloRequestOrBuilder {
@@ -49,6 +51,13 @@ public final class Helloworld {
     }
 
     @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new HelloRequest();
+    }
+
+    @java.lang.Override
     public final com.google.protobuf.UnknownFieldSet
     getUnknownFields() {
       return this.unknownFields;
@@ -61,7 +70,6 @@ public final class Helloworld {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -114,7 +122,9 @@ public final class Helloworld {
     private volatile java.lang.Object name_;
     /**
      * <code>string name = 1;</code>
+     * @return The name.
      */
+    @java.lang.Override
     public java.lang.String getName() {
       java.lang.Object ref = name_;
       if (ref instanceof java.lang.String) {
@@ -129,7 +139,9 @@ public final class Helloworld {
     }
     /**
      * <code>string name = 1;</code>
+     * @return The bytes for name.
      */
+    @java.lang.Override
     public com.google.protobuf.ByteString
         getNameBytes() {
       java.lang.Object ref = name_;
@@ -453,6 +465,7 @@ public final class Helloworld {
       private java.lang.Object name_ = "";
       /**
        * <code>string name = 1;</code>
+       * @return The name.
        */
       public java.lang.String getName() {
         java.lang.Object ref = name_;
@@ -468,6 +481,7 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @return The bytes for name.
        */
       public com.google.protobuf.ByteString
           getNameBytes() {
@@ -484,6 +498,8 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
        */
       public Builder setName(
           java.lang.String value) {
@@ -497,6 +513,7 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @return This builder for chaining.
        */
       public Builder clearName() {
         
@@ -506,6 +523,8 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
        */
       public Builder setNameBytes(
           com.google.protobuf.ByteString value) {
@@ -577,26 +596,31 @@ public final class Helloworld {
 
     /**
      * <code>string name = 1;</code>
+     * @return The name.
      */
     java.lang.String getName();
     /**
      * <code>string name = 1;</code>
+     * @return The bytes for name.
      */
     com.google.protobuf.ByteString
         getNameBytes();
 
     /**
      * <code>string id = 2;</code>
+     * @return The id.
      */
     java.lang.String getId();
     /**
      * <code>string id = 2;</code>
+     * @return The bytes for id.
      */
     com.google.protobuf.ByteString
         getIdBytes();
 
     /**
      * <code>int32 age = 3;</code>
+     * @return The age.
      */
     int getAge();
   }
@@ -607,7 +631,7 @@ public final class Helloworld {
    *
    * Protobuf type {@code helloworld.User}
    */
-  public  static final class User extends
+  public static final class User extends
       com.google.protobuf.GeneratedMessageV3 implements
       // @@protoc_insertion_point(message_implements:helloworld.User)
       UserOrBuilder {
@@ -622,6 +646,13 @@ public final class Helloworld {
     }
 
     @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new User();
+    }
+
+    @java.lang.Override
     public final com.google.protobuf.UnknownFieldSet
     getUnknownFields() {
       return this.unknownFields;
@@ -634,7 +665,6 @@ public final class Helloworld {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -698,7 +728,9 @@ public final class Helloworld {
     private volatile java.lang.Object name_;
     /**
      * <code>string name = 1;</code>
+     * @return The name.
      */
+    @java.lang.Override
     public java.lang.String getName() {
       java.lang.Object ref = name_;
       if (ref instanceof java.lang.String) {
@@ -713,7 +745,9 @@ public final class Helloworld {
     }
     /**
      * <code>string name = 1;</code>
+     * @return The bytes for name.
      */
+    @java.lang.Override
     public com.google.protobuf.ByteString
         getNameBytes() {
       java.lang.Object ref = name_;
@@ -732,7 +766,9 @@ public final class Helloworld {
     private volatile java.lang.Object id_;
     /**
      * <code>string id = 2;</code>
+     * @return The id.
      */
+    @java.lang.Override
     public java.lang.String getId() {
       java.lang.Object ref = id_;
       if (ref instanceof java.lang.String) {
@@ -747,7 +783,9 @@ public final class Helloworld {
     }
     /**
      * <code>string id = 2;</code>
+     * @return The bytes for id.
      */
+    @java.lang.Override
     public com.google.protobuf.ByteString
         getIdBytes() {
       java.lang.Object ref = id_;
@@ -766,7 +804,9 @@ public final class Helloworld {
     private int age_;
     /**
      * <code>int32 age = 3;</code>
+     * @return The age.
      */
+    @java.lang.Override
     public int getAge() {
       return age_;
     }
@@ -1114,6 +1154,7 @@ public final class Helloworld {
       private java.lang.Object name_ = "";
       /**
        * <code>string name = 1;</code>
+       * @return The name.
        */
       public java.lang.String getName() {
         java.lang.Object ref = name_;
@@ -1129,6 +1170,7 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @return The bytes for name.
        */
       public com.google.protobuf.ByteString
           getNameBytes() {
@@ -1145,6 +1187,8 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
        */
       public Builder setName(
           java.lang.String value) {
@@ -1158,6 +1202,7 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @return This builder for chaining.
        */
       public Builder clearName() {
         
@@ -1167,6 +1212,8 @@ public final class Helloworld {
       }
       /**
        * <code>string name = 1;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
        */
       public Builder setNameBytes(
           com.google.protobuf.ByteString value) {
@@ -1183,6 +1230,7 @@ public final class Helloworld {
       private java.lang.Object id_ = "";
       /**
        * <code>string id = 2;</code>
+       * @return The id.
        */
       public java.lang.String getId() {
         java.lang.Object ref = id_;
@@ -1198,6 +1246,7 @@ public final class Helloworld {
       }
       /**
        * <code>string id = 2;</code>
+       * @return The bytes for id.
        */
       public com.google.protobuf.ByteString
           getIdBytes() {
@@ -1214,6 +1263,8 @@ public final class Helloworld {
       }
       /**
        * <code>string id = 2;</code>
+       * @param value The id to set.
+       * @return This builder for chaining.
        */
       public Builder setId(
           java.lang.String value) {
@@ -1227,6 +1278,7 @@ public final class Helloworld {
       }
       /**
        * <code>string id = 2;</code>
+       * @return This builder for chaining.
        */
       public Builder clearId() {
         
@@ -1236,6 +1288,8 @@ public final class Helloworld {
       }
       /**
        * <code>string id = 2;</code>
+       * @param value The bytes for id to set.
+       * @return This builder for chaining.
        */
       public Builder setIdBytes(
           com.google.protobuf.ByteString value) {
@@ -1252,12 +1306,16 @@ public final class Helloworld {
       private int age_ ;
       /**
        * <code>int32 age = 3;</code>
+       * @return The age.
        */
+      @java.lang.Override
       public int getAge() {
         return age_;
       }
       /**
        * <code>int32 age = 3;</code>
+       * @param value The age to set.
+       * @return This builder for chaining.
        */
       public Builder setAge(int value) {
         
@@ -1267,6 +1325,7 @@ public final class Helloworld {
       }
       /**
        * <code>int32 age = 3;</code>
+       * @return This builder for chaining.
        */
       public Builder clearAge() {
         
@@ -1351,18 +1410,10 @@ public final class Helloworld {
       "(\t\022\n\n\002id\030\002 \001(\t\022\013\n\003age\030\003 \001(\005B\037\n\035org.apach" +
       "e.dubbo.sample.hellob\006proto3"
     };
-    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
-        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
-          public com.google.protobuf.ExtensionRegistry assignDescriptors(
-              com.google.protobuf.Descriptors.FileDescriptor root) {
-            descriptor = root;
-            return null;
-          }
-        };
-    com.google.protobuf.Descriptors.FileDescriptor
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
         new com.google.protobuf.Descriptors.FileDescriptor[] {
-        }, assigner);
+        });
     internal_static_helloworld_HelloRequest_descriptor =
       getDescriptor().getMessageTypes().get(0);
     internal_static_helloworld_HelloRequest_fieldAccessorTable = new
diff --git a/general/dubbo3/pb/dubbogo-java/java-server/pom.xml b/rpc/dubbo3/pb/dubbogo-java/java-server/pom.xml
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/java-server/pom.xml
rename to rpc/dubbo3/pb/dubbogo-java/java-server/pom.xml
diff --git a/general/dubbo3/hessian2/java-server/run.sh b/rpc/dubbo3/pb/dubbogo-java/java-server/run.sh
similarity index 100%
rename from general/dubbo3/hessian2/java-server/run.sh
rename to rpc/dubbo3/pb/dubbogo-java/java-server/run.sh
diff --git a/general/dubbo3/pb/dubbogo-java/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java b/rpc/dubbo3/pb/dubbogo-java/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java
rename to rpc/dubbo3/pb/dubbogo-java/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java
diff --git a/general/dubbo3/pb/dubbogo-java/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java b/rpc/dubbo3/pb/dubbogo-java/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
rename to rpc/dubbo3/pb/dubbogo-java/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
diff --git a/general/dubbo3/pb/dubbogo-java/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter1Impl.java b/rpc/dubbo3/pb/dubbogo-java/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter1Impl.java
similarity index 100%
rename from general/dubbo3/pb/dubbogo-java/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter1Impl.java
rename to rpc/dubbo3/pb/dubbogo-java/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter1Impl.java
diff --git a/general/dubbo3/hessian2/java-client/src/main/proto/helloworld.proto b/rpc/dubbo3/pb/dubbogo-java/java-server/src/main/proto/helloworld.proto
similarity index 100%
rename from general/dubbo3/hessian2/java-client/src/main/proto/helloworld.proto
rename to rpc/dubbo3/pb/dubbogo-java/java-server/src/main/proto/helloworld.proto
diff --git a/general/dubbo3/hessian2/java-client/src/main/resources/log4j.properties b/rpc/dubbo3/pb/dubbogo-java/java-server/src/main/resources/log4j.properties
similarity index 100%
rename from general/dubbo3/hessian2/java-client/src/main/resources/log4j.properties
rename to rpc/dubbo3/pb/dubbogo-java/java-server/src/main/resources/log4j.properties
diff --git a/helloworld/protobuf/helloworld.pb.go b/rpc/dubbo3/pb/dubbogo-java/protobuf/helloworld.pb.go
similarity index 100%
rename from helloworld/protobuf/helloworld.pb.go
rename to rpc/dubbo3/pb/dubbogo-java/protobuf/helloworld.pb.go
diff --git a/helloworld/protobuf/helloworld.proto b/rpc/dubbo3/pb/dubbogo-java/protobuf/helloworld.proto
similarity index 100%
rename from helloworld/protobuf/helloworld.proto
rename to rpc/dubbo3/pb/dubbogo-java/protobuf/helloworld.proto
diff --git a/helloworld/protobuf/protobuf.mk b/rpc/dubbo3/pb/dubbogo-java/protobuf/protobuf.mk
similarity index 100%
rename from helloworld/protobuf/protobuf.mk
rename to rpc/dubbo3/pb/dubbogo-java/protobuf/protobuf.mk
diff --git a/general/grpc/go-client/cmd/client.go b/rpc/grpc/go-client/cmd/client.go
similarity index 100%
rename from general/grpc/go-client/cmd/client.go
rename to rpc/grpc/go-client/cmd/client.go
diff --git a/general/grpc/go-client/conf/client.yml b/rpc/grpc/go-client/conf/client.yml
similarity index 100%
rename from general/grpc/go-client/conf/client.yml
rename to rpc/grpc/go-client/conf/client.yml
diff --git a/general/grpc/go-client/conf/log.yml b/rpc/grpc/go-client/conf/log.yml
similarity index 100%
rename from general/grpc/go-client/conf/log.yml
rename to rpc/grpc/go-client/conf/log.yml
diff --git a/general/grpc/go-server/cmd/server.go b/rpc/grpc/go-server/cmd/server.go
similarity index 100%
rename from general/grpc/go-server/cmd/server.go
rename to rpc/grpc/go-server/cmd/server.go
diff --git a/general/grpc/go-server/conf/client.yml b/rpc/grpc/go-server/conf/client.yml
similarity index 100%
rename from general/grpc/go-server/conf/client.yml
rename to rpc/grpc/go-server/conf/client.yml
diff --git a/general/grpc/go-server/conf/log.yml b/rpc/grpc/go-server/conf/log.yml
similarity index 100%
rename from general/grpc/go-server/conf/log.yml
rename to rpc/grpc/go-server/conf/log.yml
diff --git a/general/grpc/go-server/conf/server.yml b/rpc/grpc/go-server/conf/server.yml
similarity index 100%
rename from general/grpc/go-server/conf/server.yml
rename to rpc/grpc/go-server/conf/server.yml
diff --git a/general/grpc/go-server/docker/docker-compose.yml b/rpc/grpc/go-server/docker/docker-compose.yml
similarity index 100%
rename from general/grpc/go-server/docker/docker-compose.yml
rename to rpc/grpc/go-server/docker/docker-compose.yml
diff --git a/general/dubbo/go-server/docker/docker-health-check.sh b/rpc/grpc/go-server/docker/docker-health-check.sh
similarity index 100%
rename from general/dubbo/go-server/docker/docker-health-check.sh
rename to rpc/grpc/go-server/docker/docker-health-check.sh
diff --git a/general/grpc/go-server/pkg/greeter.go b/rpc/grpc/go-server/pkg/greeter.go
similarity index 100%
rename from general/grpc/go-server/pkg/greeter.go
rename to rpc/grpc/go-server/pkg/greeter.go
diff --git a/general/grpc/go-server/tests/integration/greeter_test.go b/rpc/grpc/go-server/tests/integration/greeter_test.go
similarity index 100%
rename from general/grpc/go-server/tests/integration/greeter_test.go
rename to rpc/grpc/go-server/tests/integration/greeter_test.go
diff --git a/general/grpc/go-server/tests/integration/main_test.go b/rpc/grpc/go-server/tests/integration/main_test.go
similarity index 100%
rename from general/grpc/go-server/tests/integration/main_test.go
rename to rpc/grpc/go-server/tests/integration/main_test.go
diff --git a/general/grpc/protobuf/helloworld.pb.go b/rpc/grpc/protobuf/helloworld.pb.go
similarity index 100%
rename from general/grpc/protobuf/helloworld.pb.go
rename to rpc/grpc/protobuf/helloworld.pb.go
diff --git a/general/grpc/protobuf/helloworld.proto b/rpc/grpc/protobuf/helloworld.proto
similarity index 100%
rename from general/grpc/protobuf/helloworld.proto
rename to rpc/grpc/protobuf/helloworld.proto
diff --git a/general/grpc/protobuf/protobuf.mk b/rpc/grpc/protobuf/protobuf.mk
similarity index 100%
rename from general/grpc/protobuf/protobuf.mk
rename to rpc/grpc/protobuf/protobuf.mk
diff --git a/general/grpc/stream/go-client/app/Makefile b/rpc/grpc/stream/go-client/app/Makefile
similarity index 100%
rename from general/grpc/stream/go-client/app/Makefile
rename to rpc/grpc/stream/go-client/app/Makefile
diff --git a/general/grpc/stream/go-client/app/client.go b/rpc/grpc/stream/go-client/app/client.go
similarity index 100%
rename from general/grpc/stream/go-client/app/client.go
rename to rpc/grpc/stream/go-client/app/client.go
diff --git a/general/grpc/stream/go-server/app/helloworld.pb.go b/rpc/grpc/stream/go-client/app/helloworld.pb.go
similarity index 100%
rename from general/grpc/stream/go-server/app/helloworld.pb.go
rename to rpc/grpc/stream/go-client/app/helloworld.pb.go
diff --git a/general/grpc/stream/go-server/app/helloworld.proto b/rpc/grpc/stream/go-client/app/helloworld.proto
similarity index 100%
rename from general/grpc/stream/go-server/app/helloworld.proto
rename to rpc/grpc/stream/go-client/app/helloworld.proto
diff --git a/general/rest/go-server/cmd/version.go b/rpc/grpc/stream/go-client/app/version.go
similarity index 100%
rename from general/rest/go-server/cmd/version.go
rename to rpc/grpc/stream/go-client/app/version.go
diff --git a/general/grpc/stream/go-client/assembly/bin/load.sh b/rpc/grpc/stream/go-client/assembly/bin/load.sh
similarity index 100%
rename from general/grpc/stream/go-client/assembly/bin/load.sh
rename to rpc/grpc/stream/go-client/assembly/bin/load.sh
diff --git a/general/grpc/stream/go-client/assembly/common/app.properties b/rpc/grpc/stream/go-client/assembly/common/app.properties
similarity index 100%
rename from general/grpc/stream/go-client/assembly/common/app.properties
rename to rpc/grpc/stream/go-client/assembly/common/app.properties
diff --git a/general/grpc/stream/go-client/assembly/common/build.sh b/rpc/grpc/stream/go-client/assembly/common/build.sh
similarity index 100%
rename from general/grpc/stream/go-client/assembly/common/build.sh
rename to rpc/grpc/stream/go-client/assembly/common/build.sh
diff --git a/general/grpc/stream/go-client/assembly/linux/dev.sh b/rpc/grpc/stream/go-client/assembly/linux/dev.sh
similarity index 100%
rename from general/grpc/stream/go-client/assembly/linux/dev.sh
rename to rpc/grpc/stream/go-client/assembly/linux/dev.sh
diff --git a/general/grpc/stream/go-client/assembly/linux/release.sh b/rpc/grpc/stream/go-client/assembly/linux/release.sh
similarity index 100%
rename from general/grpc/stream/go-client/assembly/linux/release.sh
rename to rpc/grpc/stream/go-client/assembly/linux/release.sh
diff --git a/general/grpc/stream/go-client/assembly/linux/test.sh b/rpc/grpc/stream/go-client/assembly/linux/test.sh
similarity index 100%
rename from general/grpc/stream/go-client/assembly/linux/test.sh
rename to rpc/grpc/stream/go-client/assembly/linux/test.sh
diff --git a/general/grpc/stream/go-client/assembly/mac/dev.sh b/rpc/grpc/stream/go-client/assembly/mac/dev.sh
similarity index 100%
rename from general/grpc/stream/go-client/assembly/mac/dev.sh
rename to rpc/grpc/stream/go-client/assembly/mac/dev.sh
diff --git a/general/grpc/stream/go-client/assembly/mac/release.sh b/rpc/grpc/stream/go-client/assembly/mac/release.sh
similarity index 100%
rename from general/grpc/stream/go-client/assembly/mac/release.sh
rename to rpc/grpc/stream/go-client/assembly/mac/release.sh
diff --git a/general/grpc/stream/go-client/assembly/mac/test.sh b/rpc/grpc/stream/go-client/assembly/mac/test.sh
similarity index 100%
rename from general/grpc/stream/go-client/assembly/mac/test.sh
rename to rpc/grpc/stream/go-client/assembly/mac/test.sh
diff --git a/general/grpc/stream/go-client/assembly/windows/dev.sh b/rpc/grpc/stream/go-client/assembly/windows/dev.sh
similarity index 100%
rename from general/grpc/stream/go-client/assembly/windows/dev.sh
rename to rpc/grpc/stream/go-client/assembly/windows/dev.sh
diff --git a/general/grpc/stream/go-client/assembly/windows/release.sh b/rpc/grpc/stream/go-client/assembly/windows/release.sh
similarity index 100%
rename from general/grpc/stream/go-client/assembly/windows/release.sh
rename to rpc/grpc/stream/go-client/assembly/windows/release.sh
diff --git a/general/grpc/stream/go-client/assembly/windows/test.sh b/rpc/grpc/stream/go-client/assembly/windows/test.sh
similarity index 100%
rename from general/grpc/stream/go-client/assembly/windows/test.sh
rename to rpc/grpc/stream/go-client/assembly/windows/test.sh
diff --git a/general/grpc/stream/go-client/profiles/dev/client.yml b/rpc/grpc/stream/go-client/profiles/dev/client.yml
similarity index 100%
rename from general/grpc/stream/go-client/profiles/dev/client.yml
rename to rpc/grpc/stream/go-client/profiles/dev/client.yml
diff --git a/general/jsonrpc/go-server/conf/log.yml b/rpc/grpc/stream/go-client/profiles/dev/log.yml
similarity index 100%
rename from general/jsonrpc/go-server/conf/log.yml
rename to rpc/grpc/stream/go-client/profiles/dev/log.yml
diff --git a/general/grpc/stream/go-server/profiles/release/log.yml b/rpc/grpc/stream/go-client/profiles/release/log.yml
similarity index 100%
rename from general/grpc/stream/go-server/profiles/release/log.yml
rename to rpc/grpc/stream/go-client/profiles/release/log.yml
diff --git a/general/grpc/stream/go-client/profiles/test/client.yml b/rpc/grpc/stream/go-client/profiles/test/client.yml
similarity index 100%
rename from general/grpc/stream/go-client/profiles/test/client.yml
rename to rpc/grpc/stream/go-client/profiles/test/client.yml
diff --git a/general/grpc/stream/go-server/profiles/test/log.yml b/rpc/grpc/stream/go-client/profiles/test/log.yml
similarity index 100%
rename from general/grpc/stream/go-server/profiles/test/log.yml
rename to rpc/grpc/stream/go-client/profiles/test/log.yml
diff --git a/general/grpc/stream/go-server/app/greeter.go b/rpc/grpc/stream/go-server/app/greeter.go
similarity index 100%
rename from general/grpc/stream/go-server/app/greeter.go
rename to rpc/grpc/stream/go-server/app/greeter.go
diff --git a/general/grpc/stream/go-client/app/helloworld.pb.go b/rpc/grpc/stream/go-server/app/helloworld.pb.go
similarity index 100%
rename from general/grpc/stream/go-client/app/helloworld.pb.go
rename to rpc/grpc/stream/go-server/app/helloworld.pb.go
diff --git a/general/grpc/stream/go-client/app/helloworld.proto b/rpc/grpc/stream/go-server/app/helloworld.proto
similarity index 100%
rename from general/grpc/stream/go-client/app/helloworld.proto
rename to rpc/grpc/stream/go-server/app/helloworld.proto
diff --git a/general/grpc/stream/go-server/app/server.go b/rpc/grpc/stream/go-server/app/server.go
similarity index 100%
rename from general/grpc/stream/go-server/app/server.go
rename to rpc/grpc/stream/go-server/app/server.go
diff --git a/general/rest/go-client/cmd/version.go b/rpc/grpc/stream/go-server/app/version.go
similarity index 100%
rename from general/rest/go-client/cmd/version.go
rename to rpc/grpc/stream/go-server/app/version.go
diff --git a/general/grpc/stream/go-server/assembly/bin/load.sh b/rpc/grpc/stream/go-server/assembly/bin/load.sh
similarity index 100%
rename from general/grpc/stream/go-server/assembly/bin/load.sh
rename to rpc/grpc/stream/go-server/assembly/bin/load.sh
diff --git a/general/grpc/stream/go-server/assembly/common/app.properties b/rpc/grpc/stream/go-server/assembly/common/app.properties
similarity index 100%
rename from general/grpc/stream/go-server/assembly/common/app.properties
rename to rpc/grpc/stream/go-server/assembly/common/app.properties
diff --git a/general/grpc/stream/go-server/assembly/common/build.sh b/rpc/grpc/stream/go-server/assembly/common/build.sh
similarity index 100%
rename from general/grpc/stream/go-server/assembly/common/build.sh
rename to rpc/grpc/stream/go-server/assembly/common/build.sh
diff --git a/general/grpc/stream/go-server/assembly/linux/dev.sh b/rpc/grpc/stream/go-server/assembly/linux/dev.sh
similarity index 100%
rename from general/grpc/stream/go-server/assembly/linux/dev.sh
rename to rpc/grpc/stream/go-server/assembly/linux/dev.sh
diff --git a/general/grpc/stream/go-server/assembly/linux/release.sh b/rpc/grpc/stream/go-server/assembly/linux/release.sh
similarity index 100%
rename from general/grpc/stream/go-server/assembly/linux/release.sh
rename to rpc/grpc/stream/go-server/assembly/linux/release.sh
diff --git a/general/grpc/stream/go-server/assembly/linux/test.sh b/rpc/grpc/stream/go-server/assembly/linux/test.sh
similarity index 100%
rename from general/grpc/stream/go-server/assembly/linux/test.sh
rename to rpc/grpc/stream/go-server/assembly/linux/test.sh
diff --git a/general/grpc/stream/go-server/assembly/mac/dev.sh b/rpc/grpc/stream/go-server/assembly/mac/dev.sh
similarity index 100%
rename from general/grpc/stream/go-server/assembly/mac/dev.sh
rename to rpc/grpc/stream/go-server/assembly/mac/dev.sh
diff --git a/general/grpc/stream/go-server/assembly/mac/release.sh b/rpc/grpc/stream/go-server/assembly/mac/release.sh
similarity index 100%
rename from general/grpc/stream/go-server/assembly/mac/release.sh
rename to rpc/grpc/stream/go-server/assembly/mac/release.sh
diff --git a/general/grpc/stream/go-server/assembly/mac/test.sh b/rpc/grpc/stream/go-server/assembly/mac/test.sh
similarity index 100%
rename from general/grpc/stream/go-server/assembly/mac/test.sh
rename to rpc/grpc/stream/go-server/assembly/mac/test.sh
diff --git a/general/grpc/stream/go-server/assembly/windows/dev.sh b/rpc/grpc/stream/go-server/assembly/windows/dev.sh
similarity index 100%
rename from general/grpc/stream/go-server/assembly/windows/dev.sh
rename to rpc/grpc/stream/go-server/assembly/windows/dev.sh
diff --git a/general/grpc/stream/go-server/assembly/windows/release.sh b/rpc/grpc/stream/go-server/assembly/windows/release.sh
similarity index 100%
rename from general/grpc/stream/go-server/assembly/windows/release.sh
rename to rpc/grpc/stream/go-server/assembly/windows/release.sh
diff --git a/general/grpc/stream/go-server/assembly/windows/test.sh b/rpc/grpc/stream/go-server/assembly/windows/test.sh
similarity index 100%
rename from general/grpc/stream/go-server/assembly/windows/test.sh
rename to rpc/grpc/stream/go-server/assembly/windows/test.sh
diff --git a/general/jsonrpc/go-client/conf/log.yml b/rpc/grpc/stream/go-server/profiles/dev/log.yml
similarity index 100%
rename from general/jsonrpc/go-client/conf/log.yml
rename to rpc/grpc/stream/go-server/profiles/dev/log.yml
diff --git a/general/grpc/stream/go-server/profiles/dev/server.yml b/rpc/grpc/stream/go-server/profiles/dev/server.yml
similarity index 100%
rename from general/grpc/stream/go-server/profiles/dev/server.yml
rename to rpc/grpc/stream/go-server/profiles/dev/server.yml
diff --git a/general/grpc/stream/go-client/profiles/release/log.yml b/rpc/grpc/stream/go-server/profiles/release/log.yml
similarity index 100%
rename from general/grpc/stream/go-client/profiles/release/log.yml
rename to rpc/grpc/stream/go-server/profiles/release/log.yml
diff --git a/general/grpc/stream/go-server/profiles/release/server.yml b/rpc/grpc/stream/go-server/profiles/release/server.yml
similarity index 100%
rename from general/grpc/stream/go-server/profiles/release/server.yml
rename to rpc/grpc/stream/go-server/profiles/release/server.yml
diff --git a/general/grpc/stream/go-client/profiles/test/log.yml b/rpc/grpc/stream/go-server/profiles/test/log.yml
similarity index 100%
rename from general/grpc/stream/go-client/profiles/test/log.yml
rename to rpc/grpc/stream/go-server/profiles/test/log.yml
diff --git a/general/grpc/stream/go-server/profiles/test/server.yml b/rpc/grpc/stream/go-server/profiles/test/server.yml
similarity index 100%
rename from general/grpc/stream/go-server/profiles/test/server.yml
rename to rpc/grpc/stream/go-server/profiles/test/server.yml
diff --git a/general/jsonrpc/go-client/cmd/client.go b/rpc/jsonrpc/go-client/cmd/client.go
similarity index 100%
rename from general/jsonrpc/go-client/cmd/client.go
rename to rpc/jsonrpc/go-client/cmd/client.go
diff --git a/general/jsonrpc/go-client/conf/client.yml b/rpc/jsonrpc/go-client/conf/client.yml
similarity index 100%
rename from general/jsonrpc/go-client/conf/client.yml
rename to rpc/jsonrpc/go-client/conf/client.yml
diff --git a/general/grpc/stream/go-server/profiles/dev/log.yml b/rpc/jsonrpc/go-client/conf/log.yml
similarity index 100%
rename from general/grpc/stream/go-server/profiles/dev/log.yml
rename to rpc/jsonrpc/go-client/conf/log.yml
diff --git a/general/jsonrpc/go-client/pkg/user.go b/rpc/jsonrpc/go-client/pkg/user.go
similarity index 100%
rename from general/jsonrpc/go-client/pkg/user.go
rename to rpc/jsonrpc/go-client/pkg/user.go
diff --git a/general/jsonrpc/go-server/cmd/server.go b/rpc/jsonrpc/go-server/cmd/server.go
similarity index 100%
rename from general/jsonrpc/go-server/cmd/server.go
rename to rpc/jsonrpc/go-server/cmd/server.go
diff --git a/general/grpc/stream/go-client/profiles/dev/log.yml b/rpc/jsonrpc/go-server/conf/log.yml
similarity index 100%
rename from general/grpc/stream/go-client/profiles/dev/log.yml
rename to rpc/jsonrpc/go-server/conf/log.yml
diff --git a/general/jsonrpc/go-server/conf/server.yml b/rpc/jsonrpc/go-server/conf/server.yml
similarity index 100%
rename from general/jsonrpc/go-server/conf/server.yml
rename to rpc/jsonrpc/go-server/conf/server.yml
diff --git a/general/jsonrpc/go-server/pkg/user.go b/rpc/jsonrpc/go-server/pkg/user.go
similarity index 100%
rename from general/jsonrpc/go-server/pkg/user.go
rename to rpc/jsonrpc/go-server/pkg/user.go
diff --git a/general/jsonrpc/go-server/pkg/user_provider.go b/rpc/jsonrpc/go-server/pkg/user_provider.go
similarity index 100%
rename from general/jsonrpc/go-server/pkg/user_provider.go
rename to rpc/jsonrpc/go-server/pkg/user_provider.go
diff --git a/general/jsonrpc/go-server/pkg/user_provider1.go b/rpc/jsonrpc/go-server/pkg/user_provider1.go
similarity index 100%
rename from general/jsonrpc/go-server/pkg/user_provider1.go
rename to rpc/jsonrpc/go-server/pkg/user_provider1.go
diff --git a/general/jsonrpc/go-server/pkg/user_provider2.go b/rpc/jsonrpc/go-server/pkg/user_provider2.go
similarity index 100%
rename from general/jsonrpc/go-server/pkg/user_provider2.go
rename to rpc/jsonrpc/go-server/pkg/user_provider2.go
diff --git a/general/jsonrpc/java-client/build.sh b/rpc/jsonrpc/java-client/build.sh
similarity index 100%
rename from general/jsonrpc/java-client/build.sh
rename to rpc/jsonrpc/java-client/build.sh
diff --git a/general/jsonrpc/java-client/pom.xml b/rpc/jsonrpc/java-client/pom.xml
similarity index 100%
rename from general/jsonrpc/java-client/pom.xml
rename to rpc/jsonrpc/java-client/pom.xml
diff --git a/general/jsonrpc/java-client/src/main/assembly/assembly.xml b/rpc/jsonrpc/java-client/src/main/assembly/assembly.xml
similarity index 100%
rename from general/jsonrpc/java-client/src/main/assembly/assembly.xml
rename to rpc/jsonrpc/java-client/src/main/assembly/assembly.xml
diff --git a/general/jsonrpc/java-client/src/main/resources/dubbo.properties b/rpc/jsonrpc/java-client/src/main/assembly/conf/dubbo.properties
similarity index 100%
rename from general/jsonrpc/java-client/src/main/resources/dubbo.properties
rename to rpc/jsonrpc/java-client/src/main/assembly/conf/dubbo.properties
diff --git a/general/dubbo/java-client/2.7/src/main/resources/log4j.properties b/rpc/jsonrpc/java-client/src/main/assembly/conf/log4j.properties
similarity index 100%
rename from general/dubbo/java-client/2.7/src/main/resources/log4j.properties
rename to rpc/jsonrpc/java-client/src/main/assembly/conf/log4j.properties
diff --git a/general/jsonrpc/java-client/src/main/java/com/ikurento/user/Consumer.java b/rpc/jsonrpc/java-client/src/main/java/com/ikurento/user/Consumer.java
similarity index 100%
rename from general/jsonrpc/java-client/src/main/java/com/ikurento/user/Consumer.java
rename to rpc/jsonrpc/java-client/src/main/java/com/ikurento/user/Consumer.java
diff --git a/general/jsonrpc/java-server/src/main/java/com/ikurento/user/Gender.java b/rpc/jsonrpc/java-client/src/main/java/com/ikurento/user/Gender.java
similarity index 100%
rename from general/jsonrpc/java-server/src/main/java/com/ikurento/user/Gender.java
rename to rpc/jsonrpc/java-client/src/main/java/com/ikurento/user/Gender.java
diff --git a/general/jsonrpc/java-client/src/main/java/com/ikurento/user/User.java b/rpc/jsonrpc/java-client/src/main/java/com/ikurento/user/User.java
similarity index 100%
rename from general/jsonrpc/java-client/src/main/java/com/ikurento/user/User.java
rename to rpc/jsonrpc/java-client/src/main/java/com/ikurento/user/User.java
diff --git a/general/jsonrpc/java-client/src/main/java/com/ikurento/user/UserProvider.java b/rpc/jsonrpc/java-client/src/main/java/com/ikurento/user/UserProvider.java
similarity index 100%
rename from general/jsonrpc/java-client/src/main/java/com/ikurento/user/UserProvider.java
rename to rpc/jsonrpc/java-client/src/main/java/com/ikurento/user/UserProvider.java
diff --git a/general/jsonrpc/java-client/src/main/resources/META-INF/spring/dubbo.consumer.xml b/rpc/jsonrpc/java-client/src/main/resources/META-INF/spring/dubbo.consumer.xml
similarity index 100%
rename from general/jsonrpc/java-client/src/main/resources/META-INF/spring/dubbo.consumer.xml
rename to rpc/jsonrpc/java-client/src/main/resources/META-INF/spring/dubbo.consumer.xml
diff --git a/general/jsonrpc/java-client/src/main/resources/META-INF/spring/service.xml b/rpc/jsonrpc/java-client/src/main/resources/META-INF/spring/service.xml
similarity index 100%
rename from general/jsonrpc/java-client/src/main/resources/META-INF/spring/service.xml
rename to rpc/jsonrpc/java-client/src/main/resources/META-INF/spring/service.xml
diff --git a/general/jsonrpc/java-client/src/main/assembly/conf/dubbo.properties b/rpc/jsonrpc/java-client/src/main/resources/dubbo.properties
similarity index 100%
rename from general/jsonrpc/java-client/src/main/assembly/conf/dubbo.properties
rename to rpc/jsonrpc/java-client/src/main/resources/dubbo.properties
diff --git a/general/dubbo/java-client/2.6/src/main/resources/log4j.properties b/rpc/jsonrpc/java-client/src/main/resources/log4j.properties
similarity index 100%
rename from general/dubbo/java-client/2.6/src/main/resources/log4j.properties
rename to rpc/jsonrpc/java-client/src/main/resources/log4j.properties
diff --git a/general/jsonrpc/java-server/build.sh b/rpc/jsonrpc/java-server/build.sh
similarity index 100%
rename from general/jsonrpc/java-server/build.sh
rename to rpc/jsonrpc/java-server/build.sh
diff --git a/general/jsonrpc/java-server/pom.xml b/rpc/jsonrpc/java-server/pom.xml
similarity index 100%
rename from general/jsonrpc/java-server/pom.xml
rename to rpc/jsonrpc/java-server/pom.xml
diff --git a/general/jsonrpc/java-server/script/debug.sh b/rpc/jsonrpc/java-server/script/debug.sh
similarity index 100%
rename from general/jsonrpc/java-server/script/debug.sh
rename to rpc/jsonrpc/java-server/script/debug.sh
diff --git a/general/jsonrpc/java-server/src/main/assembly/assembly.xml b/rpc/jsonrpc/java-server/src/main/assembly/assembly.xml
similarity index 100%
rename from general/jsonrpc/java-server/src/main/assembly/assembly.xml
rename to rpc/jsonrpc/java-server/src/main/assembly/assembly.xml
diff --git a/general/jsonrpc/java-server/src/main/assembly/conf/dubbo.properties b/rpc/jsonrpc/java-server/src/main/assembly/conf/dubbo.properties
similarity index 100%
rename from general/jsonrpc/java-server/src/main/assembly/conf/dubbo.properties
rename to rpc/jsonrpc/java-server/src/main/assembly/conf/dubbo.properties
diff --git a/general/dubbo/java-server/2.7/src/main/resources/log4j.properties b/rpc/jsonrpc/java-server/src/main/assembly/conf/log4j.properties
similarity index 100%
rename from general/dubbo/java-server/2.7/src/main/resources/log4j.properties
rename to rpc/jsonrpc/java-server/src/main/assembly/conf/log4j.properties
diff --git a/general/jsonrpc/java-client/src/main/java/com/ikurento/user/Gender.java b/rpc/jsonrpc/java-server/src/main/java/com/ikurento/user/Gender.java
similarity index 100%
rename from general/jsonrpc/java-client/src/main/java/com/ikurento/user/Gender.java
rename to rpc/jsonrpc/java-server/src/main/java/com/ikurento/user/Gender.java
diff --git a/general/jsonrpc/java-server/src/main/java/com/ikurento/user/Provider.java b/rpc/jsonrpc/java-server/src/main/java/com/ikurento/user/Provider.java
similarity index 100%
rename from general/jsonrpc/java-server/src/main/java/com/ikurento/user/Provider.java
rename to rpc/jsonrpc/java-server/src/main/java/com/ikurento/user/Provider.java
diff --git a/general/jsonrpc/java-server/src/main/java/com/ikurento/user/Response.java b/rpc/jsonrpc/java-server/src/main/java/com/ikurento/user/Response.java
similarity index 100%
rename from general/jsonrpc/java-server/src/main/java/com/ikurento/user/Response.java
rename to rpc/jsonrpc/java-server/src/main/java/com/ikurento/user/Response.java
diff --git a/general/jsonrpc/java-server/src/main/java/com/ikurento/user/User.java b/rpc/jsonrpc/java-server/src/main/java/com/ikurento/user/User.java
similarity index 100%
rename from general/jsonrpc/java-server/src/main/java/com/ikurento/user/User.java
rename to rpc/jsonrpc/java-server/src/main/java/com/ikurento/user/User.java
diff --git a/general/jsonrpc/java-server/src/main/java/com/ikurento/user/UserProvider.java b/rpc/jsonrpc/java-server/src/main/java/com/ikurento/user/UserProvider.java
similarity index 100%
rename from general/jsonrpc/java-server/src/main/java/com/ikurento/user/UserProvider.java
rename to rpc/jsonrpc/java-server/src/main/java/com/ikurento/user/UserProvider.java
diff --git a/general/jsonrpc/java-server/src/main/java/com/ikurento/user/UserProviderAnotherImpl.java b/rpc/jsonrpc/java-server/src/main/java/com/ikurento/user/UserProviderAnotherImpl.java
similarity index 100%
rename from general/jsonrpc/java-server/src/main/java/com/ikurento/user/UserProviderAnotherImpl.java
rename to rpc/jsonrpc/java-server/src/main/java/com/ikurento/user/UserProviderAnotherImpl.java
diff --git a/general/jsonrpc/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java b/rpc/jsonrpc/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java
similarity index 100%
rename from general/jsonrpc/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java
rename to rpc/jsonrpc/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java
diff --git a/general/jsonrpc/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml b/rpc/jsonrpc/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml
similarity index 100%
rename from general/jsonrpc/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml
rename to rpc/jsonrpc/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml
diff --git a/general/dubbo/java-server/2.6/src/main/resources/log4j.properties b/rpc/jsonrpc/java-server/src/main/resources/log4j.properties
similarity index 100%
rename from general/dubbo/java-server/2.6/src/main/resources/log4j.properties
rename to rpc/jsonrpc/java-server/src/main/resources/log4j.properties
diff --git a/general/rest/README.md b/rpc/rest/README.md
similarity index 100%
rename from general/rest/README.md
rename to rpc/rest/README.md
diff --git a/general/rest/README_zh.md b/rpc/rest/README_zh.md
similarity index 100%
rename from general/rest/README_zh.md
rename to rpc/rest/README_zh.md
diff --git a/general/rest/go-client/cmd/client.go b/rpc/rest/go-client/cmd/client.go
similarity index 100%
rename from general/rest/go-client/cmd/client.go
rename to rpc/rest/go-client/cmd/client.go
diff --git a/general/grpc/stream/go-server/app/version.go b/rpc/rest/go-client/cmd/version.go
similarity index 100%
rename from general/grpc/stream/go-server/app/version.go
rename to rpc/rest/go-client/cmd/version.go
diff --git a/general/rest/go-client/conf/client.yml b/rpc/rest/go-client/conf/client.yml
similarity index 100%
rename from general/rest/go-client/conf/client.yml
rename to rpc/rest/go-client/conf/client.yml
diff --git a/general/rest/go-server/conf/log.yml b/rpc/rest/go-client/conf/log.yml
similarity index 100%
rename from general/rest/go-server/conf/log.yml
rename to rpc/rest/go-client/conf/log.yml
diff --git a/general/dubbo3/codec-extension/go-server/docker/docker-compose.yml b/rpc/rest/go-client/docker/docker-compose.yml
similarity index 100%
rename from general/dubbo3/codec-extension/go-server/docker/docker-compose.yml
rename to rpc/rest/go-client/docker/docker-compose.yml
diff --git a/general/rest/go-client/pkg/user.go b/rpc/rest/go-client/pkg/user.go
similarity index 100%
rename from general/rest/go-client/pkg/user.go
rename to rpc/rest/go-client/pkg/user.go
diff --git a/general/rest/go-server/cmd/server.go b/rpc/rest/go-server/cmd/server.go
similarity index 100%
rename from general/rest/go-server/cmd/server.go
rename to rpc/rest/go-server/cmd/server.go
diff --git a/general/grpc/stream/go-client/app/version.go b/rpc/rest/go-server/cmd/version.go
similarity index 100%
rename from general/grpc/stream/go-client/app/version.go
rename to rpc/rest/go-server/cmd/version.go
diff --git a/general/rest/go-client/conf/log.yml b/rpc/rest/go-server/conf/log.yml
similarity index 100%
rename from general/rest/go-client/conf/log.yml
rename to rpc/rest/go-server/conf/log.yml
diff --git a/general/rest/go-server/conf/server.yml b/rpc/rest/go-server/conf/server.yml
similarity index 100%
rename from general/rest/go-server/conf/server.yml
rename to rpc/rest/go-server/conf/server.yml
diff --git a/general/dubbo/go-server/docker/docker-compose.yml b/rpc/rest/go-server/docker/docker-compose.yml
similarity index 100%
rename from general/dubbo/go-server/docker/docker-compose.yml
rename to rpc/rest/go-server/docker/docker-compose.yml
diff --git a/general/rest/go-server/pkg/user.go b/rpc/rest/go-server/pkg/user.go
similarity index 100%
rename from general/rest/go-server/pkg/user.go
rename to rpc/rest/go-server/pkg/user.go
diff --git a/general/rest/go-server/pkg/user_provider.go b/rpc/rest/go-server/pkg/user_provider.go
similarity index 100%
rename from general/rest/go-server/pkg/user_provider.go
rename to rpc/rest/go-server/pkg/user_provider.go
diff --git a/general/rest/go-server/pkg/user_provider1.go b/rpc/rest/go-server/pkg/user_provider1.go
similarity index 100%
rename from general/rest/go-server/pkg/user_provider1.go
rename to rpc/rest/go-server/pkg/user_provider1.go
diff --git a/general/rest/go-server/pkg/user_provider2.go b/rpc/rest/go-server/pkg/user_provider2.go
similarity index 100%
rename from general/rest/go-server/pkg/user_provider2.go
rename to rpc/rest/go-server/pkg/user_provider2.go

[dubbo-go-samples] 12/14: Feat/nacos registry (#217)

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git

commit 008e2b2cc0186c788f6f8e2aa114a5ca01098765
Author: Mulavar <97...@qq.com>
AuthorDate: Fri Sep 3 21:13:29 2021 +0800

    Feat/nacos registry (#217)
    
    * add new protocol config & fomat yaml config
    
    * replace '_' with '-'
    
    * add nacos integrate test
    
    Co-authored-by: dongjianhui03 <do...@meituan.com>
---
 .run/registry/registry-nacos-go-client.run.xml     |  2 +-
 .../registry/nacos}/docker/docker-compose.yml      |  0
 .../registry/nacos}/docker/docker-health-check.sh  |  0
 .../registry/nacos}/tests/integration/main_test.go |  6 ++--
 .../nacos}/tests/integration/userprovider_test.go  |  3 +-
 registry/nacos/go-client/cmd/client.go             | 13 ++------
 registry/nacos/go-client/conf/dubbogo.yml          | 38 ++++++++++++++++++----
 registry/nacos/go-server/cmd/server.go             | 10 ++----
 registry/nacos/go-server/conf/dubbogo.yml          | 34 ++++++++++++++-----
 start_integrate_test.sh                            |  1 +
 10 files changed, 67 insertions(+), 40 deletions(-)

diff --git a/.run/registry/registry-nacos-go-client.run.xml b/.run/registry/registry-nacos-go-client.run.xml
index d720d09..0f9987d 100644
--- a/.run/registry/registry-nacos-go-client.run.xml
+++ b/.run/registry/registry-nacos-go-client.run.xml
@@ -4,7 +4,7 @@
     <working_directory value="$PROJECT_DIR$" />
     <envs>
       <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/registry/nacos/go-client/conf/dubbogo.yml" />
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/registry/nacos/go-client/conf/log.yml" />
+      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/registry/nacos/go-client/conf/log.yml" />
     </envs>
     <kind value="PACKAGE" />
     <package value="github.com/apache/dubbo-go-samples/registry/nacos/go-client/cmd" />
diff --git a/registry/nacos/go-server/docker/docker-compose.yml b/integrate_test/registry/nacos/docker/docker-compose.yml
similarity index 100%
rename from registry/nacos/go-server/docker/docker-compose.yml
rename to integrate_test/registry/nacos/docker/docker-compose.yml
diff --git a/registry/nacos/go-server/docker/docker-health-check.sh b/integrate_test/registry/nacos/docker/docker-health-check.sh
similarity index 100%
rename from registry/nacos/go-server/docker/docker-health-check.sh
rename to integrate_test/registry/nacos/docker/docker-health-check.sh
diff --git a/registry/nacos/go-server/tests/integration/main_test.go b/integrate_test/registry/nacos/tests/integration/main_test.go
similarity index 93%
rename from registry/nacos/go-server/tests/integration/main_test.go
rename to integrate_test/registry/nacos/tests/integration/main_test.go
index 7de6914..1667576 100644
--- a/registry/nacos/go-server/tests/integration/main_test.go
+++ b/integrate_test/registry/nacos/tests/integration/main_test.go
@@ -39,7 +39,7 @@ import (
 	hessian "github.com/apache/dubbo-go-hessian2"
 )
 
-var userProvider = new(UserProvider)
+var userProvider = &UserProvider{}
 
 func TestMain(m *testing.M) {
 	config.SetConsumerService(userProvider)
@@ -58,11 +58,11 @@ type User struct {
 }
 
 type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
+	GetUser func(ctx context.Context, req *User) (rsp *User, err error)
 }
 
 func (u *UserProvider) Reference() string {
-	return "UserProvider"
+	return "userProvider"
 }
 
 func (User) JavaClassName() string {
diff --git a/registry/nacos/go-server/tests/integration/userprovider_test.go b/integrate_test/registry/nacos/tests/integration/userprovider_test.go
similarity index 92%
rename from registry/nacos/go-server/tests/integration/userprovider_test.go
rename to integrate_test/registry/nacos/tests/integration/userprovider_test.go
index 7183e64..7f17774 100644
--- a/registry/nacos/go-server/tests/integration/userprovider_test.go
+++ b/integrate_test/registry/nacos/tests/integration/userprovider_test.go
@@ -29,8 +29,7 @@ import (
 )
 
 func TestGetUser(t *testing.T) {
-	user := &User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
+	user, err := userProvider.GetUser(context.TODO(), &User{ID: "A001"})
 	assert.Nil(t, err)
 	assert.Equal(t, "A001", user.ID)
 	assert.Equal(t, "Alex Stocks", user.Name)
diff --git a/registry/nacos/go-client/cmd/client.go b/registry/nacos/go-client/cmd/client.go
index 5412757..5fa85e1 100644
--- a/registry/nacos/go-client/cmd/client.go
+++ b/registry/nacos/go-client/cmd/client.go
@@ -24,14 +24,8 @@ import (
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/nacos"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 
 	hessian "github.com/apache/dubbo-go-hessian2"
 
@@ -39,7 +33,7 @@ import (
 )
 
 type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
+	GetUser func(ctx context.Context, req *User) (rsp *User, err error)
 }
 
 func (u *UserProvider) Reference() string {
@@ -66,8 +60,7 @@ func main() {
 	time.Sleep(3 * time.Second)
 
 	gxlog.CInfo("\n\n\nstart to test dubbo")
-	user := &User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
+	user, err := userProvider.GetUser(context.TODO(), &User{Name: "Alex001"})
 	if err != nil {
 		gxlog.CError("error: %v\n", err)
 		os.Exit(1)
diff --git a/registry/nacos/go-client/conf/dubbogo.yml b/registry/nacos/go-client/conf/dubbogo.yml
index a3eafaa..3545d9a 100644
--- a/registry/nacos/go-client/conf/dubbogo.yml
+++ b/registry/nacos/go-client/conf/dubbogo.yml
@@ -1,13 +1,37 @@
 dubbo:
   registries:
-    "demoNacos":
-      protocol: "nacos"
-      timeout: "3s"
-      address: "127.0.0.1:8848"
+    demoNacos:
+      protocol: nacos
+      timeout: 3s
+      address: 127.0.0.1:8848
+  protocols:
+    dubbo:
+      name: dubbo
+      port: 20000
+      # 在 params 中定义当前使用的协议特有的网络配置
+      # 如该 sample 配置的是 dubbo 协议(底层使用 getty 通信库)的参数
+      params:
+        reconnect-interval: 2
+        connection-number: 1
+        heartbeat-period: 5s
+        session-timeout: 180s
+        pool-size: 64
+        pool-ttl: 600
+        compress-encoding: false
+        tcp-no-delay: true
+        tcp-keep-alive: true
+        keep-alive-period: 120s
+        tcp-r-buf-size: 262144
+        tcp-w-buf-size: 65536
+        tcp-read-timeout: 1s
+        tcp-write-timeout: 5s
+        wait-timeout: 1s
+        max-msg-len: 1024000
+        session-name: client
   consumer:
     registry:
       - demoNacos
     references:
-      "userProvider":
-        protocol: "dubbo"
-        interface: "org.apache.dubbo.UserProvider"
\ No newline at end of file
+      userProvider:
+        protocol: dubbo
+        interface: org.apache.dubbo.UserProvider
\ No newline at end of file
diff --git a/registry/nacos/go-server/cmd/server.go b/registry/nacos/go-server/cmd/server.go
index 1670192..b71d550 100644
--- a/registry/nacos/go-server/cmd/server.go
+++ b/registry/nacos/go-server/cmd/server.go
@@ -27,15 +27,9 @@ import (
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/nacos"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 
 	hessian "github.com/apache/dubbo-go-hessian2"
 
@@ -62,7 +56,7 @@ type User struct {
 type UserProvider struct {
 }
 
-func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
+func (u *UserProvider) GetUser(ctx context.Context, req *User) (*User, error) {
 	gxlog.CInfo("req:%#v", req)
 	rsp := User{"A001", "Alex Stocks", 18, time.Now()}
 	gxlog.CInfo("rsp:%#v", rsp)
diff --git a/registry/nacos/go-server/conf/dubbogo.yml b/registry/nacos/go-server/conf/dubbogo.yml
index d485271..d674560 100644
--- a/registry/nacos/go-server/conf/dubbogo.yml
+++ b/registry/nacos/go-server/conf/dubbogo.yml
@@ -1,17 +1,33 @@
 dubbo:
   registries:
-    "demoNacos":
-      protocol: "nacos"
-      timeout: "3s"
-      address: "127.0.0.1:8848"
+    demoNacos:
+      protocol: nacos
+      timeout: 3s
+      address: 127.0.0.1:8848
   protocols:
-    "dubbo":
-      name: "dubbo"
+    dubbo:
+      name: dubbo
       port: 20000
+      # 在 params 中定义当前使用的协议特有的网络配置
+      # 如该 sample 配置的是 dubbo 协议(底层使用 getty 通信库)
+      params:
+        session-number: 700
+        session-timeout: 180s
+        compress-encoding: false
+        tcp-no-delay: true
+        tcp-keep-alive: true
+        keep-alive-period: 120s
+        tcp-r-buf-size: 262144
+        tcp-w-buf-size: 65536
+        tcp-read-timeout: 10s
+        tcp-write-timeout: 5s
+        wait-timeout: 1s
+        max-msg-len: 1024000
+        session-name: server
   provider:
     registry:
       - demoNacos
     services:
-      "userProvider":
-        protocol: "dubbo"
-        interface: "org.apache.dubbo.UserProvider"
\ No newline at end of file
+      userProvider:
+        protocol: dubbo
+        interface: org.apache.dubbo.UserProvider
\ No newline at end of file
diff --git a/start_integrate_test.sh b/start_integrate_test.sh
index 0f6758d..2758e9c 100755
--- a/start_integrate_test.sh
+++ b/start_integrate_test.sh
@@ -95,6 +95,7 @@ array+=("config-api/rpc/triple")
 array+=("registry/zookeeper")
 array+=("rpc/dubbo3/codec-extension")
 array+=("rpc/dubbo3/hessian2")
+array+=("registry/nacos")
 
 for((i=0;i<${#array[*]};i++))
 do

[dubbo-go-samples] 11/14: Ftr/direct samples (#216)

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git

commit bfe39092d4617f64eb74edcbd5f3b759e8cc3c48
Author: Laurence <45...@users.noreply.github.com>
AuthorDate: Thu Sep 2 22:50:17 2021 +0800

    Ftr/direct samples (#216)
    
    * feat: add triple codec-extension samples of v3 conig
    
    * fix: update client interface
    
    * fix: add direct samples and ci test
    
    * fix: delete unused merged file
    
    * fix: add integrate test
---
 .run/direct-go-client.run.xml                      |  7 +-
 .run/direct-go-server.run.xml                      | 15 ----
 .run/helloworld-go-client.run.xml                  | 14 ----
 .run/triple-codec-extension-client.run.xml         | 15 ----
 .run/triple-codec-extension-server.run.xml         | 15 ----
 .run/{triple => }/triplego-hessian-server.run.xml  |  0
 api/generate.sh                                    |  2 +-
 configcenter/apollo/go-client/cmd/client.go        |  4 +-
 direct/go-client/cmd/client.go                     | 47 ++++-------
 direct/go-client/conf/client.yml                   | 28 -------
 direct/go-client/conf/dubbogo.yml                  |  7 ++
 direct/go-client/conf/log.yml                      | 28 -------
 direct/go-client/pkg/user.go                       | 42 ----------
 direct/go-server/cmd/server.go                     | 59 ++++---------
 direct/go-server/conf/client.yml                   | 61 --------------
 direct/go-server/conf/dubbogo.yml                  | 10 +++
 direct/go-server/conf/log.yml                      | 28 -------
 direct/go-server/conf/server.yml                   | 54 ------------
 direct/go-server/pkg/user.go                       | 62 --------------
 direct/go-server/tests/integration/main_test.go    | 71 ----------------
 .../tests/integration/userprovider_test.go         | 39 ---------
 go.mod                                             |  6 +-
 go.sum                                             |  7 ++
 helloworld/go-client/cmd/client.go                 |  9 +-
 helloworld/go-server/conf/dubbogo.yml              | 12 +--
 .../integration/configapi_rpc_triple_test.go}      | 11 +--
 .../rpc/triple/tests/integration/main_test.go      | 40 +++++----
 .../tests/integration/greeterProvider_test.go      |  9 +-
 .../apollo/tests/integration/main_test.go          |  2 -
 .../nacos/tests/integration/main_test.go           |  8 +-
 .../nacos/tests/integration/userprovider_test.go   |  5 +-
 .../direct}/docker/docker-compose.yml              |  0
 .../direct}/docker/docker-health-check.sh          |  0
 .../tests/integration/main_test.go                 |  2 -
 .../tests/integration/userprovider_test.go         |  3 -
 .../helloworld/docker/docker-compose.yml~merged    |  9 --
 .../tests/integration/helloworld_test.go}          |  5 +-
 .../helloworld/tests/integration/main_test.go      |  2 -
 .../zookeeper/docker/docker-compose.yml~merged     |  9 --
 .../zookeeper/docker/docker-health-check.sh~merged | 10 ---
 .../tests/integration/helloworld_test.go}          |  3 -
 .../zookeeper/tests/integration/main_test.go       | 31 ++-----
 .../tests/integration/userprovider_test.go         | 39 ---------
 .../codec-extension}/docker/docker-compose.yml     |  0
 .../codec-extension}/docker/docker-health-check.sh |  0
 .../codec-extension}/tests/integration/codec.go    |  0
 .../tests/integration/main_test.go                 |  4 +-
 .../tests/integration/userprovider_test.go         |  7 +-
 .../rpc/{ => dubbo3}/hessian2/conf/client.yml      |  0
 .../rpc/dubbo3/hessian2}/conf/log.yml              |  0
 .../rpc/{ => dubbo3}/hessian2/conf/server.yml      |  0
 .../rpc/dubbo3/hessian2}/docker/docker-compose.yml |  0
 .../dubbo3/hessian2}/docker/docker-health-check.sh |  0
 .../hessian2/tests/integration/main_test.go        | 13 +--
 .../tests/integration/userprovider_test.go         |  5 +-
 integrate_test/rpc/hessian2/conf/log.yml           | 27 ------
 .../rpc/hessian2/docker/docker-compose.yml~merged  |  9 --
 rpc/dubbo/go-client/cmd/client.go                  |  2 +-
 rpc/dubbo/go-server/cmd/server.go                  |  2 +-
 .../go-server/docker/docker-compose.yml~merged     |  9 --
 .../go-server/docker/docker-health-check.sh~merged | 10 ---
 .../tests/integration/userprovider_test.go         |  2 +-
 .../codec-extension/{go-server => }/codec/codec.go |  0
 rpc/dubbo3/codec-extension/go-client/cmd/client.go | 46 +++++-----
 .../codec-extension/go-client/codec/codec.go       | 28 -------
 .../codec-extension/go-client/conf/client.yml      | 33 --------
 .../codec-extension/go-client/conf/dubbogo.yml     | 12 +++
 rpc/dubbo3/codec-extension/go-client/conf/log.yml  | 27 ------
 rpc/dubbo3/codec-extension/go-client/pkg/hello.go  | 36 --------
 rpc/dubbo3/codec-extension/go-server/cmd/server.go | 97 ++++++++--------------
 .../codec-extension/go-server/conf/client.yml      | 32 -------
 .../codec-extension/go-server/conf/dubbogo.yml     | 17 ++++
 .../codec-extension/go-server/conf/server.yml      | 30 -------
 .../go-server/docker/docker-compose.yml~merged     |  9 --
 .../codec-extension/go-server/pkg/greeter.go       | 46 ----------
 .../hessian2/go-server/cmd/simple_service.go       |  2 +-
 rpc/dubbo3/msgpack/go-server/cmd/server.go         |  6 +-
 .../server/dubbogo-server/cmd/server.go            |  2 +-
 .../docker/docker-compose.yml~merged               |  9 --
 .../pb/dubbogo-grpc/server/grpcgo-server/main.go   |  1 -
 .../go-server/docker/docker-compose.yml~merged     |  9 --
 rpc/grpc/go-client/cmd/client.go                   |  3 +-
 rpc/grpc/go-client/conf/log.yml~merged             | 27 ------
 rpc/grpc/go-server/conf/log.yml~merged             | 27 ------
 .../go-client/docker/docker-compose.yml~merged     |  9 --
 .../go-server/docker/docker-compose.yml~merged     |  9 --
 start_integrate_test.sh                            |  8 +-
 tracing/grpc/go-server/app/helloworld.pb.go        |  2 -
 88 files changed, 217 insertions(+), 1230 deletions(-)

diff --git a/.run/direct-go-client.run.xml b/.run/direct-go-client.run.xml
index 3cde22b..b248033 100644
--- a/.run/direct-go-client.run.xml
+++ b/.run/direct-go-client.run.xml
@@ -1,15 +1,14 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="direct-go-client" type="GoApplicationRunConfiguration" factoryName="Go Application" singleton="false">
+  <configuration default="false" name="direct-go-client" type="GoApplicationRunConfiguration" factoryName="Go Application" singleton="true">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/direct/go-client/conf/log.yml" />
-      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/direct/go-client/conf/client.yml" />
+      <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/direct/go-client/conf/dubbogo.yml" />
     </envs>
     <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/direct/go-client/cmd/client.go" />
     <package value="github.com/apache/dubbo-go-samples/direct/go-client/cmd" />
     <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/direct/go-client/cmd/client.go" />
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.run/direct-go-server.run.xml b/.run/direct-go-server.run.xml
deleted file mode 100644
index 621cbd1..0000000
--- a/.run/direct-go-server.run.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="direct-go-server" type="GoApplicationRunConfiguration" factoryName="Go Application" singleton="false">
-    <module name="dubbo-go-samples" />
-    <working_directory value="$PROJECT_DIR$" />
-    <envs>
-      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/direct/go-server/conf/server.yml" />
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/direct/go-server/conf/log.yml" />
-    </envs>
-    <kind value="PACKAGE" />
-    <filePath value="$PROJECT_DIR$/direct/go-server/cmd/server.go" />
-    <package value="github.com/apache/dubbo-go-samples/direct/go-server/cmd" />
-    <directory value="$PROJECT_DIR$" />
-    <method v="2" />
-  </configuration>
-</component>
\ No newline at end of file
diff --git a/.run/helloworld-go-client.run.xml b/.run/helloworld-go-client.run.xml
deleted file mode 100644
index 05170fc..0000000
--- a/.run/helloworld-go-client.run.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="helloworld-go-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3config-helloworld" singleton="true">
-    <module name="dubbo-go-samples" />
-    <working_directory value="$PROJECT_DIR$" />
-    <envs>
-      <env name="DUBBO_GO_CONFIG_PATH" value="$PROJECT_DIR$/helloworld/go-client/conf/dubbogo.yml" />
-    </envs>
-    <kind value="PACKAGE" />
-    <package value="github.com/apache/dubbo-go-samples/helloworld/go-client/cmd" />
-    <directory value="$PROJECT_DIR$" />
-    <filePath value="$PROJECT_DIR$/helloworld/go-client/cmd/client.go" />
-    <method v="2" />
-  </configuration>
-</component>
\ No newline at end of file
diff --git a/.run/triple-codec-extension-client.run.xml b/.run/triple-codec-extension-client.run.xml
deleted file mode 100644
index ec0f339..0000000
--- a/.run/triple-codec-extension-client.run.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="triple-codec-extension-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="triple">
-    <module name="dubbo-go-samples" />
-    <working_directory value="$PROJECT_DIR$" />
-    <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/codec-extension/go-client/conf/log.yml" />
-      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/codec-extension/go-client/conf/client.yml" />
-    </envs>
-    <kind value="PACKAGE" />
-    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/codec-extension/go-client/cmd" />
-    <directory value="github.com/apache/dubbo-go-samples/general/dubbo3/api/dubbogo-grpc/server/dubbogo-server/cmd" />
-    <filePath value="$PROJECT_DIR$" />
-    <method v="2" />
-  </configuration>
-</component>
\ No newline at end of file
diff --git a/.run/triple-codec-extension-server.run.xml b/.run/triple-codec-extension-server.run.xml
deleted file mode 100644
index da9aa95..0000000
--- a/.run/triple-codec-extension-server.run.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="triple-codec-extension-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="triple">
-    <module name="dubbo-go-samples" />
-    <working_directory value="$PROJECT_DIR$" />
-    <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo3/codec-extension/go-server/conf/log.yml" />
-      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/codec-extension/go-server/conf/server.yml" />
-    </envs>
-    <kind value="PACKAGE" />
-    <package value="github.com/apache/dubbo-go-samples/rpc/dubbo3/codec-extension/go-server/cmd" />
-    <directory value="github.com/apache/dubbo-go-samples/general/dubbo3/api/dubbogo-grpc/server/dubbogo-server/cmd" />
-    <filePath value="$PROJECT_DIR$" />
-    <method v="2" />
-  </configuration>
-</component>
\ No newline at end of file
diff --git a/.run/triple/triplego-hessian-server.run.xml b/.run/triplego-hessian-server.run.xml
similarity index 100%
rename from .run/triple/triplego-hessian-server.run.xml
rename to .run/triplego-hessian-server.run.xml
diff --git a/api/generate.sh b/api/generate.sh
index d116f65..23c7b71 100644
--- a/api/generate.sh
+++ b/api/generate.sh
@@ -1,4 +1,4 @@
 export GO111MODULE="on"
 export GOPROXY="http://goproxy.io"
-go get -u github.com/apache/dubbo-go/protocol/dubbo3/protoc-gen-dubbo3@3.0
+go get -u github.com/dubbogo/tools/cmd/protoc-gen-dubbo3@3.0
 protoc -I . samples_api.proto --dubbo3_out=plugins=grpc+dubbo:.
\ No newline at end of file
diff --git a/configcenter/apollo/go-client/cmd/client.go b/configcenter/apollo/go-client/cmd/client.go
index 68fe2c0..2c0c7ad 100644
--- a/configcenter/apollo/go-client/cmd/client.go
+++ b/configcenter/apollo/go-client/cmd/client.go
@@ -47,8 +47,8 @@ func main() {
 	req := &api.HelloRequest{
 		Name: "laurence",
 	}
-	reply := &api.User{}
-	if err := grpcGreeterImpl.SayHello(context.Background(), req, reply); err != nil {
+	reply, err := grpcGreeterImpl.SayHello(context.Background(), req)
+	if err != nil {
 		logger.Error(err)
 	}
 	logger.Infof("client response result: %v\n", reply)
diff --git a/direct/go-client/cmd/client.go b/direct/go-client/cmd/client.go
index dd4c3f4..59596d6 100644
--- a/direct/go-client/cmd/client.go
+++ b/direct/go-client/cmd/client.go
@@ -19,51 +19,36 @@ package main
 
 import (
 	"context"
-	"os"
 	"time"
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/direct/go-client/pkg"
+	"github.com/apache/dubbo-go-samples/api"
 )
 
-var userProvider = new(pkg.UserProvider)
-
-func init() {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&pkg.User{})
-}
+var grpcGreeterImpl = new(api.GreeterClientImpl)
 
-// need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
-// in order to make sure direct-invoking is enabled, check if references -> UserProvider -> url is specified
-// in conf/client.yaml
+// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/helloworld/go-client/conf/dubbogo.yml
 func main() {
-	hessian.RegisterPOJO(&pkg.User{})
-	config.Load()
+	config.SetConsumerService(grpcGreeterImpl)
+	if err := config.Load(); err != nil {
+		panic(err)
+	}
 	time.Sleep(3 * time.Second)
 
-	gxlog.CInfo("\n\n\nstart to test dubbo")
-	user := &pkg.User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
+	logger.Info("start to test dubbo")
+	req := &api.HelloRequest{
+		Name: "laurence",
+	}
+	reply, err := grpcGreeterImpl.SayHello(context.Background(), req)
 	if err != nil {
-		gxlog.CError("error: %v\n", err)
-		os.Exit(1)
-		return
+		logger.Error(err)
 	}
-	gxlog.CInfo("response result: %v\n", user)
+	logger.Infof("client response result: %v\n", reply)
 }
diff --git a/direct/go-client/conf/client.yml b/direct/go-client/conf/client.yml
deleted file mode 100644
index 97863f5..0000000
--- a/direct/go-client/conf/client.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-# dubbo client yaml configure file
-
-check: false
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoClient"
-  module: "dubbo-go user-info client"
-  version: "0.0.1"
-  environment: "dev"
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    # this is necessary to enable direct-invoking.
-    url: "dubbo://127.0.0.1:20000"
-    methods:
-      - name: "GetUser"
-        retries: 3
\ No newline at end of file
diff --git a/direct/go-client/conf/dubbogo.yml b/direct/go-client/conf/dubbogo.yml
new file mode 100644
index 0000000..e4c8bb9
--- /dev/null
+++ b/direct/go-client/conf/dubbogo.yml
@@ -0,0 +1,7 @@
+dubbo:
+  consumer:
+    references:
+      greeterImpl:
+        url: tri://localhost:20000
+        protocol: tri
+        interface: com.apache.dubbo.sample.basic.IGreeter # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/direct/go-client/conf/log.yml b/direct/go-client/conf/log.yml
deleted file mode 100644
index d0400fe..0000000
--- a/direct/go-client/conf/log.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-level: "debug"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/direct/go-client/pkg/user.go b/direct/go-client/pkg/user.go
deleted file mode 100644
index 7733ea4..0000000
--- a/direct/go-client/pkg/user.go
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	"time"
-)
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/direct/go-server/cmd/server.go b/direct/go-server/cmd/server.go
index c8c4c22..1514240 100644
--- a/direct/go-server/cmd/server.go
+++ b/direct/go-server/cmd/server.go
@@ -18,62 +18,33 @@
 package main
 
 import (
-	"fmt"
-	"os"
-	"os/signal"
-	"syscall"
-	"time"
+	"context"
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/direct/go-server/pkg"
-)
-
-var (
-	survivalTimeout = int(3e9)
+	"github.com/apache/dubbo-go-samples/api"
 )
 
-// need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
-func main() {
-	hessian.RegisterPOJO(&pkg.User{})
-	config.Load()
-
-	initSignal()
+type GreeterProvider struct {
+	api.GreeterProviderBase
 }
 
-func initSignal() {
-	signals := make(chan os.Signal, 1)
-	// It is not possible to block SIGKILL or syscall.SIGSTOP
-	signal.Notify(signals, os.Interrupt, os.Kill, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
-	for {
-		sig := <-signals
-		logger.Infof("get signal %s", sig.String())
-		switch sig {
-		case syscall.SIGHUP:
-			// reload()
-		default:
-			time.AfterFunc(time.Duration(survivalTimeout), func() {
-				logger.Warnf("app exit now by force...")
-				os.Exit(1)
-			})
+func (s *GreeterProvider) SayHello(ctx context.Context, in *api.HelloRequest) (*api.User, error) {
+	logger.Infof("Dubbo3 GreeterProvider get user name = %s\n", in.Name)
+	return &api.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
+}
 
-			// The program exits normally or timeout forcibly exits.
-			fmt.Println("provider app exit now...")
-			return
-		}
+// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/helloworld/go-server/conf/dubbogo.yml
+func main() {
+	config.SetProviderService(&GreeterProvider{})
+	if err := config.Load(); err != nil {
+		panic(err)
 	}
+	select {}
 }
diff --git a/direct/go-server/conf/client.yml b/direct/go-server/conf/client.yml
deleted file mode 100644
index 8823490..0000000
--- a/direct/go-server/conf/client.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout : "3s"
-# connect timeout
-connect_timeout : "3s"
-
-# application config
-application:
-  organization : "dubbo.io"
-  name  : "UserConsumerTest"
-  module : "dubbo-go user-info client"
-  version : "0.0.1"
-  environment : "dev"
-
-# registry config
-registries :
-  "demoZk":
-    protocol: "zookeeper"
-    timeout	: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol : "dubbo"
-    interface : "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    # this is necessary to enable direct-invoking.
-    url:  "dubbo://127.0.0.1:20000"
-    methods :
-    - name: "GetUser"
-      retries: 3
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/direct/go-server/conf/dubbogo.yml b/direct/go-server/conf/dubbogo.yml
new file mode 100644
index 0000000..f6551a9
--- /dev/null
+++ b/direct/go-server/conf/dubbogo.yml
@@ -0,0 +1,10 @@
+dubbo:
+  protocols:
+    triple:
+      name: tri
+      port: 20000
+  provider:
+    services:
+      greeterImpl:
+        protocol: triple
+        interface: com.apache.dubbo.sample.basic.IGreeter # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/direct/go-server/conf/log.yml b/direct/go-server/conf/log.yml
deleted file mode 100644
index a75bccb..0000000
--- a/direct/go-server/conf/log.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-level: "error"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/direct/go-server/conf/server.yml b/direct/go-server/conf/server.yml
deleted file mode 100644
index 13b7f74..0000000
--- a/direct/go-server/conf/server.yml
+++ /dev/null
@@ -1,54 +0,0 @@
-# dubbo server yaml configure file
-# application config
-application:
-  organization : "dubbo.io"
-  name : "UserInfoServer"
-  module : "dubbo-go user-info server"
-  version : "0.0.1"
-  environment : "dev"
-
-# registry config
-registries :
-  "demoZk":
-    protocol: "zookeeper"
-    timeout	: "3s"
-    address: "127.0.0.1:2181"
-
-# service config
-services:
-  "UserProvider":
-    registry: "demoZk"
-    protocol : "dubbo"
-    interface : "org.apache.dubbo.UserProvider"
-    loadbalance: "random"
-    warmup: "100"
-    cluster: "failover"
-    methods:
-    - name: "GetUser"
-      retries: 1
-      loadbalance: "random"
-
-# protocol config
-protocols:
-  "dubbo":
-    name: "dubbo"
-    port: 20000
-
-protocol_conf:
-  dubbo:
-    session_number: 700
-    session_timeout: "180s"
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "server"
diff --git a/direct/go-server/pkg/user.go b/direct/go-server/pkg/user.go
deleted file mode 100644
index 75d0916..0000000
--- a/direct/go-server/pkg/user.go
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	"time"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log"
-)
-
-func init() {
-	config.SetProviderService(new(UserProvider))
-	// ------for hessian2------
-	hessian.RegisterPOJO(&User{})
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-}
-
-func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) {
-	gxlog.CInfo("req:%#v", req)
-	rsp := User{"A001", "Alex Stocks", 18, time.Now()}
-	gxlog.CInfo("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/direct/go-server/tests/integration/main_test.go b/direct/go-server/tests/integration/main_test.go
deleted file mode 100644
index d028c55..0000000
--- a/direct/go-server/tests/integration/main_test.go
+++ /dev/null
@@ -1,71 +0,0 @@
-// +build integration
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package integration
-
-import (
-	"context"
-	"os"
-	"testing"
-	"time"
-)
-
-import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/local"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-)
-
-var userProvider = new(UserProvider)
-
-func TestMain(m *testing.M) {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&User{})
-	config.Load()
-	time.Sleep(3 * time.Second)
-
-	os.Exit(m.Run())
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/direct/go-server/tests/integration/userprovider_test.go b/direct/go-server/tests/integration/userprovider_test.go
deleted file mode 100644
index 7183e64..0000000
--- a/direct/go-server/tests/integration/userprovider_test.go
+++ /dev/null
@@ -1,39 +0,0 @@
-// +build integration
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package integration
-
-import (
-	"context"
-	"testing"
-)
-
-import (
-	"github.com/stretchr/testify/assert"
-)
-
-func TestGetUser(t *testing.T) {
-	user := &User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
-	assert.Nil(t, err)
-	assert.Equal(t, "A001", user.ID)
-	assert.Equal(t, "Alex Stocks", user.Name)
-	assert.Equal(t, int32(18), user.Age)
-	assert.NotNil(t, user.Time)
-}
diff --git a/go.mod b/go.mod
index d9d33bc..19e3050 100644
--- a/go.mod
+++ b/go.mod
@@ -1,7 +1,7 @@
 module github.com/apache/dubbo-go-samples
 
 require (
-	dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210826094458-8ef173e7a77b
+	dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210901104537-ddabb2e957aa
 	github.com/alibaba/sentinel-golang v1.0.2
 	github.com/apache/dubbo-getty v1.4.5
 	github.com/apache/dubbo-go-hessian2 v1.9.2
@@ -28,8 +28,6 @@ require (
 	k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a // indirect
 )
 
-replace (
-	github.com/envoyproxy/go-control-plane => github.com/envoyproxy/go-control-plane v0.8.0
-)
+replace github.com/envoyproxy/go-control-plane => github.com/envoyproxy/go-control-plane v0.8.0
 
 go 1.13
diff --git a/go.sum b/go.sum
index a608633..df43e51 100644
--- a/go.sum
+++ b/go.sum
@@ -17,6 +17,10 @@ dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210822082425-1bfface3303e h1:TnZXDmo
 dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210822082425-1bfface3303e/go.mod h1:quHg7AMGZichyo/h2msHsjregY4oL0lEJlljPbpwgs0=
 dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210826094458-8ef173e7a77b h1:swahNLXhkWgQtnkgafdaHPaEWcC51PvEalPY+ovZ6JQ=
 dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210826094458-8ef173e7a77b/go.mod h1:truc+fGVX3f/luIG6lAc8D49JXETiRtWDF5CVkG7ZMY=
+dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210901104537-ddabb2e957aa h1:xpWQD2HMHsDT9GqLQ6UzNz3rmI/eWa67/wbSbU3K3/k=
+dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210901104537-ddabb2e957aa/go.mod h1:truc+fGVX3f/luIG6lAc8D49JXETiRtWDF5CVkG7ZMY=
+dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210902110215-82e825c9c36a h1:MQe72C0+cCE3ra6Bk/MtmK3PTrNhNWvnopcOsTW7dP4=
+dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210902110215-82e825c9c36a/go.mod h1:truc+fGVX3f/luIG6lAc8D49JXETiRtWDF5CVkG7ZMY=
 github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
 github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
 github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
@@ -595,6 +599,7 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
 github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
@@ -703,6 +708,7 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
 github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
@@ -1091,6 +1097,7 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
 gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
diff --git a/helloworld/go-client/cmd/client.go b/helloworld/go-client/cmd/client.go
index 2c0c7ad..59596d6 100644
--- a/helloworld/go-client/cmd/client.go
+++ b/helloworld/go-client/cmd/client.go
@@ -34,13 +34,12 @@ import (
 
 var grpcGreeterImpl = new(api.GreeterClientImpl)
 
-func init() {
-	config.SetConsumerService(grpcGreeterImpl)
-}
-
 // export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/helloworld/go-client/conf/dubbogo.yml
 func main() {
-	config.Load()
+	config.SetConsumerService(grpcGreeterImpl)
+	if err := config.Load(); err != nil {
+		panic(err)
+	}
 	time.Sleep(3 * time.Second)
 
 	logger.Info("start to test dubbo")
diff --git a/helloworld/go-server/conf/dubbogo.yml b/helloworld/go-server/conf/dubbogo.yml
index 5e9cfb4..aca4f05 100644
--- a/helloworld/go-server/conf/dubbogo.yml
+++ b/helloworld/go-server/conf/dubbogo.yml
@@ -1,17 +1,17 @@
 dubbo:
   registries:
     "demoZK":
-      protocol: "zookeeper"
-      timeout: "3s"
-      address: "127.0.0.1:2181"
+      protocol: zookeeper
+      timeout: 3s
+      address: 127.0.0.1:2181
   protocols:
     "triple":
-      name: "tri"
+      name: tri
       port: 20000
   provider:
     registry:
       - demoZK
     services:
       "greeterImpl":
-        protocol: "triple"
-        interface: "com.apache.dubbo.sample.basic.IGreeter" # must be compatible with grpc or dubbo-java
\ No newline at end of file
+        protocol: triple
+        interface: com.apache.dubbo.sample.basic.IGreeter # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/integrate_test/helloworld/tests/integration/userprovider_test.go b/integrate_test/config-api/rpc/triple/tests/integration/configapi_rpc_triple_test.go
similarity index 85%
copy from integrate_test/helloworld/tests/integration/userprovider_test.go
copy to integrate_test/config-api/rpc/triple/tests/integration/configapi_rpc_triple_test.go
index 1daa809..bae2374 100644
--- a/integrate_test/helloworld/tests/integration/userprovider_test.go
+++ b/integrate_test/config-api/rpc/triple/tests/integration/configapi_rpc_triple_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -23,25 +21,20 @@ import (
 	"context"
 	"testing"
 )
-
 import (
 	"github.com/stretchr/testify/assert"
 )
 
 import (
-	dubbo3pb "github.com/apache/dubbo-go-samples/api"
+	"github.com/apache/dubbo-go-samples/api"
 )
 
 func TestSayHello(t *testing.T) {
-	req := &dubbo3pb.HelloRequest{
+	req := &api.HelloRequest{
 		Name: "laurence",
 	}
 
-	reply := &dubbo3pb.User{}
-
 	ctx := context.Background()
-	ctx = context.WithValue(ctx, "tri-req-id", "test_value_XXXXXXXX")
-
 	reply, err := greeterProvider.SayHello(ctx, req)
 
 	assert.Nil(t, err)
diff --git a/integrate_test/config-api/rpc/triple/tests/integration/main_test.go b/integrate_test/config-api/rpc/triple/tests/integration/main_test.go
index d8a0568..5706621 100644
--- a/integrate_test/config-api/rpc/triple/tests/integration/main_test.go
+++ b/integrate_test/config-api/rpc/triple/tests/integration/main_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -22,31 +20,43 @@ package integration
 import (
 	"os"
 	"testing"
-	"time"
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/local"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 )
 
 import (
-	dubbo3pb "github.com/apache/dubbo-go-samples/api"
+	"github.com/apache/dubbo-go-samples/api"
 )
 
-var greeterProvider = new(dubbo3pb.GreeterClientImpl)
+var greeterProvider = new(api.GreeterClientImpl)
 
 func TestMain(m *testing.M) {
 	config.SetConsumerService(greeterProvider)
-	config.Load()
-	time.Sleep(3 * time.Second)
+
+	referenceConfig := config.NewReferenceConfig(
+		config.WithReferenceInterface("com.apache.dubbo.sample.basic.IGreeter"),
+		config.WithReferenceProtocolName("tri"),
+		config.WithReferenceRegistry("zkRegistryKey"),
+	)
+
+	consumerConfig := config.NewConsumerConfig(
+		config.WithConsumerReferenceConfig("greeterImpl", referenceConfig),
+	)
+
+	registryConfig := config.NewRegistryConfigWithProtocolDefaultPort("zookeeper")
+
+	rootConfig := config.NewRootConfig(
+		config.WithRootRegistryConfig("zkRegistryKey", registryConfig),
+		config.WithRootConsumerConfig(consumerConfig),
+	)
+
+	if err := rootConfig.Init(); err != nil {
+		panic(err)
+	}
 
 	os.Exit(m.Run())
+
 }
diff --git a/integrate_test/configcenter/apollo/tests/integration/greeterProvider_test.go b/integrate_test/configcenter/apollo/tests/integration/greeterProvider_test.go
index 992c55d..2d177f5 100644
--- a/integrate_test/configcenter/apollo/tests/integration/greeterProvider_test.go
+++ b/integrate_test/configcenter/apollo/tests/integration/greeterProvider_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -37,12 +35,7 @@ func TestSayHello(t *testing.T) {
 		Name: "laurence",
 	}
 
-	reply := &dubbo3pb.User{}
-
-	ctx := context.Background()
-	ctx = context.WithValue(ctx, "tri-req-id", "test_value_XXXXXXXX")
-
-	err := greeterProvider.SayHello(ctx, req, reply)
+	reply, err := greeterProvider.SayHello(context.Background(), req)
 
 	assert.Nil(t, err)
 	assert.Equal(t, "Hello laurence", reply.Name)
diff --git a/integrate_test/configcenter/apollo/tests/integration/main_test.go b/integrate_test/configcenter/apollo/tests/integration/main_test.go
index d8a0568..07978d7 100644
--- a/integrate_test/configcenter/apollo/tests/integration/main_test.go
+++ b/integrate_test/configcenter/apollo/tests/integration/main_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
diff --git a/integrate_test/configcenter/nacos/tests/integration/main_test.go b/integrate_test/configcenter/nacos/tests/integration/main_test.go
index c2862bd..9eb9c0c 100644
--- a/integrate_test/configcenter/nacos/tests/integration/main_test.go
+++ b/integrate_test/configcenter/nacos/tests/integration/main_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -60,11 +58,7 @@ type User struct {
 }
 
 type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
+	GetUser func(ctx context.Context, req *User) (*User, error)
 }
 
 func (User) JavaClassName() string {
diff --git a/integrate_test/configcenter/nacos/tests/integration/userprovider_test.go b/integrate_test/configcenter/nacos/tests/integration/userprovider_test.go
index 7183e64..fbb9061 100644
--- a/integrate_test/configcenter/nacos/tests/integration/userprovider_test.go
+++ b/integrate_test/configcenter/nacos/tests/integration/userprovider_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -29,8 +27,7 @@ import (
 )
 
 func TestGetUser(t *testing.T) {
-	user := &User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
+	user, err := userProvider.GetUser(context.TODO(), &User{ID: "A001"})
 	assert.Nil(t, err)
 	assert.Equal(t, "A001", user.ID)
 	assert.Equal(t, "Alex Stocks", user.Name)
diff --git a/rpc/dubbo3/codec-extension/go-server/docker/docker-compose.yml b/integrate_test/direct/docker/docker-compose.yml
similarity index 100%
rename from rpc/dubbo3/codec-extension/go-server/docker/docker-compose.yml
rename to integrate_test/direct/docker/docker-compose.yml
diff --git a/rpc/dubbo3/codec-extension/go-server/docker/docker-health-check.sh b/integrate_test/direct/docker/docker-health-check.sh
similarity index 100%
rename from rpc/dubbo3/codec-extension/go-server/docker/docker-health-check.sh
rename to integrate_test/direct/docker/docker-health-check.sh
diff --git a/integrate_test/config-api/rpc/triple/tests/integration/main_test.go b/integrate_test/direct/tests/integration/main_test.go
similarity index 98%
copy from integrate_test/config-api/rpc/triple/tests/integration/main_test.go
copy to integrate_test/direct/tests/integration/main_test.go
index d8a0568..07978d7 100644
--- a/integrate_test/config-api/rpc/triple/tests/integration/main_test.go
+++ b/integrate_test/direct/tests/integration/main_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
diff --git a/integrate_test/helloworld/tests/integration/userprovider_test.go b/integrate_test/direct/tests/integration/userprovider_test.go
similarity index 93%
copy from integrate_test/helloworld/tests/integration/userprovider_test.go
copy to integrate_test/direct/tests/integration/userprovider_test.go
index 1daa809..971a8a8 100644
--- a/integrate_test/helloworld/tests/integration/userprovider_test.go
+++ b/integrate_test/direct/tests/integration/userprovider_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -40,7 +38,6 @@ func TestSayHello(t *testing.T) {
 	reply := &dubbo3pb.User{}
 
 	ctx := context.Background()
-	ctx = context.WithValue(ctx, "tri-req-id", "test_value_XXXXXXXX")
 
 	reply, err := greeterProvider.SayHello(ctx, req)
 
diff --git a/integrate_test/helloworld/docker/docker-compose.yml~merged b/integrate_test/helloworld/docker/docker-compose.yml~merged
deleted file mode 100644
index 8724179..0000000
--- a/integrate_test/helloworld/docker/docker-compose.yml~merged
+++ /dev/null
@@ -1,9 +0,0 @@
-version: '3'
-
-services:
-  zookeeper:
-    image: zookeeper
-    ports:
-      - 2181:2181
-    restart: on-failure
-
diff --git a/integrate_test/config-api/rpc/triple/tests/integration/userprovider_test.go b/integrate_test/helloworld/tests/integration/helloworld_test.go
similarity index 90%
rename from integrate_test/config-api/rpc/triple/tests/integration/userprovider_test.go
rename to integrate_test/helloworld/tests/integration/helloworld_test.go
index 992c55d..971a8a8 100644
--- a/integrate_test/config-api/rpc/triple/tests/integration/userprovider_test.go
+++ b/integrate_test/helloworld/tests/integration/helloworld_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -40,9 +38,8 @@ func TestSayHello(t *testing.T) {
 	reply := &dubbo3pb.User{}
 
 	ctx := context.Background()
-	ctx = context.WithValue(ctx, "tri-req-id", "test_value_XXXXXXXX")
 
-	err := greeterProvider.SayHello(ctx, req, reply)
+	reply, err := greeterProvider.SayHello(ctx, req)
 
 	assert.Nil(t, err)
 	assert.Equal(t, "Hello laurence", reply.Name)
diff --git a/integrate_test/helloworld/tests/integration/main_test.go b/integrate_test/helloworld/tests/integration/main_test.go
index d8a0568..07978d7 100644
--- a/integrate_test/helloworld/tests/integration/main_test.go
+++ b/integrate_test/helloworld/tests/integration/main_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
diff --git a/integrate_test/registry/zookeeper/docker/docker-compose.yml~merged b/integrate_test/registry/zookeeper/docker/docker-compose.yml~merged
deleted file mode 100644
index 8724179..0000000
--- a/integrate_test/registry/zookeeper/docker/docker-compose.yml~merged
+++ /dev/null
@@ -1,9 +0,0 @@
-version: '3'
-
-services:
-  zookeeper:
-    image: zookeeper
-    ports:
-      - 2181:2181
-    restart: on-failure
-
diff --git a/integrate_test/registry/zookeeper/docker/docker-health-check.sh~merged b/integrate_test/registry/zookeeper/docker/docker-health-check.sh~merged
deleted file mode 100644
index 2cc32c2..0000000
--- a/integrate_test/registry/zookeeper/docker/docker-health-check.sh~merged
+++ /dev/null
@@ -1,10 +0,0 @@
-curl 127.0.0.1:2181
-res=$?
-passCode=52
-while [ "$res" != "$passCode" ];do
-  sleep 5
-  curl 127.0.0.1:2181
-  res=$?
-done
-
-sleep 5
diff --git a/integrate_test/helloworld/tests/integration/userprovider_test.go b/integrate_test/registry/zookeeper/tests/integration/helloworld_test.go
similarity index 93%
rename from integrate_test/helloworld/tests/integration/userprovider_test.go
rename to integrate_test/registry/zookeeper/tests/integration/helloworld_test.go
index 1daa809..971a8a8 100644
--- a/integrate_test/helloworld/tests/integration/userprovider_test.go
+++ b/integrate_test/registry/zookeeper/tests/integration/helloworld_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -40,7 +38,6 @@ func TestSayHello(t *testing.T) {
 	reply := &dubbo3pb.User{}
 
 	ctx := context.Background()
-	ctx = context.WithValue(ctx, "tri-req-id", "test_value_XXXXXXXX")
 
 	reply, err := greeterProvider.SayHello(ctx, req)
 
diff --git a/integrate_test/registry/zookeeper/tests/integration/main_test.go b/integrate_test/registry/zookeeper/tests/integration/main_test.go
index d028c55..07978d7 100644
--- a/integrate_test/registry/zookeeper/tests/integration/main_test.go
+++ b/integrate_test/registry/zookeeper/tests/integration/main_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,7 +18,6 @@
 package integration
 
 import (
-	"context"
 	"os"
 	"testing"
 	"time"
@@ -36,36 +33,18 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+)
 
-	hessian "github.com/apache/dubbo-go-hessian2"
+import (
+	dubbo3pb "github.com/apache/dubbo-go-samples/api"
 )
 
-var userProvider = new(UserProvider)
+var greeterProvider = new(dubbo3pb.GreeterClientImpl)
 
 func TestMain(m *testing.M) {
-	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&User{})
+	config.SetConsumerService(greeterProvider)
 	config.Load()
 	time.Sleep(3 * time.Second)
 
 	os.Exit(m.Run())
 }
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
-
-func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
diff --git a/integrate_test/registry/zookeeper/tests/integration/userprovider_test.go b/integrate_test/registry/zookeeper/tests/integration/userprovider_test.go
deleted file mode 100644
index 7183e64..0000000
--- a/integrate_test/registry/zookeeper/tests/integration/userprovider_test.go
+++ /dev/null
@@ -1,39 +0,0 @@
-// +build integration
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package integration
-
-import (
-	"context"
-	"testing"
-)
-
-import (
-	"github.com/stretchr/testify/assert"
-)
-
-func TestGetUser(t *testing.T) {
-	user := &User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
-	assert.Nil(t, err)
-	assert.Equal(t, "A001", user.ID)
-	assert.Equal(t, "Alex Stocks", user.Name)
-	assert.Equal(t, int32(18), user.Age)
-	assert.NotNil(t, user.Time)
-}
diff --git a/integrate_test/rpc/hessian2/docker/docker-compose.yml b/integrate_test/rpc/dubbo3/codec-extension/docker/docker-compose.yml
similarity index 100%
rename from integrate_test/rpc/hessian2/docker/docker-compose.yml
rename to integrate_test/rpc/dubbo3/codec-extension/docker/docker-compose.yml
diff --git a/integrate_test/rpc/hessian2/docker/docker-health-check.sh b/integrate_test/rpc/dubbo3/codec-extension/docker/docker-health-check.sh
similarity index 100%
rename from integrate_test/rpc/hessian2/docker/docker-health-check.sh
rename to integrate_test/rpc/dubbo3/codec-extension/docker/docker-health-check.sh
diff --git a/rpc/dubbo3/codec-extension/go-server/tests/integration/codec.go b/integrate_test/rpc/dubbo3/codec-extension/tests/integration/codec.go
similarity index 100%
rename from rpc/dubbo3/codec-extension/go-server/tests/integration/codec.go
rename to integrate_test/rpc/dubbo3/codec-extension/tests/integration/codec.go
diff --git a/rpc/dubbo3/codec-extension/go-server/tests/integration/main_test.go b/integrate_test/rpc/dubbo3/codec-extension/tests/integration/main_test.go
similarity index 95%
rename from rpc/dubbo3/codec-extension/go-server/tests/integration/main_test.go
rename to integrate_test/rpc/dubbo3/codec-extension/tests/integration/main_test.go
index d7edc46..a4d4bc8 100644
--- a/rpc/dubbo3/codec-extension/go-server/tests/integration/main_test.go
+++ b/integrate_test/rpc/dubbo3/codec-extension/tests/integration/main_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -54,7 +52,7 @@ type User struct {
 }
 
 type UserProvider struct {
-	GetUser func(ctx context.Context, req *User, rsp *User) error
+	GetUser func(ctx context.Context, req *User, req2 *User, name string) (*User, error)
 }
 
 func (u *UserProvider) Reference() string {
diff --git a/integrate_test/rpc/hessian2/tests/integration/userprovider_test.go b/integrate_test/rpc/dubbo3/codec-extension/tests/integration/userprovider_test.go
similarity index 86%
rename from integrate_test/rpc/hessian2/tests/integration/userprovider_test.go
rename to integrate_test/rpc/dubbo3/codec-extension/tests/integration/userprovider_test.go
index 639e911..6ebc619 100644
--- a/integrate_test/rpc/hessian2/tests/integration/userprovider_test.go
+++ b/integrate_test/rpc/dubbo3/codec-extension/tests/integration/userprovider_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -29,10 +27,9 @@ import (
 )
 
 func TestGetUser(t *testing.T) {
-	user := &User{}
-	err := userProvider.GetUser(context.TODO(), &User{Name: "laurence"}, user)
+	user, err := userProvider.GetUser(context.TODO(), &User{Name: "laurence"}, &User{Name: "laurence2"}, "myname")
 	assert.Nil(t, err)
 	assert.Equal(t, "12345", user.ID)
-	assert.Equal(t, "laurence", user.Name)
+	assert.Equal(t, "laurencelaurence2", user.Name)
 	assert.Equal(t, int32(18), user.Age)
 }
diff --git a/integrate_test/rpc/hessian2/conf/client.yml b/integrate_test/rpc/dubbo3/hessian2/conf/client.yml
similarity index 100%
rename from integrate_test/rpc/hessian2/conf/client.yml
rename to integrate_test/rpc/dubbo3/hessian2/conf/client.yml
diff --git a/rpc/dubbo3/codec-extension/go-server/conf/log.yml b/integrate_test/rpc/dubbo3/hessian2/conf/log.yml
similarity index 100%
rename from rpc/dubbo3/codec-extension/go-server/conf/log.yml
rename to integrate_test/rpc/dubbo3/hessian2/conf/log.yml
diff --git a/integrate_test/rpc/hessian2/conf/server.yml b/integrate_test/rpc/dubbo3/hessian2/conf/server.yml
similarity index 100%
rename from integrate_test/rpc/hessian2/conf/server.yml
rename to integrate_test/rpc/dubbo3/hessian2/conf/server.yml
diff --git a/direct/go-server/docker/docker-compose.yml b/integrate_test/rpc/dubbo3/hessian2/docker/docker-compose.yml
similarity index 100%
rename from direct/go-server/docker/docker-compose.yml
rename to integrate_test/rpc/dubbo3/hessian2/docker/docker-compose.yml
diff --git a/direct/go-server/docker/docker-health-check.sh b/integrate_test/rpc/dubbo3/hessian2/docker/docker-health-check.sh
similarity index 100%
rename from direct/go-server/docker/docker-health-check.sh
rename to integrate_test/rpc/dubbo3/hessian2/docker/docker-health-check.sh
diff --git a/integrate_test/rpc/hessian2/tests/integration/main_test.go b/integrate_test/rpc/dubbo3/hessian2/tests/integration/main_test.go
similarity index 88%
rename from integrate_test/rpc/hessian2/tests/integration/main_test.go
rename to integrate_test/rpc/dubbo3/hessian2/tests/integration/main_test.go
index 2b781ca..3d662e2 100644
--- a/integrate_test/rpc/hessian2/tests/integration/main_test.go
+++ b/integrate_test/rpc/dubbo3/hessian2/tests/integration/main_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -47,7 +45,6 @@ func TestMain(m *testing.M) {
 	hessian.RegisterPOJO(&User{})
 	config.Load()
 	time.Sleep(3 * time.Second)
-
 	os.Exit(m.Run())
 }
 
@@ -58,13 +55,9 @@ type User struct {
 }
 
 type UserProvider struct {
-	GetUser func(ctx context.Context, usr *User, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
+	GetUser func(ctx context.Context, usr *User) (*User, error)
 }
 
-func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
+func (u *User) JavaClassName() string {
+	return "com.apache.dubbo.sample.basic.User"
 }
diff --git a/rpc/dubbo3/codec-extension/go-server/tests/integration/userprovider_test.go b/integrate_test/rpc/dubbo3/hessian2/tests/integration/userprovider_test.go
similarity index 90%
rename from rpc/dubbo3/codec-extension/go-server/tests/integration/userprovider_test.go
rename to integrate_test/rpc/dubbo3/hessian2/tests/integration/userprovider_test.go
index 7a08d19..ee3607f 100644
--- a/rpc/dubbo3/codec-extension/go-server/tests/integration/userprovider_test.go
+++ b/integrate_test/rpc/dubbo3/hessian2/tests/integration/userprovider_test.go
@@ -1,5 +1,3 @@
-// +build integration
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -29,8 +27,7 @@ import (
 )
 
 func TestGetUser(t *testing.T) {
-	user := &User{}
-	err := userProvider.GetUser(context.TODO(), &User{Name: "laurence"}, user)
+	user, err := userProvider.GetUser(context.TODO(), &User{Name: "laurence"})
 	assert.Nil(t, err)
 	assert.Equal(t, "12345", user.ID)
 	assert.Equal(t, "Hello laurence", user.Name)
diff --git a/integrate_test/rpc/hessian2/conf/log.yml b/integrate_test/rpc/hessian2/conf/log.yml
deleted file mode 100644
index 8c3f700..0000000
--- a/integrate_test/rpc/hessian2/conf/log.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-level: "info"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/integrate_test/rpc/hessian2/docker/docker-compose.yml~merged b/integrate_test/rpc/hessian2/docker/docker-compose.yml~merged
deleted file mode 100644
index 8724179..0000000
--- a/integrate_test/rpc/hessian2/docker/docker-compose.yml~merged
+++ /dev/null
@@ -1,9 +0,0 @@
-version: '3'
-
-services:
-  zookeeper:
-    image: zookeeper
-    ports:
-      - 2181:2181
-    restart: on-failure
-
diff --git a/rpc/dubbo/go-client/cmd/client.go b/rpc/dubbo/go-client/cmd/client.go
index 5cdcdf8..dcd1939 100644
--- a/rpc/dubbo/go-client/cmd/client.go
+++ b/rpc/dubbo/go-client/cmd/client.go
@@ -38,7 +38,7 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/general/dubbo/go-client/pkg"
+	"github.com/apache/dubbo-go-samples/rpc/dubbo/go-client/pkg"
 )
 
 var (
diff --git a/rpc/dubbo/go-server/cmd/server.go b/rpc/dubbo/go-server/cmd/server.go
index 32a7a0e..fc74d81 100644
--- a/rpc/dubbo/go-server/cmd/server.go
+++ b/rpc/dubbo/go-server/cmd/server.go
@@ -41,7 +41,7 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/general/dubbo/go-server/pkg"
+	"github.com/apache/dubbo-go-samples/rpc/dubbo/go-server/pkg"
 )
 
 var (
diff --git a/rpc/dubbo/go-server/docker/docker-compose.yml~merged b/rpc/dubbo/go-server/docker/docker-compose.yml~merged
deleted file mode 100644
index 8724179..0000000
--- a/rpc/dubbo/go-server/docker/docker-compose.yml~merged
+++ /dev/null
@@ -1,9 +0,0 @@
-version: '3'
-
-services:
-  zookeeper:
-    image: zookeeper
-    ports:
-      - 2181:2181
-    restart: on-failure
-
diff --git a/rpc/dubbo/go-server/docker/docker-health-check.sh~merged b/rpc/dubbo/go-server/docker/docker-health-check.sh~merged
deleted file mode 100644
index 2cc32c2..0000000
--- a/rpc/dubbo/go-server/docker/docker-health-check.sh~merged
+++ /dev/null
@@ -1,10 +0,0 @@
-curl 127.0.0.1:2181
-res=$?
-passCode=52
-while [ "$res" != "$passCode" ];do
-  sleep 5
-  curl 127.0.0.1:2181
-  res=$?
-done
-
-sleep 5
diff --git a/rpc/dubbo/go-server/tests/integration/userprovider_test.go b/rpc/dubbo/go-server/tests/integration/userprovider_test.go
index 988e1cd..3fe5d8d 100644
--- a/rpc/dubbo/go-server/tests/integration/userprovider_test.go
+++ b/rpc/dubbo/go-server/tests/integration/userprovider_test.go
@@ -31,7 +31,7 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/general/dubbo/go-server/pkg"
+	"github.com/apache/dubbo-go-samples/rpc/dubbo/go-server/pkg"
 )
 
 func TestGetUserA000(t *testing.T) {
diff --git a/rpc/dubbo3/codec-extension/go-server/codec/codec.go b/rpc/dubbo3/codec-extension/codec/codec.go
similarity index 100%
rename from rpc/dubbo3/codec-extension/go-server/codec/codec.go
rename to rpc/dubbo3/codec-extension/codec/codec.go
diff --git a/rpc/dubbo3/codec-extension/go-client/cmd/client.go b/rpc/dubbo3/codec-extension/go-client/cmd/client.go
index 9090ea5..087b7a5 100644
--- a/rpc/dubbo3/codec-extension/go-client/cmd/client.go
+++ b/rpc/dubbo3/codec-extension/go-client/cmd/client.go
@@ -19,47 +19,41 @@ package main
 
 import (
 	"context"
-	"os"
 	"time"
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/grpc"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	"github.com/dubbogo/gost/log"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 )
 
 import (
-	_ "github.com/apache/dubbo-go-samples/general/dubbo3/codec-extension/go-client/codec"
-	"github.com/apache/dubbo-go-samples/general/dubbo3/codec-extension/go-client/pkg"
+	_ "github.com/apache/dubbo-go-samples/rpc/dubbo3/codec-extension/codec"
 )
 
-var userProvider = new(pkg.UserProvider)
+type User struct {
+	ID   string
+	Name string
+	Age  int32
+}
 
-func init() {
-	config.SetConsumerService(userProvider)
+type UserProvider struct {
+	GetUser func(context.Context, *User, *User, string) (*User, error)
 }
 
-// need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
+var userProvider = new(UserProvider)
+
+// export DUBBO_GO_CONFIG_PATH=PATH_TO_SAMPLES/rpc/dubbo3/codec-extension/go-client/conf/dubbogo.yml
 func main() {
-	config.Load()
+	config.SetConsumerService(userProvider)
+	if err := config.Load(); err != nil {
+		panic(err)
+	}
 	time.Sleep(3 * time.Second)
-
-	gxlog.CInfo("\n\n\nstart to test dubbo")
-	user := &pkg.User{}
-	err := userProvider.GetUser(context.TODO(), &pkg.User{Name: "laurence"}, user)
+	user, err := userProvider.GetUser(context.TODO(), &User{Name: "laurence"}, &User{Name: "laurence2"}, "testName")
 	if err != nil {
-		gxlog.CError("error: %v\n", err)
-		os.Exit(1)
-		return
+		panic(err)
 	}
-	gxlog.CInfo("response result: %v\n", user)
+	logger.Infof("response result: %v\n", user)
 }
diff --git a/rpc/dubbo3/codec-extension/go-client/codec/codec.go b/rpc/dubbo3/codec-extension/go-client/codec/codec.go
deleted file mode 100644
index 68805e9..0000000
--- a/rpc/dubbo3/codec-extension/go-client/codec/codec.go
+++ /dev/null
@@ -1,28 +0,0 @@
-package codec
-
-import (
-	"encoding/json"
-)
-
-import (
-	triCommon "github.com/dubbogo/triple/pkg/common"
-)
-
-func init() {
-	triCommon.SetTripleCodec("json", NewJSONCodec)
-}
-
-func NewJSONCodec() triCommon.Codec {
-	return &JSONCodec{}
-}
-
-type JSONCodec struct {
-}
-
-func (j *JSONCodec) Marshal(v interface{}) ([]byte, error) {
-	return json.Marshal(v)
-}
-
-func (j *JSONCodec) Unmarshal(data []byte, v interface{}) error {
-	return json.Unmarshal(data, v)
-}
diff --git a/rpc/dubbo3/codec-extension/go-client/conf/client.yml b/rpc/dubbo3/codec-extension/go-client/conf/client.yml
deleted file mode 100644
index d4c14a2..0000000
--- a/rpc/dubbo3/codec-extension/go-client/conf/client.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserProvider"
-  module: "dubbo-go3.0 client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "tri"
-    serialization: "json"
-#    url: "dubbo://127.0.0.1:20000" # target server ip:port
-    interface: "com.apache.dubbo.sample.basic.IGreeter"
diff --git a/rpc/dubbo3/codec-extension/go-client/conf/dubbogo.yml b/rpc/dubbo3/codec-extension/go-client/conf/dubbogo.yml
new file mode 100644
index 0000000..5aaef86
--- /dev/null
+++ b/rpc/dubbo3/codec-extension/go-client/conf/dubbogo.yml
@@ -0,0 +1,12 @@
+dubbo:
+  registries:
+    registryKey:
+      protocol: zookeeper
+      address: 127.0.0.1:2181
+  consumer:
+    registry:
+      - registryKey
+    references:
+      UserProvider:
+        protocol: tri
+        interface: com.apache.dubbogo.samples.rpc.extension.UserProvider # must be compatible with grpc or dubbo-java server
\ No newline at end of file
diff --git a/rpc/dubbo3/codec-extension/go-client/conf/log.yml b/rpc/dubbo3/codec-extension/go-client/conf/log.yml
deleted file mode 100644
index 8c3f700..0000000
--- a/rpc/dubbo3/codec-extension/go-client/conf/log.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-level: "info"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/rpc/dubbo3/codec-extension/go-client/pkg/hello.go b/rpc/dubbo3/codec-extension/go-client/pkg/hello.go
deleted file mode 100644
index da5c377..0000000
--- a/rpc/dubbo3/codec-extension/go-client/pkg/hello.go
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-)
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-}
-
-type UserProvider struct {
-	GetUser func(ctx context.Context, req *User, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
diff --git a/rpc/dubbo3/codec-extension/go-server/cmd/server.go b/rpc/dubbo3/codec-extension/go-server/cmd/server.go
index 27d439d..0555c45 100644
--- a/rpc/dubbo3/codec-extension/go-server/cmd/server.go
+++ b/rpc/dubbo3/codec-extension/go-server/cmd/server.go
@@ -1,84 +1,59 @@
 /*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements.  See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 
 package main
 
 import (
-	"fmt"
-	"os"
-	"os/signal"
-	"syscall"
-	"time"
+	"context"
 )
 
 import (
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
 	"dubbo.apache.org/dubbo-go/v3/common/logger"
-	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/nacos"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
-	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	_ "github.com/dubbogo/triple/pkg/triple"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
 )
 
 import (
-	_ "github.com/apache/dubbo-go-samples/general/dubbo3/codec-extension/go-client/codec"
-	"github.com/apache/dubbo-go-samples/general/dubbo3/codec-extension/go-server/pkg"
-)
-
-var (
-	survivalTimeout = int(3 * time.Second)
+	_ "github.com/apache/dubbo-go-samples/rpc/dubbo3/codec-extension/codec"
 )
 
-func init() {
-	config.SetProviderService(new(pkg.UserProvider))
+type User struct {
+	ID   string
+	Name string
+	Age  int32
 }
 
-// need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
-func main() {
-	config.Load()
-	initSignal()
+type UserProvider struct {
 }
 
-func initSignal() {
-	signals := make(chan os.Signal, 1)
-	// It is not possible to block SIGKILL or syscall.SIGSTOP
-	signal.Notify(signals, os.Interrupt, os.Kill, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
-	for {
-		sig := <-signals
-		logger.Infof("get signal %s", sig.String())
-		switch sig {
-		case syscall.SIGHUP:
-			// reload()
-		default:
-			time.Sleep(time.Second * 5)
-			time.AfterFunc(time.Duration(survivalTimeout), func() {
-				logger.Warnf("app exit now by force...")
-				os.Exit(1)
-			})
+func (u *UserProvider) GetUser(ctx context.Context, req *User, req2 *User, name string) (*User, error) {
+	logger.Infof("req:%#v", req)
+	logger.Infof("req2:%#v", req2)
+	logger.Infof("name%#v", name)
+	rsp := User{"12345", req.Name + req2.Name, 18}
+	logger.Infof("rsp:%#v", rsp)
+	return &rsp, nil
+}
 
-			// The program exits normally or timeout forcibly exits.
-			fmt.Println("provider app exit now...")
-			return
-		}
+// export DUBBO_GO_CONFIG_PATH=PATH_TO_SAMPLES/rpc/dubbo3/codec-extension/go-server/conf/dubbogo.yml
+func main() {
+	config.SetProviderService(&UserProvider{})
+	if err := config.Load(); err != nil {
+		panic(err)
 	}
+	select {}
 }
diff --git a/rpc/dubbo3/codec-extension/go-server/conf/client.yml b/rpc/dubbo3/codec-extension/go-server/conf/client.yml
deleted file mode 100644
index 137d8b2..0000000
--- a/rpc/dubbo3/codec-extension/go-server/conf/client.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserProvider"
-  module: "dubbo-go3.0 client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "tri"
-    serialization: "json"
-    interface: "com.apache.dubbo.sample.basic.IGreeter"
diff --git a/rpc/dubbo3/codec-extension/go-server/conf/dubbogo.yml b/rpc/dubbo3/codec-extension/go-server/conf/dubbogo.yml
new file mode 100644
index 0000000..77d7c97
--- /dev/null
+++ b/rpc/dubbo3/codec-extension/go-server/conf/dubbogo.yml
@@ -0,0 +1,17 @@
+dubbo:
+  registries:
+    registryKey:
+      protocol: zookeeper
+      address: 127.0.0.1:2181
+  protocols:
+    tripleKey:
+      name: tri
+      port: 20000
+  provider:
+    registry:
+      - registryKey
+    services:
+      UserProvider:
+        protocol: tripleKey
+        serialization: json
+        interface: com.apache.dubbogo.samples.rpc.extension.UserProvider # must be compatible with grpc or dubbo-java
\ No newline at end of file
diff --git a/rpc/dubbo3/codec-extension/go-server/conf/server.yml b/rpc/dubbo3/codec-extension/go-server/conf/server.yml
deleted file mode 100644
index 4e8d051..0000000
--- a/rpc/dubbo3/codec-extension/go-server/conf/server.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-# dubbo server yaml configure file
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserProvider"
-  module: "dubbo-go3.0 greeter server"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZK":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-
-# service config
-services:
-  "UserProvider":
-    registry: "demoZK"
-    protocol: "tri" # tri is dubbo-go3.0 protocol
-    serialization: "json" # json is user defined serialization type
-    interface: "com.apache.dubbo.sample.basic.IGreeter"
-
-# protocol config
-protocols:
-  "tri":
-    name: "tri"
-    port: 20001
diff --git a/rpc/dubbo3/codec-extension/go-server/docker/docker-compose.yml~merged b/rpc/dubbo3/codec-extension/go-server/docker/docker-compose.yml~merged
deleted file mode 100644
index 8724179..0000000
--- a/rpc/dubbo3/codec-extension/go-server/docker/docker-compose.yml~merged
+++ /dev/null
@@ -1,9 +0,0 @@
-version: '3'
-
-services:
-  zookeeper:
-    image: zookeeper
-    ports:
-      - 2181:2181
-    restart: on-failure
-
diff --git a/rpc/dubbo3/codec-extension/go-server/pkg/greeter.go b/rpc/dubbo3/codec-extension/go-server/pkg/greeter.go
deleted file mode 100644
index 52d08fd..0000000
--- a/rpc/dubbo3/codec-extension/go-server/pkg/greeter.go
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-)
-
-import (
-	"github.com/dubbogo/gost/log"
-)
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-}
-
-type UserProvider struct {
-}
-
-func (u *UserProvider) GetUser(ctx context.Context, user *User) (*User, error) {
-	gxlog.CInfo("req:%#v", user)
-	rsp := User{"12345", "Hello " + user.Name, 18}
-	gxlog.CInfo("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
diff --git a/rpc/dubbo3/hessian2/go-server/cmd/simple_service.go b/rpc/dubbo3/hessian2/go-server/cmd/simple_service.go
index 93dc772..3513b11 100644
--- a/rpc/dubbo3/hessian2/go-server/cmd/simple_service.go
+++ b/rpc/dubbo3/hessian2/go-server/cmd/simple_service.go
@@ -23,7 +23,7 @@ type UserProvider struct {
 
 func (u *UserProvider) GetUser(ctx context.Context, usr *User) (*User, error) {
 	gxlog.CInfo("req:%#v", usr)
-	rsp := User{"12345", "" + usr.Name, 18}
+	rsp := User{"12345", "Hello " + usr.Name, 18}
 	gxlog.CInfo("rsp:%#v", rsp)
 	return &rsp, nil
 }
diff --git a/rpc/dubbo3/msgpack/go-server/cmd/server.go b/rpc/dubbo3/msgpack/go-server/cmd/server.go
index 9c956c0..f40729f 100644
--- a/rpc/dubbo3/msgpack/go-server/cmd/server.go
+++ b/rpc/dubbo3/msgpack/go-server/cmd/server.go
@@ -43,9 +43,9 @@ type UserProvider struct {
 func (u UserProvider) GetUser(ctx context.Context, user *api.User) (*api.User, error) {
 	gxlog.CInfo("req:%#v", user)
 	rsp := api.User{
-		Name:                 "12345",
-		Id:                   "Hello " + user.Name,
-		Age:                  18,
+		Name: "12345",
+		Id:   "Hello " + user.Name,
+		Age:  18,
 	}
 	gxlog.CInfo("rsp:%#v", rsp)
 	return &rsp, nil
diff --git a/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/server.go b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/server.go
index c0e8c9d..d54bf26 100644
--- a/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/server.go
+++ b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/server.go
@@ -41,7 +41,7 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/pkg"
+	"github.com/apache/dubbo-go-samples/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/pkg"
 )
 
 var (
diff --git a/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/docker/docker-compose.yml~merged b/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/docker/docker-compose.yml~merged
deleted file mode 100644
index 8724179..0000000
--- a/rpc/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/docker/docker-compose.yml~merged
+++ /dev/null
@@ -1,9 +0,0 @@
-version: '3'
-
-services:
-  zookeeper:
-    image: zookeeper
-    ports:
-      - 2181:2181
-    restart: on-failure
-
diff --git a/rpc/dubbo3/pb/dubbogo-grpc/server/grpcgo-server/main.go b/rpc/dubbo3/pb/dubbogo-grpc/server/grpcgo-server/main.go
index 4041fb7..df828eb 100644
--- a/rpc/dubbo3/pb/dubbogo-grpc/server/grpcgo-server/main.go
+++ b/rpc/dubbo3/pb/dubbogo-grpc/server/grpcgo-server/main.go
@@ -28,7 +28,6 @@ import (
 
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/reflection"
-	"google.golang.org/grpc/reflection"
 )
 
 import (
diff --git a/rpc/dubbo3/pb/dubbogo-java/go-server/docker/docker-compose.yml~merged b/rpc/dubbo3/pb/dubbogo-java/go-server/docker/docker-compose.yml~merged
deleted file mode 100644
index 8724179..0000000
--- a/rpc/dubbo3/pb/dubbogo-java/go-server/docker/docker-compose.yml~merged
+++ /dev/null
@@ -1,9 +0,0 @@
-version: '3'
-
-services:
-  zookeeper:
-    image: zookeeper
-    ports:
-      - 2181:2181
-    restart: on-failure
-
diff --git a/rpc/grpc/go-client/cmd/client.go b/rpc/grpc/go-client/cmd/client.go
index 940421e..c2e7fca 100644
--- a/rpc/grpc/go-client/cmd/client.go
+++ b/rpc/grpc/go-client/cmd/client.go
@@ -52,11 +52,10 @@ func main() {
 	time.Sleep(3 * time.Second)
 
 	gxlog.CInfo("\n\n\nstart to test dubbo")
-	reply := &protobuf.HelloReply{}
 	req := &protobuf.HelloRequest{
 		Name: "xujianhai",
 	}
-	err := grpcGreeterImpl.SayHello(context.TODO(), req, reply)
+	reply, err := grpcGreeterImpl.SayHello(context.TODO(), req)
 	if err != nil {
 		panic(err)
 	}
diff --git a/rpc/grpc/go-client/conf/log.yml~merged b/rpc/grpc/go-client/conf/log.yml~merged
deleted file mode 100644
index 2b6e93a..0000000
--- a/rpc/grpc/go-client/conf/log.yml~merged
+++ /dev/null
@@ -1,27 +0,0 @@
-level: "debug"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/rpc/grpc/go-server/conf/log.yml~merged b/rpc/grpc/go-server/conf/log.yml~merged
deleted file mode 100644
index 970d988..0000000
--- a/rpc/grpc/go-server/conf/log.yml~merged
+++ /dev/null
@@ -1,27 +0,0 @@
-level: "error"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/rpc/rest/go-client/docker/docker-compose.yml~merged b/rpc/rest/go-client/docker/docker-compose.yml~merged
deleted file mode 100644
index 8724179..0000000
--- a/rpc/rest/go-client/docker/docker-compose.yml~merged
+++ /dev/null
@@ -1,9 +0,0 @@
-version: '3'
-
-services:
-  zookeeper:
-    image: zookeeper
-    ports:
-      - 2181:2181
-    restart: on-failure
-
diff --git a/rpc/rest/go-server/docker/docker-compose.yml~merged b/rpc/rest/go-server/docker/docker-compose.yml~merged
deleted file mode 100644
index 8724179..0000000
--- a/rpc/rest/go-server/docker/docker-compose.yml~merged
+++ /dev/null
@@ -1,9 +0,0 @@
-version: '3'
-
-services:
-  zookeeper:
-    image: zookeeper
-    ports:
-      - 2181:2181
-    restart: on-failure
-
diff --git a/start_integrate_test.sh b/start_integrate_test.sh
index b539384..0f6758d 100755
--- a/start_integrate_test.sh
+++ b/start_integrate_test.sh
@@ -88,7 +88,13 @@
 ## the test of router logic would be fixed later
 #array+=("router/uniform-router/file/go-server")
 #array+=("router/uniform-router/file/go-server2")
-array+=("helloworld")
+
+array=("helloworld")
+array+=("direct")
+array+=("config-api/rpc/triple")
+array+=("registry/zookeeper")
+array+=("rpc/dubbo3/codec-extension")
+array+=("rpc/dubbo3/hessian2")
 
 for((i=0;i<${#array[*]};i++))
 do
diff --git a/tracing/grpc/go-server/app/helloworld.pb.go b/tracing/grpc/go-server/app/helloworld.pb.go
index a6baf5c..e8bf208 100644
--- a/tracing/grpc/go-server/app/helloworld.pb.go
+++ b/tracing/grpc/go-server/app/helloworld.pb.go
@@ -18,8 +18,6 @@ import (
 
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/codes"
-	"google.golang.org/grpc/codes"
-	"google.golang.org/grpc/status"
 	"google.golang.org/grpc/status"
 )
 

[dubbo-go-samples] 02/14: add:zk registry

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git

commit 62f6d2b8cc01201193c03a0a2c8b9358fa9e6456
Author: zhaoyunxing <23...@qq.com>
AuthorDate: Wed Aug 4 19:53:36 2021 +0800

    add:zk registry
---
 .run/helloworld-go-server.run.xml                  | 15 ----
 .run/registry/registry-zookeeper-go-client.run.xml | 11 +++
 .run/registry/registry-zookeeper-go-server.run.xml | 11 +++
 go.mod                                             |  2 +
 go.sum                                             | 31 ++++++++-
 registry/zookeeper/go-client/cmd/client.go         |  9 +--
 registry/zookeeper/go-client/conf/application.yml  | 20 ++++++
 registry/zookeeper/go-client/conf/client.yml       | 59 ----------------
 registry/zookeeper/go-client/conf/log.yml          | 27 --------
 registry/zookeeper/go-client/pkg/user.go           |  6 ++
 registry/zookeeper/go-server/cmd/server.go         | 15 ++--
 registry/zookeeper/go-server/conf/client.yml       | 59 ----------------
 registry/zookeeper/go-server/conf/log.yml          | 27 --------
 registry/zookeeper/go-server/conf/server.yml       | 79 +++++++---------------
 registry/zookeeper/go-server/pkg/user.go           |  5 ++
 15 files changed, 119 insertions(+), 257 deletions(-)

diff --git a/.run/helloworld-go-server.run.xml b/.run/helloworld-go-server.run.xml
deleted file mode 100644
index f098a7f..0000000
--- a/.run/helloworld-go-server.run.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="helloworld-go-server" type="GoApplicationRunConfiguration" factoryName="Go Application" singleton="true">
-    <module name="dubbo-go-samples" />
-    <working_directory value="$PROJECT_DIR$" />
-    <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/helloworld/go-server/conf/log.yml" />
-      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/helloworld/go-server/conf/server.yml" />
-    </envs>
-    <kind value="PACKAGE" />
-    <package value="github.com/apache/dubbo-go-samples/helloworld/go-server/cmd" />
-    <directory value="$PROJECT_DIR$" />
-    <filePath value="$PROJECT_DIR$/helloworld/go-server/cmd/server.go" />
-    <method v="2" />
-  </configuration>
-</component>
\ No newline at end of file
diff --git a/.run/registry/registry-zookeeper-go-client.run.xml b/.run/registry/registry-zookeeper-go-client.run.xml
new file mode 100644
index 0000000..e9841d8
--- /dev/null
+++ b/.run/registry/registry-zookeeper-go-client.run.xml
@@ -0,0 +1,11 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="registry-zookeeper-go-client" type="GoApplicationRunConfiguration" factoryName="Go Application">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <kind value="PACKAGE" />
+    <package value="github.com/apache/dubbo-go-samples/registry/zookeeper/go-client/cmd" />
+    <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/registry/zookeeper/go-client/cmd/client.go" />
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/.run/registry/registry-zookeeper-go-server.run.xml b/.run/registry/registry-zookeeper-go-server.run.xml
new file mode 100644
index 0000000..023aa10
--- /dev/null
+++ b/.run/registry/registry-zookeeper-go-server.run.xml
@@ -0,0 +1,11 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="registry-zookeeper-go-server" type="GoApplicationRunConfiguration" factoryName="Go Application">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <kind value="PACKAGE" />
+    <package value="github.com/apache/dubbo-go-samples/registry/zookeeper/go-server/cmd" />
+    <directory value="$PROJECT_DIR$" />
+    <filePath value="$PROJECT_DIR$/registry/zookeeper/go-server/cmd/server.go" />
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/go.mod b/go.mod
index adbc13c..590b9e6 100644
--- a/go.mod
+++ b/go.mod
@@ -26,4 +26,6 @@ require (
 
 replace github.com/envoyproxy/go-control-plane => github.com/envoyproxy/go-control-plane v0.8.0
 
+// replace dubbo.apache.org/dubbo-go/v3 => /Users/docker/code/github/go/dubbo-go
+
 go 1.13
diff --git a/go.sum b/go.sum
index ad2291c..da228e9 100644
--- a/go.sum
+++ b/go.sum
@@ -12,8 +12,6 @@ cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqCl
 cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
 cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210725154253-9aeb7ff3c612 h1:uQMGg4Hnu/iO+RLrKIRsBXgJLUpLh+UG5NuVNGxGlsg=
-dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2.0.20210725154253-9aeb7ff3c612/go.mod h1:RvuYcSX5rxb1aQTSol4EFt2txaJhzMmUAkT75lT9ETE=
 github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
 github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
 github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
@@ -144,6 +142,7 @@ github.com/dubbogo/go-zookeeper v1.0.3 h1:UkuY+rBsxdT7Bs63QAzp9z7XqQ53W1j8E5rwl8
 github.com/dubbogo/go-zookeeper v1.0.3/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c=
 github.com/dubbogo/gost v1.9.0/go.mod h1:pPTjVyoJan3aPxBPNUX0ADkXjPibLo+/Ib0/fADXSG8=
 github.com/dubbogo/gost v1.10.1/go.mod h1:+mQGS51XQEUWZP2JeGZTxJwipjRKtJO7Tr+FOg+72rI=
+github.com/dubbogo/gost v1.11.13/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
 github.com/dubbogo/gost v1.11.14 h1:9lfcdILOmqTOVAW1fPHa5uf1NrD6jlIOBe4vf8576yQ=
 github.com/dubbogo/gost v1.11.14/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
 github.com/dubbogo/jsonparser v1.0.1/go.mod h1:tYAtpctvSP/tWw4MeelsowSPgXQRVHHWbqL6ynps8jU=
@@ -201,6 +200,7 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
+github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc=
 github.com/go-ldap/ldap/v3 v3.1.3/go.mod h1:3rbOH3jRS2u6jg2rJnKAMLE/xQyCKIveG2Sa/Cohzb8=
 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
@@ -214,9 +214,13 @@ github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nA
 github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
 github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
 github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
+github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
 github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
+github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
 github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
+github.com/go-playground/validator/v10 v10.7.0 h1:gLi5ajTBBheLNt0ctewgq7eolXoDALQd5/y90Hh9ZgM=
+github.com/go-playground/validator/v10 v10.7.0/go.mod h1:xm76BBt941f7yWdGnI2DVPFFg1UK3YY04qifoXU3lOk=
 github.com/go-redis/redis v6.15.5+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
 github.com/go-resty/resty/v2 v2.3.0 h1:JOOeAvjSlapTT92p8xiS19Zxev1neGikoHsXJeOq8So=
 github.com/go-resty/resty/v2 v2.3.0/go.mod h1:UpN9CgLZNsv4e9XG50UU8xdI0F43UQ4HmxLBDwaroHU=
@@ -329,6 +333,7 @@ github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brv
 github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
 github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
 github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
+github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
 github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
 github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
 github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jUIEJnBlbgKS1N2Q61QkHiZyR1g=
@@ -336,7 +341,9 @@ github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iP
 github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
 github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
 github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
+github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
 github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
+github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
 github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
 github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A=
 github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
@@ -355,9 +362,12 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO
 github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
 github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
 github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
+github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q=
+github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M=
 github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267 h1:e1ok06zGrWJW91rzRroyl5nRNqraaBe4d5hiKcVZuHM=
 github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
 github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
+github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
 github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
@@ -371,6 +381,8 @@ github.com/jinzhu/copier v0.0.0-20190625015134-976e0346caa8 h1:mGIXW/lubQ4B+3bXT
 github.com/jinzhu/copier v0.0.0-20190625015134-976e0346caa8/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s=
 github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
 github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
+github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=
 github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
@@ -396,6 +408,8 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW
 github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/knadh/koanf v1.1.1 h1:doO5UBvSXcmngdr/u54HKe+Uz4ZZw0/YHVzSsnE3vD4=
+github.com/knadh/koanf v1.1.1/go.mod h1:xpPTwMhsA/aaQLAilyCCqfpEiY1gpa160AiCuWHJUjY=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
@@ -407,6 +421,7 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
 github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
 github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570 h1:0iQektZGS248WXmGIYOwRXSQhD4qn3icjMpuxwO7qlo=
 github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570/go.mod h1:BLt8L9ld7wVsvEWQbuLrUZnCMnUmLZ+CGDzKtclrTlE=
@@ -442,6 +457,8 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5
 github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
 github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
 github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
+github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
+github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
 github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
 github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
 github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
@@ -454,6 +471,8 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh
 github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag=
 github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
+github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -512,8 +531,9 @@ github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaR
 github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
 github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
-github.com/pelletier/go-toml v1.4.0 h1:u3Z1r+oOXJIkxqw34zVhyPgjBsm6X2wn21NWs/HfSeg=
 github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
+github.com/pelletier/go-toml v1.7.0 h1:7utD74fnzVc/cpcyy8sjrlFr5vYpypUixARcHIMIGuI=
+github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
 github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
@@ -581,6 +601,7 @@ github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O
 github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
 github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
+github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA=
 github.com/robertkrimen/godocdown v0.0.0-20130622164427-0bfa04905481/go.mod h1:C9WhFzY47SzYBIvzFqSvHIR6ROgDo4TtdTuRaOMjF/s=
 github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
 github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
@@ -851,6 +872,7 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -864,6 +886,7 @@ golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9sn
 golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -977,6 +1000,7 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
 google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -996,6 +1020,7 @@ gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
 gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
 gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
+gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
 gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
diff --git a/registry/zookeeper/go-client/cmd/client.go b/registry/zookeeper/go-client/cmd/client.go
index 1fb9871..1735077 100644
--- a/registry/zookeeper/go-client/cmd/client.go
+++ b/registry/zookeeper/go-client/cmd/client.go
@@ -33,8 +33,6 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 
-	hessian "github.com/apache/dubbo-go-hessian2"
-
 	gxlog "github.com/dubbogo/gost/log"
 )
 
@@ -46,12 +44,15 @@ var userProvider = new(pkg.UserProvider)
 
 func init() {
 	config.SetConsumerService(userProvider)
-	hessian.RegisterPOJO(&pkg.User{})
+
 }
 
 // need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
 func main() {
-	config.Load()
+	path := "./registry/zookeeper/go-client/conf/application.yml"
+	if err := config.Load(config.WithPath(path)); err != nil {
+		panic(err)
+	}
 	time.Sleep(3 * time.Second)
 
 	gxlog.CInfo("\n\n\nstart to test dubbo")
diff --git a/registry/zookeeper/go-client/conf/application.yml b/registry/zookeeper/go-client/conf/application.yml
new file mode 100644
index 0000000..9e84b93
--- /dev/null
+++ b/registry/zookeeper/go-client/conf/application.yml
@@ -0,0 +1,20 @@
+dubbo:
+  registries:
+    zk:
+      timeout: 10s
+      address: zookeeper://127.0.0.1:2181
+  protocols:
+    dubbo:
+      name: dubbo
+      port: 20000
+  consumer:
+    check: false
+    references:
+      UserProvider:
+        registry: zk
+        protocol: dubbo
+        interface: org.apache.dubbo.UserService
+        cluster: failover
+        methods:
+          - name: GetUser
+            retries: 3
\ No newline at end of file
diff --git a/registry/zookeeper/go-client/conf/client.yml b/registry/zookeeper/go-client/conf/client.yml
deleted file mode 100644
index 308d530..0000000
--- a/registry/zookeeper/go-client/conf/client.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoClient"
-  module: "dubbo-go user-info client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/registry/zookeeper/go-client/conf/log.yml b/registry/zookeeper/go-client/conf/log.yml
deleted file mode 100644
index 2b6e93a..0000000
--- a/registry/zookeeper/go-client/conf/log.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-level: "debug"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/registry/zookeeper/go-client/pkg/user.go b/registry/zookeeper/go-client/pkg/user.go
index 7733ea4..dac6ccf 100644
--- a/registry/zookeeper/go-client/pkg/user.go
+++ b/registry/zookeeper/go-client/pkg/user.go
@@ -22,6 +22,12 @@ import (
 	"time"
 )
 
+import "github.com/apache/dubbo-go-hessian2"
+
+func init() {
+	hessian.RegisterPOJO(new(User))
+}
+
 type User struct {
 	ID   string
 	Name string
diff --git a/registry/zookeeper/go-server/cmd/server.go b/registry/zookeeper/go-server/cmd/server.go
index b6f77db..fb82cfa 100644
--- a/registry/zookeeper/go-server/cmd/server.go
+++ b/registry/zookeeper/go-server/cmd/server.go
@@ -19,6 +19,7 @@ package main
 
 import (
 	"fmt"
+	"github.com/apache/dubbo-go-samples/registry/zookeeper/go-server/pkg"
 	"os"
 	"os/signal"
 	"syscall"
@@ -35,12 +36,6 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-)
-
-import (
-	"github.com/apache/dubbo-go-samples/registry/zookeeper/go-server/pkg"
 )
 
 var (
@@ -49,9 +44,13 @@ var (
 
 // need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
 func main() {
-	hessian.RegisterPOJO(&pkg.User{})
 	config.SetProviderService(new(pkg.UserProvider))
-	config.Load()
+
+	path := "./registry/zookeeper/go-server/conf/server.yml"
+
+	if err := config.Load(config.WithPath(path)); err != nil {
+		panic(err)
+	}
 
 	initSignal()
 }
diff --git a/registry/zookeeper/go-server/conf/client.yml b/registry/zookeeper/go-server/conf/client.yml
deleted file mode 100644
index 11ae382..0000000
--- a/registry/zookeeper/go-server/conf/client.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-# dubbo client yaml configure file
-
-check: true
-# client
-request_timeout: "3s"
-# connect timeout
-connect_timeout: "3s"
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoTest"
-  module: "dubbo-go user-info client"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-    username: ""
-    password: ""
-
-# reference config
-references:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 3
-
-# protocol config
-protocol_conf:
-  dubbo:
-    reconnect_interval: 0
-    connection_number: 1
-    heartbeat_period: "5s"
-    session_timeout: "180s"
-    pool_size: 64
-    pool_ttl: 600
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "client"
diff --git a/registry/zookeeper/go-server/conf/log.yml b/registry/zookeeper/go-server/conf/log.yml
deleted file mode 100644
index 970d988..0000000
--- a/registry/zookeeper/go-server/conf/log.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-level: "error"
-development: true
-disableCaller: false
-disableStacktrace: false
-sampling:
-encoding: "console"
-
-# encoder
-encoderConfig:
-  messageKey: "message"
-  levelKey: "level"
-  timeKey: "time"
-  nameKey: "logger"
-  callerKey: "caller"
-  stacktraceKey: "stacktrace"
-  lineEnding: ""
-  levelEncoder: "capital"
-  timeEncoder: "iso8601"
-  durationEncoder: "seconds"
-  callerEncoder: "short"
-  nameEncoder: ""
-
-outputPaths:
-  - "stderr"
-errorOutputPaths:
-  - "stderr"
-initialFields:
diff --git a/registry/zookeeper/go-server/conf/server.yml b/registry/zookeeper/go-server/conf/server.yml
index af90434..bb45535 100644
--- a/registry/zookeeper/go-server/conf/server.yml
+++ b/registry/zookeeper/go-server/conf/server.yml
@@ -1,55 +1,24 @@
-# dubbo server yaml configure file
-
-# application config
-application:
-  organization: "dubbo.io"
-  name: "UserInfoServer"
-  module: "dubbo-go user-info server"
-  version: "0.0.1"
-  environment: "dev"
-
-# registry config
-registries:
-  "demoZk":
-    protocol: "zookeeper"
-    timeout: "3s"
-    address: "127.0.0.1:2181"
-
-# service config
-services:
-  "UserProvider":
-    registry: "demoZk"
-    protocol: "dubbo"
-    interface: "org.apache.dubbo.UserProvider"
-    loadbalance: "random"
-    warmup: "100"
-    cluster: "failover"
-    methods:
-      - name: "GetUser"
-        retries: 1
-        loadbalance: "random"
-
-# protocol config
-protocols:
-  "dubbo":
-    name: "dubbo"
-    port: 20000
-
-protocol_conf:
-  dubbo:
-    session_number: 700
-    session_timeout: "180s"
-    getty_session_param:
-      compress_encoding: false
-      tcp_no_delay: true
-      tcp_keep_alive: true
-      keep_alive_period: "120s"
-      tcp_r_buf_size: 262144
-      tcp_w_buf_size: 65536
-      pkg_rq_size: 1024
-      pkg_wq_size: 512
-      tcp_read_timeout: "1s"
-      tcp_write_timeout: "5s"
-      wait_timeout: "1s"
-      max_msg_len: 1024000
-      session_name: "server"
+dubbo:
+  registries:
+    zk:
+      timeout: 10s
+      address: zookeeper://127.0.0.1:2181
+  protocols:
+    dubbo:
+      name: dubbo
+      port: 20000
+  provider:
+    register: true
+    registry: zk
+    services:
+      UserProvider:
+        registry: zk
+        protocol: dubbo
+        interface: org.apache.dubbo.UserService
+        loadbalance: random
+        warmup: 100
+        cluster: failover
+        methods:
+          - name: GetUser
+            retries: 1
+            loadbalance: random
\ No newline at end of file
diff --git a/registry/zookeeper/go-server/pkg/user.go b/registry/zookeeper/go-server/pkg/user.go
index 8e34bf0..e9c2e56 100644
--- a/registry/zookeeper/go-server/pkg/user.go
+++ b/registry/zookeeper/go-server/pkg/user.go
@@ -19,6 +19,7 @@ package pkg
 
 import (
 	"context"
+	hessian "github.com/apache/dubbo-go-hessian2"
 	"time"
 )
 
@@ -26,6 +27,10 @@ import (
 	"github.com/dubbogo/gost/log"
 )
 
+func init() {
+	hessian.RegisterPOJO(new(User))
+}
+
 type User struct {
 	ID   string
 	Name string