You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/05/11 06:16:48 UTC

[dubbo-go-samples] branch 3.0 updated: Ftr/dubbo3 (#81)

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

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


The following commit(s) were added to refs/heads/3.0 by this push:
     new 3a17ab1  Ftr/dubbo3 (#81)
3a17ab1 is described below

commit 3a17ab1e7beee901ed431f6192aab194ac653a15
Author: Laurence <45...@users.noreply.github.com>
AuthorDate: Tue May 11 14:16:42 2021 +0800

    Ftr/dubbo3 (#81)
    
    * feat: add dubbo3 demo
    
    * fix
    
    * fix
    
    * fix: 3.0
    
    * fix
    
    * fix: add
    
    * fix: add unary/stream bigdata test
    
    * fix
    
    * fix
    
    * fix
    
    * fix: fix dubbo3 example
    
    * fix: change to h2 base
    
    * fix
    
    * fix
    
    * fix: change to new dubbo interface
    
    * fix: change demo
    
    * fix: refresh 3.0 samples
    
    * delete unused test
    
    * fix: change to latest dubbogo
    
    * fix: change router sample
    
    * fix: change samples struct
    
    * fixï: add 3.0 readme
    
    * fix: fix integrate test
    
    * fix: change dubbo-go pkg name
    
    * fix: add zk servicedisc sample
    
    * GetId -> GetID
    
    Co-authored-by: 382673304@qq.com <38...@qq.com>
    Co-authored-by: AlexStocks <al...@foxmail.com>
---
 .run/router/router-client.run.xml                  |   17 +
 .run/router/router-server.run.xml                  |   15 +
 .run/router/router-server2.run.xml                 |   15 +
 .run/triple/go-server.run.xml                      |   15 +
 .run/triple/gojava-go-client.run.xml               |   15 +
 .run/triple/grpc-server.run.xml                    |   11 +
 .run/triple/grpc-stream-client.run.xml             |   11 +
 .run/triple/grpc-unary-client.run.xml              |   11 +
 .run/triple/triple-server.run.xml                  |   15 +
 .run/triple/triple-stream-client.run.xml           |   15 +
 .run/triple/triple-unary-client.run.xml            |   15 +
 .run/triple/triplego-hessian-client.run.xml        |   15 +
 .run/triple/triplego-hessian-server.run.xml        |   15 +
 .run/zk-server.run.xml                             |   15 +
 README_zh.md                                       |    2 +-
 async/go-client/cmd/client.go                      |   16 +-
 async/go-client/pkg/user.go                        |    6 +-
 async/go-server/cmd/server.go                      |   18 +-
 async/go-server/pkg/user.go                        |    2 +-
 async/go-server/tests/integration/main_test.go     |   10 +-
 .../tests/integration/userprovider_test.go         |   14 +-
 attachment/go-client/cmd/client.go                 |   18 +-
 attachment/go-server/cmd/server.go                 |   18 +-
 attachment/go-server/pkg/user.go                   |    4 +-
 .../go-server/tests/integration/main_test.go       |   18 +-
 .../tests/integration/userprovider_test.go         |    2 +-
 chain/README.md                                    |    6 +-
 chain/README_zh.md                                 |    4 +-
 chain/backend/cmd/server.go                        |   20 +-
 chain/backend/pkg/cat_service.go                   |    4 +-
 chain/backend/pkg/dog_service.go                   |    4 +-
 chain/backend/pkg/lion_service.go                  |    4 +-
 chain/backend/pkg/tiger_service.go                 |    4 +-
 chain/backend/tests/integration/main_test.go       |   26 +-
 chain/backend/tests/integration/services_test.go   |    4 +-
 chain/frontend/cmd/client.go                       |   18 +-
 chain/middle/cmd/server.go                         |   20 +-
 chain/middle/pkg/american_service.go               |    6 +-
 chain/middle/pkg/chinese_service.go                |    6 +-
 chain/middle/tests/integration/main_test.go        |   18 +-
 config-api/go-client/cmd/client.go                 |   16 +-
 config-api/go-server/cmd/server.go                 |   18 +-
 config-api/go-server/pkg/user.go                   |    2 +-
 .../go-server/tests/integration/main_test.go       |   18 +-
 configcenter/README.md                             |    2 +-
 configcenter/README_zh.md                          |    2 +-
 configcenter/apollo/go-client/cmd/client.go        |   18 +-
 configcenter/apollo/go-server/cmd/server.go        |   21 +-
 configcenter/apollo/go-server/pkg/user.go          |    2 +-
 .../go-server/tests/integration/main_test.go       |   20 +-
 configcenter/nacos/go-client/cmd/client.go         |   18 +-
 configcenter/nacos/go-server/cmd/server.go         |   20 +-
 configcenter/nacos/go-server/pkg/user.go           |    2 +-
 .../nacos/go-server/tests/integration/main_test.go |   20 +-
 configcenter/zookeeper/go-client/cmd/client.go     |   18 +-
 configcenter/zookeeper/go-server/cmd/server.go     |   20 +-
 configcenter/zookeeper/go-server/pkg/user.go       |    2 +-
 .../go-server/tests/integration/main_test.go       |   18 +-
 context/go-client/cmd/client.go                    |   18 +-
 context/go-server/cmd/server.go                    |   18 +-
 context/go-server/pkg/user.go                      |    4 +-
 context/go-server/tests/integration/main_test.go   |   18 +-
 .../tests/integration/userprovider_test.go         |    2 +-
 direct/README.md                                   |    4 +-
 direct/README_zh.md                                |    4 +-
 direct/go-client/cmd/client.go                     |   16 +-
 direct/go-server/cmd/server.go                     |   18 +-
 direct/go-server/pkg/user.go                       |    2 +-
 direct/go-server/tests/integration/main_test.go    |   18 +-
 docker/go-client/cmd/client.go                     |   16 +-
 docker/go-server/cmd/server.go                     |   18 +-
 docker/go-server/pkg/user.go                       |    2 +-
 docker/go-server/tests/integration/main_test.go    |   18 +-
 filter/custom/README.md                            |    2 +-
 filter/custom/README_zh.md                         |    2 +-
 filter/custom/go-client/cmd/client.go              |   16 +-
 filter/custom/go-server/cmd/server.go              |   18 +-
 filter/custom/go-server/pkg/custom_filter.go       |    8 +-
 filter/custom/go-server/pkg/user.go                |    2 +-
 .../go-server/tests/integration/main_test.go       |   18 +-
 filter/sentinel/go-client/cmd/client.go            |   16 +-
 filter/sentinel/go-server/cmd/server.go            |   18 +-
 filter/sentinel/go-server/pkg/user.go              |    2 +-
 .../go-server/tests/integration/main_test.go       |   18 +-
 filter/tpslimit/go-client/cmd/client.go            |   16 +-
 filter/tpslimit/go-server/cmd/server.go            |   18 +-
 filter/tpslimit/go-server/pkg/limit_strategy.go    |    4 +-
 filter/tpslimit/go-server/pkg/reject_handler.go    |   10 +-
 filter/tpslimit/go-server/pkg/user.go              |    2 +-
 .../go-server/tests/integration/main_test.go       |   18 +-
 game/go-server-game/cmd/server.go                  |   76 +-
 game/go-server-game/pkg/consumer.go                |    2 +-
 game/go-server-game/pkg/main.go                    |   14 +-
 game/go-server-game/pkg/provider.go                |   58 +-
 .../tests/integration/gameprovider_test.go         |   38 +-
 game/go-server-game/tests/integration/main_test.go |   44 +-
 game/go-server-gate/cmd/server.go                  |  130 +-
 game/go-server-gate/pkg/consumer.go                |   20 +-
 game/go-server-gate/pkg/main.go                    |   14 +-
 game/go-server-gate/pkg/provider.go                |   18 +-
 .../tests/integration/gateprovider_test.go         |   22 +-
 game/go-server-gate/tests/integration/main_test.go |   44 +-
 game/pkg/consumer/game/basketball.go               |   12 +-
 game/pkg/consumer/game/jump.go                     |   14 +-
 game/pkg/consumer/gate/basketball.go               |    8 +-
 game/pkg/consumer/gate/jump.go                     |    8 +-
 game/pkg/pojo/result.go                            |   10 +-
 general/dubbo/go-client/cmd/client.go              |   16 +-
 general/dubbo/go-server/cmd/server.go              |   28 +-
 general/dubbo/go-server/pkg/user_provider.go       |    2 +-
 .../dubbo/go-server/tests/integration/main_test.go |   20 +-
 general/dubbo3/README.md                           |   24 +
 general/dubbo3/README_zh.md                        |   24 +
 general/dubbo3/hessian2/README.md                  |   26 +
 general/dubbo3/hessian2/README_zh.md               |   26 +
 .../dubbo3/hessian2}/go-client/cmd/client.go       |   20 +-
 general/dubbo3/hessian2/go-client/conf/client.yml  |   32 +
 .../dubbo3/hessian2/go-client/conf}/log.yml        |    5 +-
 .../dubbo3/hessian2/go-client/pkg/hello.go         |    6 +-
 .../dubbo3/hessian2}/go-server/cmd/server.go       |   33 +-
 general/dubbo3/hessian2/go-server/conf/client.yml  |   32 +
 .../dubbo3/hessian2/go-server/conf}/log.yml        |    5 +-
 general/dubbo3/hessian2/go-server/conf/server.yml  |   30 +
 .../hessian2}/go-server/docker/docker-compose.yml  |    0
 .../dubbo3/hessian2/go-server/pkg/greeter.go       |   12 +-
 .../go-server/tests/integration/main_test.go       |   20 +-
 .../tests/integration/userprovider_test.go         |    1 +
 .../org/apache/dubbo/sample/hello/Helloworld.java  | 1381 ++++++++++++++++++++
 general/dubbo3/hessian2/java-client/pom.xml        |  151 +++
 general/dubbo3/hessian2/java-client/run.sh         |    2 +
 .../com/apache/dubbo/sample/basic/ApiConsumer.java |   59 +
 .../com/apache/dubbo/sample/basic/IGreeter.java    |   30 +
 .../java/com/apache/dubbo/sample/basic/User.java   |    9 +
 .../java-client/src/main/proto/helloworld.proto    |   28 +
 .../src/main/resources/log4j.properties            |   26 +
 .../org/apache/dubbo/sample/hello/Helloworld.java  | 1381 ++++++++++++++++++++
 general/dubbo3/hessian2/java-server/pom.xml        |  153 +++
 general/dubbo3/hessian2/java-server/run.sh         |    2 +
 .../com/apache/dubbo/sample/basic/ApiProvider.java |   39 +
 .../com/apache/dubbo/sample/basic/IGreeter.java    |   29 +
 .../apache/dubbo/sample/basic/IGreeter1Impl.java   |   31 +
 .../java/com/apache/dubbo/sample/basic/User.java   |    9 +
 .../java-server/src/main/proto/helloworld.proto    |   28 +
 .../src/main/resources/log4j.properties            |   26 +
 general/dubbo3/pb/dubbogo-grpc/README.md           |  186 +++
 general/dubbo3/pb/dubbogo-grpc/README_zh.md        |  187 +++
 .../dubbogo-grpc/protobuf/dubbo3}/helloworld.pb.go |  220 +++-
 .../dubbogo-grpc/protobuf/dubbo3/helloworld.proto  |   36 +-
 .../pb/dubbogo-grpc/protobuf/dubbo3}/protobuf.mk   |    4 +-
 .../pb/dubbogo-grpc/protobuf/grpc/helloworld.pb.go |  407 ++++++
 .../pb/dubbogo-grpc/protobuf/grpc/helloworld.proto |   37 +-
 .../dubbogo-grpc/server/dubbogo-server/cmd/env.sh  |    2 +
 .../server/dubbogo-server}/cmd/server.go           |   26 +-
 .../server/dubbogo-server/conf/client.yml          |   22 +
 .../server/dubbogo-server}/conf/log.yml            |    2 +-
 .../server/dubbogo-server/conf/server.yml          |   28 +
 .../server/dubbogo-server/pkg/greeter.go           |   83 ++
 .../pb/dubbogo-grpc/server/grpcgo-server/main.go   |   90 ++
 .../stream-client/dubbogo-client/cmd/client.go     |   88 ++
 .../stream-client/dubbogo-client/cmd/env.sh        |    2 +
 .../stream-client/dubbogo-client/conf/client.yml   |   23 +
 .../stream-client/dubbogo-client}/conf/log.yml     |    2 +-
 .../stream-client/grpcgo-client/main.go}           |   53 +-
 .../unary-client/dubbogo-client/cmd/client.go      |   74 ++
 .../unary-client/dubbogo-client/cmd/env.sh         |    2 +
 .../unary-client/dubbogo-client/conf/client.yml    |   23 +
 .../unary-client/dubbogo-client}/conf/log.yml      |    2 +-
 .../unary-client/grpcgo-client/main.go}            |   37 +-
 general/dubbo3/pb/dubbogo-java/README.md           |   22 +
 general/dubbo3/pb/dubbogo-java/README_zh.md        |   21 +
 .../pb/dubbogo-java}/go-client/cmd/client.go       |   44 +-
 .../dubbo3/pb/dubbogo-java/go-client/cmd/env.sh    |    2 +
 .../pb/dubbogo-java/go-client/conf/client.yml      |   31 +
 .../dubbo3/pb/dubbogo-java}/go-client/conf/log.yml |    2 +-
 .../pb/dubbogo-java/go-client/pkg}/hello.go        |   19 +-
 .../dubbo3/pb/dubbogo-java/go-server/cmd/env.sh    |    2 +
 .../pb/dubbogo-java}/go-server/cmd/server.go       |   26 +-
 .../pb/dubbogo-java/go-server/conf/client.yml      |   31 +
 .../dubbo3/pb/dubbogo-java/go-server}/conf/log.yml |    2 +-
 .../pb/dubbogo-java/go-server/conf/server.yml      |   29 +
 .../pb/dubbogo-java/go-server/pkg}/greeter.go      |   23 +-
 .../org/apache/dubbo/sample/hello/Helloworld.java  | 1381 ++++++++++++++++++++
 general/dubbo3/pb/dubbogo-java/java-client/pom.xml |  151 +++
 general/dubbo3/pb/dubbogo-java/java-client/run.sh  |    2 +
 .../com/apache/dubbo/sample/basic/ApiConsumer.java |   54 +
 .../com/apache/dubbo/sample/basic/IGreeter.java    |   31 +
 .../java-client/src/main/proto/helloworld.proto    |   28 +
 .../src/main/resources/log4j.properties            |   26 +
 .../org/apache/dubbo/sample/hello/Helloworld.java  | 1381 ++++++++++++++++++++
 general/dubbo3/pb/dubbogo-java/java-server/pom.xml |  153 +++
 general/dubbo3/pb/dubbogo-java/java-server/run.sh  |    2 +
 .../com/apache/dubbo/sample/basic/ApiProvider.java |   39 +
 .../com/apache/dubbo/sample/basic/IGreeter.java    |   30 +
 .../apache/dubbo/sample/basic/IGreeter1Impl.java   |   34 +
 .../java-server/src/main/proto/helloworld.proto    |   28 +
 .../src/main/resources/log4j.properties            |   26 +
 .../pb/dubbogo-java/protobuf}/helloworld.pb.go     |  117 +-
 .../pb/dubbogo-java/protobuf/helloworld.proto      |   35 +-
 .../pb/dubbogo-java}/protobuf/protobuf.mk          |    4 +-
 general/grpc/go-client/cmd/client.go               |   18 +-
 general/grpc/go-server/cmd/server.go               |   18 +-
 .../grpc/go-server/tests/integration/main_test.go  |   18 +-
 general/grpc/protobuf/helloworld.pb.go             |    6 +-
 general/grpc/protobuf/protobuf.mk                  |    2 +-
 general/grpc/stream/go-client/app/client.go        |   20 +-
 general/grpc/stream/go-client/app/hello.go         |    2 +-
 general/grpc/stream/go-client/app/helloworld.pb.go |    6 +-
 general/grpc/stream/go-server/app/greeter.go       |    4 +-
 general/grpc/stream/go-server/app/helloworld.pb.go |    6 +-
 general/grpc/stream/go-server/app/server.go        |   18 +-
 general/grpc/unary/go-client/app/client.go         |   16 +-
 general/grpc/unary/go-client/app/hello.go          |    1 -
 general/grpc/unary/go-client/app/helloworld.pb.go  |    6 +-
 general/grpc/unary/go-server/app/helloworld.pb.go  |    6 +-
 general/grpc/unary/go-server/app/server.go         |   18 +-
 general/jsonrpc/go-client/app/client.go            |   18 +-
 general/jsonrpc/go-client/app/user.go              |    2 +-
 general/jsonrpc/go-server/app/server.go            |   18 +-
 general/jsonrpc/go-server/app/user_provider.go     |    2 +-
 general/jsonrpc/go-server/app/user_provider1.go    |    2 +-
 general/jsonrpc/go-server/app/user_provider2.go    |    2 +-
 general/rest/go-client/cmd/client.go               |   18 +-
 general/rest/go-client/pkg/user.go                 |    2 +-
 general/rest/go-server/cmd/server.go               |   22 +-
 general/rest/go-server/pkg/user_provider.go        |    2 +-
 general/rest/go-server/pkg/user_provider1.go       |    2 +-
 general/rest/go-server/pkg/user_provider2.go       |    2 +-
 generic/go-client/cmd/client.go                    |   18 +-
 generic/go-server/cmd/server.go                    |   18 +-
 generic/go-server/pkg/user.go                      |    2 +-
 generic/go-server/tests/integration/main_test.go   |   18 +-
 .../tests/integration/userprovider_test.go         |    2 +-
 go.mod                                             |   39 +-
 go.sum                                             |  385 +++++-
 group/go-client/cmd/client.go                      |   16 +-
 group/go-server-group-a/cmd/server.go              |   18 +-
 group/go-server-group-a/pkg/user.go                |    2 +-
 .../tests/integration/main_test.go                 |   18 +-
 group/go-server-group-b/cmd/server.go              |   18 +-
 group/go-server-group-b/pkg/user.go                |    2 +-
 .../tests/integration/main_test.go                 |   18 +-
 helloworld/go-client/cmd/client.go                 |   16 +-
 helloworld/go-server/cmd/server.go                 |   18 +-
 .../go-server/tests/integration/main_test.go       |   18 +-
 metric/README.md                                   |    2 +-
 metric/README_zh.md                                |    2 +-
 metric/go-client/cmd/client.go                     |   16 +-
 metric/go-server/cmd/server.go                     |   20 +-
 metric/go-server/pkg/user.go                       |    2 +-
 metric/go-server/tests/integration/main_test.go    |   18 +-
 multi-registry/go-client/cmd/client.go             |   18 +-
 multi-registry/go-server/cmd/server.go             |   20 +-
 multi-registry/go-server/pkg/user.go               |    2 +-
 .../go-server/tests/integration/main_test.go       |   16 +-
 multi-zone/go-client/cmd/client.go                 |   18 +-
 .../go-client/tests/integration/main_test.go       |   16 +-
 .../tests/integration/userprovider_test.go         |    2 +-
 multi-zone/go-server-hz/cmd/server.go              |   18 +-
 multi-zone/go-server-hz/pkg/user.go                |    2 +-
 multi-zone/go-server-sh/cmd/server.go              |   18 +-
 multi-zone/go-server-sh/pkg/user.go                |    2 +-
 registry/etcd/go-client/cmd/client.go              |   16 +-
 registry/etcd/go-server/cmd/server.go              |   18 +-
 registry/etcd/go-server/pkg/user.go                |    2 +-
 .../etcd/go-server/tests/integration/main_test.go  |   16 +-
 registry/nacos/go-client/cmd/client.go             |   16 +-
 registry/nacos/go-server/cmd/server.go             |   18 +-
 registry/nacos/go-server/pkg/user.go               |    2 +-
 .../nacos/go-server/tests/integration/main_test.go |   16 +-
 registry/servicediscovery/consul/README.md         |    6 +-
 registry/servicediscovery/consul/README_zh.md      |    6 +-
 .../consul/go-client/cmd/client.go                 |   25 +-
 .../consul/go-server/cmd/server.go                 |   27 +-
 .../consul/go-server/pkg/pojo/user.go              |    2 +-
 .../go-server/tests/integration/main_test.go       |   28 +-
 .../servicediscovery/etcd/go-client/cmd/client.go  |   25 +-
 .../servicediscovery/etcd/go-server/cmd/server.go  |   27 +-
 .../servicediscovery/etcd/go-server/pkg/user.go    |    2 +-
 .../etcd/go-server/tests/integration/main_test.go  |   26 +-
 .../servicediscovery/file/go-client/cmd/client.go  |   24 +-
 .../servicediscovery/file/go-server/cmd/server.go  |   28 +-
 .../servicediscovery/file/go-server/pkg/user.go    |    2 +-
 .../file/go-server/tests/integration/main_test.go  |   24 +-
 .../servicediscovery/nacos/go-client/cmd/client.go |   27 +-
 .../servicediscovery/nacos/go-server/cmd/server.go |   29 +-
 .../servicediscovery/nacos/go-server/pkg/user.go   |    2 +-
 .../nacos/go-server/tests/integration/main_test.go |   28 +-
 .../zookeeper/go-client/cmd/client.go              |   43 +-
 .../zookeeper/go-client/conf/client.yml            |    1 +
 .../zookeeper/go-client/pkg/user.go                |    2 +-
 .../zookeeper/go-server/cmd/server.go              |   28 +-
 .../zookeeper/go-server/conf/client.yml            |    1 +
 .../zookeeper/go-server/conf/server.yml            |    1 +
 .../zookeeper/go-server/pkg/user.go                |    4 +-
 .../go-server/tests/integration/main_test.go       |   39 +-
 .../tests/integration/userprovider_test.go         |    2 +-
 .../servicediscovery/zookeeper/java-client/pom.xml |  115 ++
 .../servicediscovery/zookeeper/java-client/run.sh  |    2 +
 .../main/java/org/apache/dubbo/Application.java    |   31 +-
 .../src/main/java/org/apache/dubbo}/User.java      |   63 +-
 .../main/java/org/apache/dubbo}/UserProvider.java  |    8 +-
 .../src/main/resources/dubbo.properties            |    1 +
 .../src/main/resources/log4j.properties            |    7 +
 .../src/main/resources/spring/dubbo-consumer.xml   |   33 +
 .../servicediscovery/zookeeper/java-server/pom.xml |  122 ++
 .../servicediscovery/zookeeper/java-server/run.sh  |    2 +
 .../main/java/org/apache/dubbo/Application.java    |   15 +-
 .../src/main/java/org/apache/dubbo}/User.java      |   57 +-
 .../main/java/org/apache/dubbo/UserProvider.java   |   10 +-
 .../java/org/apache/dubbo}/UserProviderImpl.java   |   20 +-
 .../src/main/resources/dubbo.properties            |    1 +
 .../src/main/resources/log4j.properties            |    7 +
 .../src/main/resources/spring/dubbo-provider.xml   |   38 +
 router/README.md                                   |   35 -
 router/condition/go-client/conf/router_config.yml  |   13 -
 router/condition/go-server/app/user.go             |   63 -
 router/condition/go-server/cmd/server.go           |   77 --
 router/condition/go-server/conf/router_config.yml  |   13 -
 router/condition/go-server/pkg/user.go             |   63 -
 router/condition/go-server/profiles/dev/server.yml |   92 --
 router/tag/go-client/app/client.go                 |  128 --
 router/tag/go-client/assembly/bin/load.sh          |  203 ---
 .../tag/go-client/assembly/common/app.properties   |   24 -
 router/tag/go-client/assembly/common/build.sh      |   89 --
 router/tag/go-client/assembly/linux/dev.sh         |   36 -
 router/tag/go-client/assembly/linux/release.sh     |   35 -
 router/tag/go-client/assembly/linux/test.sh        |   35 -
 router/tag/go-client/assembly/mac/dev.sh           |   36 -
 router/tag/go-client/assembly/mac/release.sh       |   34 -
 router/tag/go-client/assembly/mac/test.sh          |   34 -
 router/tag/go-client/assembly/windows/dev.sh       |   34 -
 router/tag/go-client/assembly/windows/release.sh   |   34 -
 router/tag/go-client/assembly/windows/test.sh      |   34 -
 router/tag/go-client/profiles/dev/client.yml       |   62 -
 .../tag/go-client/profiles/dev/router_config.yml   |   14 -
 router/tag/go-server/app/server.go                 |   78 --
 router/tag/go-server/app/user.go                   |   63 -
 router/tag/go-server/assembly/bin/load.sh          |  151 ---
 .../tag/go-server/assembly/common/app.properties   |   23 -
 router/tag/go-server/assembly/common/build.sh      |   80 --
 router/tag/go-server/assembly/linux/dev.sh         |   36 -
 router/tag/go-server/assembly/linux/release.sh     |   36 -
 router/tag/go-server/assembly/linux/test.sh        |   36 -
 router/tag/go-server/assembly/mac/dev.sh           |   36 -
 router/tag/go-server/assembly/mac/release.sh       |   36 -
 router/tag/go-server/assembly/mac/test.sh          |   36 -
 router/tag/go-server/assembly/windows/dev.sh       |   36 -
 router/tag/go-server/assembly/windows/release.sh   |   36 -
 router/tag/go-server/assembly/windows/test.sh      |   36 -
 router/tag/go-server/profiles/dev/log.yml          |   28 -
 router/tag/go-server/profiles/dev/server.yml       |   95 --
 router/tag/java-client/build.sh                    |   21 -
 router/tag/java-client/pom.xml                     |  211 ---
 .../tag/java-client/src/main/assembly/assembly.xml |   43 -
 .../src/main/java/com/ikurento/user/Consumer.java  |   61 -
 .../java/com/ikurento/user/EmbeddedZooKeeper.java  |  250 ----
 .../main/java/com/ikurento/user/UserProvider.java  |   18 -
 .../src/main/java/com/ikurento/user/ZKTools.java   |   88 --
 .../resources/META-INF/spring/dubbo.consumer.xml   |   37 -
 .../src/main/resources/META-INF/spring/service.xml |   27 -
 .../src/main/resources/log4j.properties            |   19 -
 router/tag/java-server/build.sh                    |   20 -
 router/tag/java-server/pom.xml                     |  210 ---
 router/tag/java-server/script/debug.sh             |   23 -
 .../tag/java-server/src/main/assembly/assembly.xml |   43 -
 .../java/com/ikurento/user/EmbeddedZooKeeper.java  |  250 ----
 .../src/main/java/com/ikurento/user/ZKTools.java   |   89 --
 .../resources/META-INF/spring/dubbo.provider.xml   |   34 -
 .../resources/META-INF/spring/dubbo.provider2.xml  |   34 -
 .../src/main/resources/log4j.properties            |   20 -
 router/uniform-router/README.md                    |   31 +
 router/uniform-router/README_zh.md                 |   31 +
 router/uniform-router/file/README.md               |   97 ++
 router/uniform-router/file/README_zh.md            |  105 ++
 .../file}/go-client/cmd/client.go                  |   44 +-
 .../uniform-router/file/go-client/conf/client.yml  |   27 +
 .../file/go-client/conf/dest_rule.yml              |   11 +
 .../file}/go-client/conf/log.yml                   |    0
 .../file/go-client/conf/virtual_service.yml        |   22 +
 .../file}/go-client/pkg/user.go                    |    2 +-
 .../uniform-router/file}/go-server/cmd/server.go   |   24 +-
 .../uniform-router/file/go-server/conf/client.yml  |   28 +
 .../file/go-server}/conf/log.yml                   |    0
 .../file}/go-server/conf/server.yml                |   22 +-
 .../file}/go-server/docker/docker-compose.yml      |    0
 .../uniform-router/file}/go-server/pkg/user.go     |    4 +-
 .../file}/go-server/tests/integration/main_test.go |   19 +-
 .../tests/integration/userprovider_test.go         |    0
 .../uniform-router/file/go-server2}/cmd/server.go  |   24 +-
 .../uniform-router/file/go-server2/conf/client.yml |   28 +
 .../file/go-server2}/conf/log.yml                  |    0
 .../file/go-server2}/conf/server.yml               |   22 +-
 .../file/go-server2}/docker/docker-compose.yml     |    0
 .../uniform-router/file/go-server2}/pkg/user.go    |    4 +-
 .../go-server2}/tests/integration/main_test.go     |   20 +-
 .../tests/integration/userprovider_test.go         |    0
 router/uniform-router/k8s/README.md                |   39 +
 router/uniform-router/k8s/README_zh.md             |   39 +
 router/uniform-router/k8s/build.sh                 |   26 +
 router/uniform-router/k8s/deploy/client.yml        |   21 +
 router/uniform-router/k8s/deploy/crd.yml           |   43 +
 router/uniform-router/k8s/deploy/server.yml        |   21 +
 router/uniform-router/k8s/deploy/server2.yml       |   21 +
 router/uniform-router/k8s/deploy/zk.yml            |   36 +
 router/uniform-router/k8s/go-client/Dockerfile     |   10 +
 .../k8s}/go-client/cmd/client.go                   |   39 +-
 .../uniform-router/k8s/go-client/conf/client.yml   |   24 +
 .../k8s/go-client/conf/dest_rule.yml               |   11 +
 .../k8s/go-client}/conf/log.yml                    |    0
 .../k8s/go-client/conf/virtual_service.yml         |   18 +
 .../uniform-router/k8s}/go-client/pkg/user.go      |    2 +-
 router/uniform-router/k8s/go-server/Dockerfile     |    8 +
 .../uniform-router/k8s}/go-server/cmd/server.go    |   24 +-
 .../k8s}/go-server/conf/client.yml                 |    2 +-
 .../k8s/go-server}/conf/log.yml                    |    0
 .../k8s}/go-server/conf/server.yml                 |   24 +-
 .../k8s}/go-server/docker/docker-compose.yml       |    0
 .../uniform-router/k8s}/go-server/pkg/user.go      |    4 +-
 .../k8s}/go-server/tests/integration/main_test.go  |   20 +-
 .../tests/integration/userprovider_test.go         |    0
 router/uniform-router/k8s/go-server2/Dockerfile    |    8 +
 .../uniform-router/k8s/go-server2}/cmd/server.go   |   24 +-
 .../k8s/go-server2}/conf/client.yml                |    4 +-
 .../k8s/go-server2}/conf/log.yml                   |    0
 .../k8s/go-server2}/conf/server.yml                |   24 +-
 .../k8s/go-server2}/docker/docker-compose.yml      |    0
 .../uniform-router/k8s/go-server2}/pkg/user.go     |    4 +-
 .../k8s/go-server2}/tests/integration/main_test.go |   30 +-
 .../tests/integration/userprovider_test.go         |    0
 seata/client/app/client.go                         |   18 +-
 seata/client/app/svc/svc.go                        |    2 +-
 seata/filter/seata_filter.go                       |    6 +-
 seata/order-svc/app/server.go                      |   18 +-
 seata/product-svc/app/server.go                    |   18 +-
 shop/dubbo/go-service-order/app/order.go           |    2 +-
 shop/dubbo/go-service-order/app/product.go         |    2 +-
 shop/dubbo/go-service-order/app/service.go         |   18 +-
 shop/dubbo/go-service-product/app/product.go       |    2 +-
 shop/dubbo/go-service-product/app/service.go       |   18 +-
 shop/dubbo/go-service-user/app/order.go            |    2 +-
 shop/dubbo/go-service-user/app/service.go          |   18 +-
 start_integrate_test.sh                            |   14 +-
 tls/go-client/cmd/client.go                        |   28 +-
 tls/go-server/cmd/server.go                        |   26 +-
 tls/go-server/pkg/user.go                          |    6 +-
 tracing/dubbo/go-client/app/client.go              |   18 +-
 tracing/dubbo/go-client/app/user.go                |    2 +-
 tracing/dubbo/go-server/app/server.go              |   18 +-
 tracing/dubbo/go-server/app/user.go                |    2 +-
 tracing/grpc/go-client/app/client.go               |   20 +-
 tracing/grpc/go-client/app/hello.go                |    2 +-
 tracing/grpc/go-client/app/helloworld.pb.go        |    6 +-
 tracing/grpc/go-server/app/greeter.go              |    2 +-
 tracing/grpc/go-server/app/helloworld.pb.go        |    6 +-
 tracing/grpc/go-server/app/server.go               |   18 +-
 tracing/jsonrpc/go-client/app/client.go            |   18 +-
 tracing/jsonrpc/go-client/app/user.go              |    2 +-
 tracing/jsonrpc/go-server/app/server.go            |   18 +-
 tracing/jsonrpc/go-server/app/user_provider.go     |    2 +-
 tracing/jsonrpc/go-server/app/user_provider1.go    |    2 +-
 tracing/jsonrpc/go-server/app/user_provider2.go    |    2 +-
 461 files changed, 12135 insertions(+), 5753 deletions(-)

diff --git a/.run/router/router-client.run.xml b/.run/router/router-client.run.xml
new file mode 100644
index 0000000..321b805
--- /dev/null
+++ b/.run/router/router-client.run.xml
@@ -0,0 +1,17 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="router-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="router">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <envs>
+      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/router/uniform-router/file/go-client/conf/log.yml" />
+      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/router/uniform-router/file/go-client/conf/client.yml" />
+      <env name="CONF_VIRTUAL_SERVICE_FILE_PATH" value="$PROJECT_DIR$/router/uniform-router/file/go-client/conf/virtual_service.yml" />
+      <env name="CONF_DEST_RULE_FILE_PATH" value="$PROJECT_DIR$/router/uniform-router/file/go-client/conf/dest_rule.yml" />
+    </envs>
+    <kind value="PACKAGE" />
+    <filePath value="$PROJECT_DIR$/router/uniform-router/file/go-client/cmd/client.go" />
+    <package value="github.com/apache/dubbo-go-samples/router/uniform-router/file/go-client/cmd" />
+    <directory value="$PROJECT_DIR$" />
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/.run/router/router-server.run.xml b/.run/router/router-server.run.xml
new file mode 100644
index 0000000..82b13ca
--- /dev/null
+++ b/.run/router/router-server.run.xml
@@ -0,0 +1,15 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="router-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="router">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <envs>
+      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/router/uniform-router/file/go-server/conf/log.yml" />
+      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/router/uniform-router/file/go-server/conf/server.yml" />
+    </envs>
+    <kind value="PACKAGE" />
+    <filePath value="$PROJECT_DIR$/router/uniform-router/file/go-server2/cmd/server.go" />
+    <package value="github.com/apache/dubbo-go-samples/router/uniform-router/file/go-server/cmd" />
+    <directory value="$PROJECT_DIR$" />
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/.run/router/router-server2.run.xml b/.run/router/router-server2.run.xml
new file mode 100644
index 0000000..9b4a740
--- /dev/null
+++ b/.run/router/router-server2.run.xml
@@ -0,0 +1,15 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="router-server2" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="router">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <envs>
+      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/router/uniform-router/file/go-server2/conf/log.yml" />
+      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/router/uniform-router/file/go-server2/conf/server.yml" />
+    </envs>
+    <kind value="PACKAGE" />
+    <filePath value="$PROJECT_DIR$/router/uniform-router/file/go-server2/cmd/server.go" />
+    <package value="github.com/apache/dubbo-go-samples/router/uniform-router/file/go-server2/cmd" />
+    <directory value="$PROJECT_DIR$" />
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/.run/triple/go-server.run.xml b/.run/triple/go-server.run.xml
new file mode 100644
index 0000000..5401657
--- /dev/null
+++ b/.run/triple/go-server.run.xml
@@ -0,0 +1,15 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="gojava-go-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-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" />
+    </envs>
+    <kind value="PACKAGE" />
+    <filePath value="$PROJECT_DIR$" />
+    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-java/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/gojava-go-client.run.xml b/.run/triple/gojava-go-client.run.xml
new file mode 100644
index 0000000..e4951c1
--- /dev/null
+++ b/.run/triple/gojava-go-client.run.xml
@@ -0,0 +1,15 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="gojava-go-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/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" />
+    </envs>
+    <kind value="PACKAGE" />
+    <filePath value="$PROJECT_DIR$" />
+    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-java/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/grpc-server.run.xml b/.run/triple/grpc-server.run.xml
new file mode 100644
index 0000000..b0f1de0
--- /dev/null
+++ b/.run/triple/grpc-server.run.xml
@@ -0,0 +1,11 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="grpc-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="triple">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <kind value="PACKAGE" />
+    <filePath value="$PROJECT_DIR$" />
+    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/server/grpcgo-server" />
+    <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/grpc-stream-client.run.xml b/.run/triple/grpc-stream-client.run.xml
new file mode 100644
index 0000000..00dc071
--- /dev/null
+++ b/.run/triple/grpc-stream-client.run.xml
@@ -0,0 +1,11 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="grpc-stream-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="triple">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <kind value="PACKAGE" />
+    <filePath value="$PROJECT_DIR$" />
+    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/stream-client/grpcgo-client" />
+    <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/grpc-unary-client.run.xml b/.run/triple/grpc-unary-client.run.xml
new file mode 100644
index 0000000..37e304a
--- /dev/null
+++ b/.run/triple/grpc-unary-client.run.xml
@@ -0,0 +1,11 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="grpc-unary-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="triple">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <kind value="PACKAGE" />
+    <filePath value="$PROJECT_DIR$" />
+    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/unary-client/grpcgo-client" />
+    <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/triple-server.run.xml b/.run/triple/triple-server.run.xml
new file mode 100644
index 0000000..d8f78df
--- /dev/null
+++ b/.run/triple/triple-server.run.xml
@@ -0,0 +1,15 @@
+<component name="ProjectRunConfigurationManager">
+  <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$" />
+    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-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/triple-stream-client.run.xml b/.run/triple/triple-stream-client.run.xml
new file mode 100644
index 0000000..845e60a
--- /dev/null
+++ b/.run/triple/triple-stream-client.run.xml
@@ -0,0 +1,15 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="triple-stream-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/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" />
+    </envs>
+    <kind value="PACKAGE" />
+    <filePath value="$PROJECT_DIR$" />
+    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-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/triple-unary-client.run.xml b/.run/triple/triple-unary-client.run.xml
new file mode 100644
index 0000000..24671e3
--- /dev/null
+++ b/.run/triple/triple-unary-client.run.xml
@@ -0,0 +1,15 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="triple-unary-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/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" />
+    </envs>
+    <kind value="PACKAGE" />
+    <filePath value="$PROJECT_DIR$" />
+    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-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/triplego-hessian-client.run.xml b/.run/triple/triplego-hessian-client.run.xml
new file mode 100644
index 0000000..5d7d768
--- /dev/null
+++ b/.run/triple/triplego-hessian-client.run.xml
@@ -0,0 +1,15 @@
+<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" />
+    <filePath value="$PROJECT_DIR$" />
+    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/hessian2/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/triplego-hessian-server.run.xml b/.run/triple/triplego-hessian-server.run.xml
new file mode 100644
index 0000000..a6942c0
--- /dev/null
+++ b/.run/triple/triplego-hessian-server.run.xml
@@ -0,0 +1,15 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="triplego-hessian-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/hessian2/go-server/conf/log.yml" />
+      <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$" />
+    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/hessian2/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/zk-server.run.xml b/.run/zk-server.run.xml
new file mode 100644
index 0000000..19a0ba3
--- /dev/null
+++ b/.run/zk-server.run.xml
@@ -0,0 +1,15 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="zk-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="v3service-discovery">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <envs>
+      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/registry/serviecdiscovery/zookeeper/go-server/conf/log.yml" />
+      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/registry/servicediscovery/zookeeper/go-server/conf/server.yml" />
+    </envs>
+    <kind value="PACKAGE" />
+    <filePath value="$PROJECT_DIR$" />
+    <package value="github.com/apache/dubbo-go-samples/registry/servicediscovery/zookeeper/go-server/cmd" />
+    <directory value="$PROJECT_DIR$" />
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/README_zh.md b/README_zh.md
index 10aee85..35974da 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -14,7 +14,7 @@
 * helloworld: 入门例子
 * multi_registry: 多注册
 * registry: 展示与不同注册中心的对接,包含了 nacos、etcd、kubernetes 和 servicediscovery
-* router: 展示了不同的路由,包含了 condition 和 tag
+* router: 展示了 dubbo3 统一路由规则的使用,包括基于文件路由配置和k8s环境下的动态路由配置
 * seata: 展示了与 seata 的对接
 * shop: 一个在线商店的小例子
 * tracing: 链路追踪
diff --git a/async/go-client/cmd/client.go b/async/go-client/cmd/client.go
index 62a80b2..150b54b 100644
--- a/async/go-client/cmd/client.go
+++ b/async/go-client/cmd/client.go
@@ -24,15 +24,15 @@ 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/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/async/go-client/pkg/user.go b/async/go-client/pkg/user.go
index 92239d6..9ad1251 100644
--- a/async/go-client/pkg/user.go
+++ b/async/go-client/pkg/user.go
@@ -23,9 +23,9 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/common"
-	"github.com/apache/dubbo-go/protocol"
-	"github.com/apache/dubbo-go/remoting"
+	"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"
 )
 
diff --git a/async/go-server/cmd/server.go b/async/go-server/cmd/server.go
index 315618d..e815fa4 100644
--- a/async/go-server/cmd/server.go
+++ b/async/go-server/cmd/server.go
@@ -26,16 +26,16 @@ 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"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 )
 
 import (
diff --git a/async/go-server/pkg/user.go b/async/go-server/pkg/user.go
index 7a3231a..6555829 100644
--- a/async/go-server/pkg/user.go
+++ b/async/go-server/pkg/user.go
@@ -23,8 +23,8 @@ import (
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/config"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	"github.com/apache/dubbo-go/config"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/async/go-server/tests/integration/main_test.go b/async/go-server/tests/integration/main_test.go
index cb20b83..465a487 100644
--- a/async/go-server/tests/integration/main_test.go
+++ b/async/go-server/tests/integration/main_test.go
@@ -28,11 +28,11 @@ import (
 
 import (
 	hessian "github.com/apache/dubbo-go-hessian2"
-	"github.com/apache/dubbo-go/common"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	"github.com/apache/dubbo-go/protocol"
-	"github.com/apache/dubbo-go/remoting"
+	"dubbo.apache.org/dubbo-go/v3/common"
+	"dubbo.apache.org/dubbo-go/v3/config"
+	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/inmemory"
+	"dubbo.apache.org/dubbo-go/v3/protocol"
+	"dubbo.apache.org/dubbo-go/v3/remoting"
 	gxlog "github.com/dubbogo/gost/log"
 )
 
diff --git a/async/go-server/tests/integration/userprovider_test.go b/async/go-server/tests/integration/userprovider_test.go
index 947d2cb..2dd5a5c 100644
--- a/async/go-server/tests/integration/userprovider_test.go
+++ b/async/go-server/tests/integration/userprovider_test.go
@@ -24,13 +24,13 @@ import (
 	"testing"
 )
 import (
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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"
 )
 
diff --git a/attachment/go-client/cmd/client.go b/attachment/go-client/cmd/client.go
index 0654e5a..f7b6104 100644
--- a/attachment/go-client/cmd/client.go
+++ b/attachment/go-client/cmd/client.go
@@ -30,15 +30,15 @@ import (
 )
 
 import (
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/constant"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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"
 )
 
 var userProvider = new(pkg.UserProvider)
diff --git a/attachment/go-server/cmd/server.go b/attachment/go-server/cmd/server.go
index fa04640..d8445c9 100644
--- a/attachment/go-server/cmd/server.go
+++ b/attachment/go-server/cmd/server.go
@@ -31,15 +31,15 @@ import (
 )
 
 import (
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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"
 )
 
 var (
diff --git a/attachment/go-server/pkg/user.go b/attachment/go-server/pkg/user.go
index 3ef5aa7..c35005b 100644
--- a/attachment/go-server/pkg/user.go
+++ b/attachment/go-server/pkg/user.go
@@ -28,8 +28,8 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/common/constant"
-	"github.com/apache/dubbo-go/config"
+	"dubbo.apache.org/dubbo-go/v3/common/constant"
+	"dubbo.apache.org/dubbo-go/v3/config"
 )
 
 func init() {
diff --git a/attachment/go-server/tests/integration/main_test.go b/attachment/go-server/tests/integration/main_test.go
index 10bc5ca..80ab702 100644
--- a/attachment/go-server/tests/integration/main_test.go
+++ b/attachment/go-server/tests/integration/main_test.go
@@ -24,15 +24,15 @@ import (
 )
 
 import (
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 import (
diff --git a/attachment/go-server/tests/integration/userprovider_test.go b/attachment/go-server/tests/integration/userprovider_test.go
index 5cc9943..7269a2a 100644
--- a/attachment/go-server/tests/integration/userprovider_test.go
+++ b/attachment/go-server/tests/integration/userprovider_test.go
@@ -25,7 +25,7 @@ import (
 	"time"
 )
 import (
-	"github.com/apache/dubbo-go/common/constant"
+	"dubbo.apache.org/dubbo-go/v3/common/constant"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/chain/README.md b/chain/README.md
index 509c764..e797c10 100644
--- a/chain/README.md
+++ b/chain/README.md
@@ -16,7 +16,7 @@ frontend -> middle -> backend
 
 ```golang
 type DogService struct {
-	GetId   func() (int, error)
+	GetID   func() (int, error)
 	GetName func() (string, error)
 	Yell    func() (string, error)
 }
@@ -26,7 +26,7 @@ func (d *DogService) Reference() string {
 }
 
 type TigerService struct {
-	GetId   func() (int, error)
+	GetID   func() (int, error)
 	GetName func() (string, error)
 	Yell    func() (string, error)
 }
@@ -74,4 +74,4 @@ services:
     interface: "org.apache.dubbo.demo.AmericanService"
 ```
 
-Pls. refer to [HOWTO.md](../HOWTO.md) under the root directory to run this sample.
\ No newline at end of file
+Pls. refer to [HOWTO.md](../HOWTO.md) under the root directory to run this sample.
diff --git a/chain/README_zh.md b/chain/README_zh.md
index fe2c8e9..200043a 100644
--- a/chain/README_zh.md
+++ b/chain/README_zh.md
@@ -16,7 +16,7 @@ frontend -> middle -> backend
 
 ```golang
 type DogService struct {
-	GetId   func() (int, error)
+	GetID   func() (int, error)
 	GetName func() (string, error)
 	Yell    func() (string, error)
 }
@@ -26,7 +26,7 @@ func (d *DogService) Reference() string {
 }
 
 type TigerService struct {
-	GetId   func() (int, error)
+	GetID   func() (int, error)
 	GetName func() (string, error)
 	Yell    func() (string, error)
 }
diff --git a/chain/backend/cmd/server.go b/chain/backend/cmd/server.go
index aa9d7df..d30f30a 100644
--- a/chain/backend/cmd/server.go
+++ b/chain/backend/cmd/server.go
@@ -30,16 +30,16 @@ import (
 )
 
 import (
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 var (
diff --git a/chain/backend/pkg/cat_service.go b/chain/backend/pkg/cat_service.go
index d43dffe..0595a3c 100644
--- a/chain/backend/pkg/cat_service.go
+++ b/chain/backend/pkg/cat_service.go
@@ -22,7 +22,7 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/config"
+	"dubbo.apache.org/dubbo-go/v3/config"
 )
 
 func init() {
@@ -32,7 +32,7 @@ func init() {
 type CatService struct {
 }
 
-func (c *CatService) GetId() (int, error) {
+func (c *CatService) GetID() (int, error) {
 	return 1, nil
 }
 
diff --git a/chain/backend/pkg/dog_service.go b/chain/backend/pkg/dog_service.go
index 247a534..059305b 100644
--- a/chain/backend/pkg/dog_service.go
+++ b/chain/backend/pkg/dog_service.go
@@ -22,7 +22,7 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/config"
+	"dubbo.apache.org/dubbo-go/v3/config"
 )
 
 func init() {
@@ -32,7 +32,7 @@ func init() {
 type DogService struct {
 }
 
-func (d *DogService) GetId() (int, error) {
+func (d *DogService) GetID() (int, error) {
 	return 0, nil
 }
 
diff --git a/chain/backend/pkg/lion_service.go b/chain/backend/pkg/lion_service.go
index dbe25ff..f8cbb66 100644
--- a/chain/backend/pkg/lion_service.go
+++ b/chain/backend/pkg/lion_service.go
@@ -22,7 +22,7 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/config"
+	"dubbo.apache.org/dubbo-go/v3/config"
 )
 
 func init() {
@@ -32,7 +32,7 @@ func init() {
 type LionService struct {
 }
 
-func (l *LionService) GetId() (int, error) {
+func (l *LionService) GetID() (int, error) {
 	return 2, nil
 }
 
diff --git a/chain/backend/pkg/tiger_service.go b/chain/backend/pkg/tiger_service.go
index 9eb5673..e7abf67 100644
--- a/chain/backend/pkg/tiger_service.go
+++ b/chain/backend/pkg/tiger_service.go
@@ -22,7 +22,7 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/config"
+	"dubbo.apache.org/dubbo-go/v3/config"
 )
 
 func init() {
@@ -32,7 +32,7 @@ func init() {
 type TigerService struct {
 }
 
-func (t *TigerService) GetId() (int, error) {
+func (t *TigerService) GetID() (int, error) {
 	return 3, nil
 }
 
diff --git a/chain/backend/tests/integration/main_test.go b/chain/backend/tests/integration/main_test.go
index 55c2706..deb6db1 100644
--- a/chain/backend/tests/integration/main_test.go
+++ b/chain/backend/tests/integration/main_test.go
@@ -20,15 +20,15 @@
 package integration
 
 import (
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "dubbo.apache.org/dubbo-go/v3cluster/cluster_impl"
+	_ "dubbo.apache.org/dubbo-go/v3cluster/loadbalance"
+	_ "dubbo.apache.org/dubbo-go/v3common/proxy/proxy_factory"
+	"dubbo.apache.org/dubbo-go/v3config"
+	_ "dubbo.apache.org/dubbo-go/v3filter/filter_impl"
+	_ "dubbo.apache.org/dubbo-go/v3metadata/service/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3registry/zookeeper"
 )
 
 import (
@@ -54,7 +54,7 @@ func TestMain(m *testing.M) {
 }
 
 type CatService struct {
-	GetId   func() (int, error)
+	GetID   func() (int, error)
 	GetName func() (string, error)
 	Yell    func() (string, error)
 }
@@ -64,7 +64,7 @@ func (c *CatService) Reference() string {
 }
 
 type DogService struct {
-	GetId   func() (int, error)
+	GetID   func() (int, error)
 	GetName func() (string, error)
 	Yell    func() (string, error)
 }
@@ -74,7 +74,7 @@ func (d *DogService) Reference() string {
 }
 
 type TigerService struct {
-	GetId   func() (int, error)
+	GetID   func() (int, error)
 	GetName func() (string, error)
 	Yell    func() (string, error)
 }
@@ -84,7 +84,7 @@ func (t *TigerService) Reference() string {
 }
 
 type LionService struct {
-	GetId   func() (int, error)
+	GetID   func() (int, error)
 	GetName func() (string, error)
 	Yell    func() (string, error)
 }
diff --git a/chain/backend/tests/integration/services_test.go b/chain/backend/tests/integration/services_test.go
index 888ba24..9990415 100644
--- a/chain/backend/tests/integration/services_test.go
+++ b/chain/backend/tests/integration/services_test.go
@@ -30,13 +30,13 @@ func TestCat(t *testing.T) {
 	name, err := cat.GetName()
 	assert.Nil(t, err)
 	assert.Equal(t, "Cat", name)
-	id, err := cat.GetId()
+	id, err := cat.GetID()
 	assert.Nil(t, err)
 	assert.Equal(t, 1, id)
 }
 
 func TestTiger(t *testing.T) {
-	id, err := tiger.GetId()
+	id, err := tiger.GetID()
 	assert.Nil(t, err)
 	assert.Equal(t, 3, id)
 }
diff --git a/chain/frontend/cmd/client.go b/chain/frontend/cmd/client.go
index e13ab55..ce5817f 100644
--- a/chain/frontend/cmd/client.go
+++ b/chain/frontend/cmd/client.go
@@ -27,15 +27,15 @@ import (
 )
 
 import (
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 func main() {
diff --git a/chain/middle/cmd/server.go b/chain/middle/cmd/server.go
index 007c5a4..9f862a1 100644
--- a/chain/middle/cmd/server.go
+++ b/chain/middle/cmd/server.go
@@ -30,16 +30,16 @@ import (
 )
 
 import (
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 var (
diff --git a/chain/middle/pkg/american_service.go b/chain/middle/pkg/american_service.go
index 2b367bb..d78ed71 100644
--- a/chain/middle/pkg/american_service.go
+++ b/chain/middle/pkg/american_service.go
@@ -22,11 +22,11 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/config"
+	"dubbo.apache.org/dubbo-go/v3/config"
 )
 
 type CatService struct {
-	GetId   func() (int, error)
+	GetID   func() (int, error)
 	GetName func() (string, error)
 	Yell    func() (string, error)
 }
@@ -36,7 +36,7 @@ func (c *CatService) Reference() string {
 }
 
 type LionService struct {
-	GetId   func() (int, error)
+	GetID   func() (int, error)
 	GetName func() (string, error)
 	Yell    func() (string, error)
 }
diff --git a/chain/middle/pkg/chinese_service.go b/chain/middle/pkg/chinese_service.go
index 4f19fca..f1fb8c1 100644
--- a/chain/middle/pkg/chinese_service.go
+++ b/chain/middle/pkg/chinese_service.go
@@ -22,11 +22,11 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/config"
+	"dubbo.apache.org/dubbo-go/v3/config"
 )
 
 type DogService struct {
-	GetId   func() (int, error)
+	GetID   func() (int, error)
 	GetName func() (string, error)
 	Yell    func() (string, error)
 }
@@ -36,7 +36,7 @@ func (d *DogService) Reference() string {
 }
 
 type TigerService struct {
-	GetId   func() (int, error)
+	GetID   func() (int, error)
 	GetName func() (string, error)
 	Yell    func() (string, error)
 }
diff --git a/chain/middle/tests/integration/main_test.go b/chain/middle/tests/integration/main_test.go
index a45bb1a..213f612 100644
--- a/chain/middle/tests/integration/main_test.go
+++ b/chain/middle/tests/integration/main_test.go
@@ -20,15 +20,15 @@
 package integration
 
 import (
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 import (
diff --git a/config-api/go-client/cmd/client.go b/config-api/go-client/cmd/client.go
index 1427407..eece5cc 100644
--- a/config-api/go-client/cmd/client.go
+++ b/config-api/go-client/cmd/client.go
@@ -24,15 +24,15 @@ 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/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/config-api/go-server/cmd/server.go b/config-api/go-server/cmd/server.go
index da98db0..41f5619 100644
--- a/config-api/go-server/cmd/server.go
+++ b/config-api/go-server/cmd/server.go
@@ -26,16 +26,16 @@ 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"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 )
 
 import (
diff --git a/config-api/go-server/pkg/user.go b/config-api/go-server/pkg/user.go
index 7a3231a..6555829 100644
--- a/config-api/go-server/pkg/user.go
+++ b/config-api/go-server/pkg/user.go
@@ -23,8 +23,8 @@ import (
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/config"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	"github.com/apache/dubbo-go/config"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/config-api/go-server/tests/integration/main_test.go b/config-api/go-server/tests/integration/main_test.go
index f79029c..d75fd3f 100644
--- a/config-api/go-server/tests/integration/main_test.go
+++ b/config-api/go-server/tests/integration/main_test.go
@@ -28,15 +28,15 @@ import (
 
 import (
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 
diff --git a/configcenter/README.md b/configcenter/README.md
index f54230e..3f3c469 100644
--- a/configcenter/README.md
+++ b/configcenter/README.md
@@ -85,7 +85,7 @@ application:
 
 ```go
 import (
-    _ "github.com/apache/dubbo-go/config_center/zookeeper"
+    _ "dubbo.apache.org/dubbo-go/v3/config_center/zookeeper"
 )
 ```
 
diff --git a/configcenter/README_zh.md b/configcenter/README_zh.md
index 39d63b3..38dbbf4 100644
--- a/configcenter/README_zh.md
+++ b/configcenter/README_zh.md
@@ -89,7 +89,7 @@ application:
 
 ```go
 import (
-    _ "github.com/apache/dubbo-go/config_center/zookeeper"
+    _ "dubbo.apache.org/dubbo-go/v3/config_center/zookeeper"
 )
 ```
 
diff --git a/configcenter/apollo/go-client/cmd/client.go b/configcenter/apollo/go-client/cmd/client.go
index 77c760a..d01ff03 100644
--- a/configcenter/apollo/go-client/cmd/client.go
+++ b/configcenter/apollo/go-client/cmd/client.go
@@ -24,16 +24,16 @@ 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/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/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/config_center/apollo"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/configcenter/apollo/go-server/cmd/server.go b/configcenter/apollo/go-server/cmd/server.go
index 065abfa..d085be6 100644
--- a/configcenter/apollo/go-server/cmd/server.go
+++ b/configcenter/apollo/go-server/cmd/server.go
@@ -28,17 +28,16 @@ import (
 import (
 	hessian "github.com/apache/dubbo-go-hessian2"
 
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/config_center/apollo"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
-
+	_ "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"
 )
 
 import (
diff --git a/configcenter/apollo/go-server/pkg/user.go b/configcenter/apollo/go-server/pkg/user.go
index 7a3231a..6555829 100644
--- a/configcenter/apollo/go-server/pkg/user.go
+++ b/configcenter/apollo/go-server/pkg/user.go
@@ -23,8 +23,8 @@ import (
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/config"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	"github.com/apache/dubbo-go/config"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/configcenter/apollo/go-server/tests/integration/main_test.go b/configcenter/apollo/go-server/tests/integration/main_test.go
index 2e2d685..9a28172 100644
--- a/configcenter/apollo/go-server/tests/integration/main_test.go
+++ b/configcenter/apollo/go-server/tests/integration/main_test.go
@@ -28,16 +28,16 @@ import (
 
 import (
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/config_center/apollo"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/config_center/apollo"
+	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
+	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 var userProvider = new(UserProvider)
diff --git a/configcenter/nacos/go-client/cmd/client.go b/configcenter/nacos/go-client/cmd/client.go
index bc2c501..83ad995 100644
--- a/configcenter/nacos/go-client/cmd/client.go
+++ b/configcenter/nacos/go-client/cmd/client.go
@@ -24,16 +24,16 @@ 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/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/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/config_center/nacos"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/configcenter/nacos/go-server/cmd/server.go b/configcenter/nacos/go-server/cmd/server.go
index e522d04..f9a4fb5 100644
--- a/configcenter/nacos/go-server/cmd/server.go
+++ b/configcenter/nacos/go-server/cmd/server.go
@@ -26,17 +26,17 @@ 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/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/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/config_center/nacos"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 )
 
 import (
diff --git a/configcenter/nacos/go-server/pkg/user.go b/configcenter/nacos/go-server/pkg/user.go
index 7a3231a..6555829 100644
--- a/configcenter/nacos/go-server/pkg/user.go
+++ b/configcenter/nacos/go-server/pkg/user.go
@@ -23,8 +23,8 @@ import (
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/config"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	"github.com/apache/dubbo-go/config"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/configcenter/nacos/go-server/tests/integration/main_test.go b/configcenter/nacos/go-server/tests/integration/main_test.go
index ffdc8e3..3511c1c 100644
--- a/configcenter/nacos/go-server/tests/integration/main_test.go
+++ b/configcenter/nacos/go-server/tests/integration/main_test.go
@@ -28,16 +28,16 @@ import (
 
 import (
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/config_center/nacos"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/config_center/nacos"
+	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
+	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 var userProvider = new(UserProvider)
diff --git a/configcenter/zookeeper/go-client/cmd/client.go b/configcenter/zookeeper/go-client/cmd/client.go
index 45b619d..cf0fab5 100644
--- a/configcenter/zookeeper/go-client/cmd/client.go
+++ b/configcenter/zookeeper/go-client/cmd/client.go
@@ -24,16 +24,16 @@ 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/config_center/zookeeper"
+	_ "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/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/config_center/zookeeper"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/configcenter/zookeeper/go-server/cmd/server.go b/configcenter/zookeeper/go-server/cmd/server.go
index 9e0422e..3b3d200 100644
--- a/configcenter/zookeeper/go-server/cmd/server.go
+++ b/configcenter/zookeeper/go-server/cmd/server.go
@@ -26,17 +26,17 @@ 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/zookeeper"
+	_ "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/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/config_center/zookeeper"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 )
 
 import (
diff --git a/configcenter/zookeeper/go-server/pkg/user.go b/configcenter/zookeeper/go-server/pkg/user.go
index 7a3231a..6555829 100644
--- a/configcenter/zookeeper/go-server/pkg/user.go
+++ b/configcenter/zookeeper/go-server/pkg/user.go
@@ -23,8 +23,8 @@ import (
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/config"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	"github.com/apache/dubbo-go/config"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/configcenter/zookeeper/go-server/tests/integration/main_test.go b/configcenter/zookeeper/go-server/tests/integration/main_test.go
index 69f9658..47475cd 100644
--- a/configcenter/zookeeper/go-server/tests/integration/main_test.go
+++ b/configcenter/zookeeper/go-server/tests/integration/main_test.go
@@ -28,15 +28,15 @@ import (
 
 import (
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/config_center/zookeeper"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/config_center/zookeeper"
+	_ "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"
 )
 
 var userProvider = new(UserProvider)
diff --git a/context/go-client/cmd/client.go b/context/go-client/cmd/client.go
index 484c1da..cb5f33c 100644
--- a/context/go-client/cmd/client.go
+++ b/context/go-client/cmd/client.go
@@ -24,16 +24,16 @@ 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/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/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/constant"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/context/go-server/cmd/server.go b/context/go-server/cmd/server.go
index 086f46c..6cc9472 100644
--- a/context/go-server/cmd/server.go
+++ b/context/go-server/cmd/server.go
@@ -26,16 +26,16 @@ 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"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 )
 
 import (
diff --git a/context/go-server/pkg/user.go b/context/go-server/pkg/user.go
index b943959..959ac39 100644
--- a/context/go-server/pkg/user.go
+++ b/context/go-server/pkg/user.go
@@ -22,9 +22,9 @@ import (
 )
 
 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/apache/dubbo-go/common/constant"
-	"github.com/apache/dubbo-go/config"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/context/go-server/tests/integration/main_test.go b/context/go-server/tests/integration/main_test.go
index 26a0918..f51ac7e 100644
--- a/context/go-server/tests/integration/main_test.go
+++ b/context/go-server/tests/integration/main_test.go
@@ -28,15 +28,15 @@ import (
 
 import (
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 var userProvider = new(UserProvider)
diff --git a/context/go-server/tests/integration/userprovider_test.go b/context/go-server/tests/integration/userprovider_test.go
index 2618866..7db32f3 100644
--- a/context/go-server/tests/integration/userprovider_test.go
+++ b/context/go-server/tests/integration/userprovider_test.go
@@ -24,7 +24,7 @@ import (
 	"testing"
 )
 import (
-	"github.com/apache/dubbo-go/common/constant"
+	"dubbo.apache.org/dubbo-go/v3/common/constant"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/direct/README.md b/direct/README.md
index e9d49dc..ae245d7 100644
--- a/direct/README.md
+++ b/direct/README.md
@@ -54,7 +54,7 @@ initSignal()
 ```
 
 - Based on the `hessian` serialization protocol, using [apache/dubbo-go-hessian2](https://github.com/apache/dubbo-go-hessian2) RegisterPOJO register a POJO
-- Dubbo Init: Registration service, See [apache/dubbo-go/../config_loader.go](https://github.com/apache/dubbo-go/blob/master/config/config_loader.go)
+- Dubbo Init: Registration service, See [apache/dubbo-go/../config_loader.go](https://dubbo.apache.org/dubbo-go/v3/blob/master/config/config_loader.go)
     - init router
     - init the global event dispatcher
     - start the metadata report if config set
@@ -155,7 +155,7 @@ APP_LOG_CONF_FILE=direct/go-client/conf/log.yml;
 CONF_CONSUMER_FILE_PATH=direct/go-client/conf/client.yml
 ```
 
-See [dubbo-go/.../env.go](https://github.com/apache/dubbo-go/blob/master/common/constant/env.go)
+See [dubbo-go/.../env.go](https://dubbo.apache.org/dubbo-go/v3/blob/master/common/constant/env.go)
 
 
 #### 2. Start The Registry
diff --git a/direct/README_zh.md b/direct/README_zh.md
index e4fb5ce..caf8ff2 100644
--- a/direct/README_zh.md
+++ b/direct/README_zh.md
@@ -57,7 +57,7 @@ initSignal()
 ```
 
 - 基于`hessian`序列化协议,使用[apache/dubbo-go-hessian2](https://github.com/apache/dubbo-go-hessian2) RegisterPOJO注册一个POJO实例
-- Dubbo Init:注册服务,详情参考[apache/dubbo-go/../config_loader.go](https://github.com/apache/dubbo-go/blob/master/config/config_loader.go)
+- Dubbo Init:注册服务,详情参考[apache/dubbo-go/../config_loader.go](https://dubbo.apache.org/dubbo-go/v3/blob/master/config/config_loader.go)
     - init router
     - init the global event dispatcher
     - start the metadata report if config set
@@ -156,7 +156,7 @@ APP_LOG_CONF_FILE=direct/go-client/conf/log.yml;
 CONF_CONSUMER_FILE_PATH=direct/go-client/conf/client.yml
 ```
 
-详情请参阅 [dubbo-go/.../env.go](https://github.com/apache/dubbo-go/blob/master/common/constant/env.go)
+详情请参阅 [dubbo-go/.../env.go](https://dubbo.apache.org/dubbo-go/v3/blob/master/common/constant/env.go)
 
 
 #### 2. 启动注册中心
diff --git a/direct/go-client/cmd/client.go b/direct/go-client/cmd/client.go
index 13f587d..3216a0a 100644
--- a/direct/go-client/cmd/client.go
+++ b/direct/go-client/cmd/client.go
@@ -24,15 +24,15 @@ 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/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/direct/go-server/cmd/server.go b/direct/go-server/cmd/server.go
index a4cfc42..002e5c5 100644
--- a/direct/go-server/cmd/server.go
+++ b/direct/go-server/cmd/server.go
@@ -26,16 +26,16 @@ 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"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 )
 
 import (
diff --git a/direct/go-server/pkg/user.go b/direct/go-server/pkg/user.go
index 7a3231a..6555829 100644
--- a/direct/go-server/pkg/user.go
+++ b/direct/go-server/pkg/user.go
@@ -23,8 +23,8 @@ import (
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/config"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	"github.com/apache/dubbo-go/config"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/direct/go-server/tests/integration/main_test.go b/direct/go-server/tests/integration/main_test.go
index b4a5139..9fb0d96 100644
--- a/direct/go-server/tests/integration/main_test.go
+++ b/direct/go-server/tests/integration/main_test.go
@@ -28,15 +28,15 @@ import (
 
 import (
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 var userProvider = new(UserProvider)
diff --git a/docker/go-client/cmd/client.go b/docker/go-client/cmd/client.go
index 6ca8d95..1d33a16 100644
--- a/docker/go-client/cmd/client.go
+++ b/docker/go-client/cmd/client.go
@@ -24,15 +24,15 @@ 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/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/docker/go-server/cmd/server.go b/docker/go-server/cmd/server.go
index c8e4cf0..3fb639a 100644
--- a/docker/go-server/cmd/server.go
+++ b/docker/go-server/cmd/server.go
@@ -26,16 +26,16 @@ 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"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 )
 
 import (
diff --git a/docker/go-server/pkg/user.go b/docker/go-server/pkg/user.go
index 7a3231a..6555829 100644
--- a/docker/go-server/pkg/user.go
+++ b/docker/go-server/pkg/user.go
@@ -23,8 +23,8 @@ import (
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/config"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	"github.com/apache/dubbo-go/config"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/docker/go-server/tests/integration/main_test.go b/docker/go-server/tests/integration/main_test.go
index b4a5139..9fb0d96 100644
--- a/docker/go-server/tests/integration/main_test.go
+++ b/docker/go-server/tests/integration/main_test.go
@@ -28,15 +28,15 @@ import (
 
 import (
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 var userProvider = new(UserProvider)
diff --git a/filter/custom/README.md b/filter/custom/README.md
index 1d04f69..f34b20f 100644
--- a/filter/custom/README.md
+++ b/filter/custom/README.md
@@ -18,7 +18,7 @@ type myCustomFilter struct{}
 func (mf myCustomFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result {
     // the logic put here...
     // you can get many params in url. And the invocation provides more information about
-    url := invoker.GetUrl()
+    url := invoker.GetURL()
     serviceKey := url.ServiceKey()
     gxlog.CInfo("Here is the my custom filter. The service is invoked: %s", serviceKey)
     return invoker.Invoke(ctx, invocation)
diff --git a/filter/custom/README_zh.md b/filter/custom/README_zh.md
index 5afba37..cf07511 100644
--- a/filter/custom/README_zh.md
+++ b/filter/custom/README_zh.md
@@ -18,7 +18,7 @@ type myCustomFilter struct{}
 func (mf myCustomFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result {
     // the logic put here...
     // you can get many params in url. And the invocation provides more information about
-    url := invoker.GetUrl()
+    url := invoker.GetURL()
     serviceKey := url.ServiceKey()
     gxlog.CInfo("Here is the my custom filter. The service is invoked: %s", serviceKey)
     return invoker.Invoke(ctx, invocation)
diff --git a/filter/custom/go-client/cmd/client.go b/filter/custom/go-client/cmd/client.go
index b14fd53..7281348 100644
--- a/filter/custom/go-client/cmd/client.go
+++ b/filter/custom/go-client/cmd/client.go
@@ -24,15 +24,15 @@ 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/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/filter/custom/go-server/cmd/server.go b/filter/custom/go-server/cmd/server.go
index 280affb..b696e49 100644
--- a/filter/custom/go-server/cmd/server.go
+++ b/filter/custom/go-server/cmd/server.go
@@ -26,16 +26,16 @@ 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"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 )
 
 import (
diff --git a/filter/custom/go-server/pkg/custom_filter.go b/filter/custom/go-server/pkg/custom_filter.go
index 651fde5..147e30b 100644
--- a/filter/custom/go-server/pkg/custom_filter.go
+++ b/filter/custom/go-server/pkg/custom_filter.go
@@ -24,9 +24,9 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/common/extension"
-	"github.com/apache/dubbo-go/filter"
-	"github.com/apache/dubbo-go/protocol"
+	"dubbo.apache.org/dubbo-go/v3/common/extension"
+	"dubbo.apache.org/dubbo-go/v3/filter"
+	"dubbo.apache.org/dubbo-go/v3/protocol"
 	"github.com/dubbogo/gost/log"
 )
 
@@ -56,7 +56,7 @@ type myCustomFilter struct{}
 func (mf myCustomFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result {
 	// the logic put here...
 	// you can get many params in url. And the invocation provides more information about
-	url := invoker.GetUrl()
+	url := invoker.GetURL()
 	serviceKey := url.ServiceKey()
 	gxlog.CInfo("Here is the my custom filter. The service is invoked: %s", serviceKey)
 	return invoker.Invoke(ctx, invocation)
diff --git a/filter/custom/go-server/pkg/user.go b/filter/custom/go-server/pkg/user.go
index 7a3231a..6555829 100644
--- a/filter/custom/go-server/pkg/user.go
+++ b/filter/custom/go-server/pkg/user.go
@@ -23,8 +23,8 @@ import (
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/config"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	"github.com/apache/dubbo-go/config"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/filter/custom/go-server/tests/integration/main_test.go b/filter/custom/go-server/tests/integration/main_test.go
index b4a5139..9fb0d96 100644
--- a/filter/custom/go-server/tests/integration/main_test.go
+++ b/filter/custom/go-server/tests/integration/main_test.go
@@ -28,15 +28,15 @@ import (
 
 import (
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 var userProvider = new(UserProvider)
diff --git a/filter/sentinel/go-client/cmd/client.go b/filter/sentinel/go-client/cmd/client.go
index 2a506c9..1788fc4 100644
--- a/filter/sentinel/go-client/cmd/client.go
+++ b/filter/sentinel/go-client/cmd/client.go
@@ -23,18 +23,18 @@ 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/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 	"github.com/alibaba/sentinel-golang/api"
 	sentinelConf "github.com/alibaba/sentinel-golang/core/config"
 	"github.com/alibaba/sentinel-golang/core/flow"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/filter/sentinel/go-server/cmd/server.go b/filter/sentinel/go-server/cmd/server.go
index 20b32b9..41227a1 100644
--- a/filter/sentinel/go-server/cmd/server.go
+++ b/filter/sentinel/go-server/cmd/server.go
@@ -26,19 +26,19 @@ 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"
 	"github.com/alibaba/sentinel-golang/api"
 	sentinelConf "github.com/alibaba/sentinel-golang/core/config"
 	"github.com/alibaba/sentinel-golang/core/flow"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 )
 
 import (
diff --git a/filter/sentinel/go-server/pkg/user.go b/filter/sentinel/go-server/pkg/user.go
index 7a3231a..6555829 100644
--- a/filter/sentinel/go-server/pkg/user.go
+++ b/filter/sentinel/go-server/pkg/user.go
@@ -23,8 +23,8 @@ import (
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/config"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	"github.com/apache/dubbo-go/config"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/filter/sentinel/go-server/tests/integration/main_test.go b/filter/sentinel/go-server/tests/integration/main_test.go
index b4a5139..9fb0d96 100644
--- a/filter/sentinel/go-server/tests/integration/main_test.go
+++ b/filter/sentinel/go-server/tests/integration/main_test.go
@@ -28,15 +28,15 @@ import (
 
 import (
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 var userProvider = new(UserProvider)
diff --git a/filter/tpslimit/go-client/cmd/client.go b/filter/tpslimit/go-client/cmd/client.go
index 80fcfde..d4ca5b5 100644
--- a/filter/tpslimit/go-client/cmd/client.go
+++ b/filter/tpslimit/go-client/cmd/client.go
@@ -24,15 +24,15 @@ 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/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 )
 
 import (
diff --git a/filter/tpslimit/go-server/cmd/server.go b/filter/tpslimit/go-server/cmd/server.go
index d1e2cf3..3fd2990 100644
--- a/filter/tpslimit/go-server/cmd/server.go
+++ b/filter/tpslimit/go-server/cmd/server.go
@@ -26,16 +26,16 @@ 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"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 )
 
 import (
diff --git a/filter/tpslimit/go-server/pkg/limit_strategy.go b/filter/tpslimit/go-server/pkg/limit_strategy.go
index 161e62d..48e4120 100644
--- a/filter/tpslimit/go-server/pkg/limit_strategy.go
+++ b/filter/tpslimit/go-server/pkg/limit_strategy.go
@@ -22,8 +22,8 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/common/extension"
-	"github.com/apache/dubbo-go/filter"
+	"dubbo.apache.org/dubbo-go/v3/common/extension"
+	"dubbo.apache.org/dubbo-go/v3/filter"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/filter/tpslimit/go-server/pkg/reject_handler.go b/filter/tpslimit/go-server/pkg/reject_handler.go
index 8feecf1..8a71f5e 100644
--- a/filter/tpslimit/go-server/pkg/reject_handler.go
+++ b/filter/tpslimit/go-server/pkg/reject_handler.go
@@ -23,11 +23,11 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/common"
-	"github.com/apache/dubbo-go/common/extension"
-	"github.com/apache/dubbo-go/common/logger"
-	"github.com/apache/dubbo-go/filter"
-	"github.com/apache/dubbo-go/protocol"
+	"dubbo.apache.org/dubbo-go/v3/common"
+	"dubbo.apache.org/dubbo-go/v3/common/extension"
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
+	"dubbo.apache.org/dubbo-go/v3/filter"
+	"dubbo.apache.org/dubbo-go/v3/protocol"
 )
 
 func init() {
diff --git a/filter/tpslimit/go-server/pkg/user.go b/filter/tpslimit/go-server/pkg/user.go
index 7a3231a..6555829 100644
--- a/filter/tpslimit/go-server/pkg/user.go
+++ b/filter/tpslimit/go-server/pkg/user.go
@@ -23,8 +23,8 @@ import (
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/config"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	"github.com/apache/dubbo-go/config"
 	"github.com/dubbogo/gost/log"
 )
 
diff --git a/filter/tpslimit/go-server/tests/integration/main_test.go b/filter/tpslimit/go-server/tests/integration/main_test.go
index b4a5139..9fb0d96 100644
--- a/filter/tpslimit/go-server/tests/integration/main_test.go
+++ b/filter/tpslimit/go-server/tests/integration/main_test.go
@@ -28,15 +28,15 @@ import (
 
 import (
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 var userProvider = new(UserProvider)
diff --git a/game/go-server-game/cmd/server.go b/game/go-server-game/cmd/server.go
index e05c980..957265a 100644
--- a/game/go-server-game/cmd/server.go
+++ b/game/go-server-game/cmd/server.go
@@ -1,54 +1,54 @@
 package main
 
 import (
-    "os"
-    "os/signal"
-    "syscall"
-    "time"
+	"os"
+	"os/signal"
+	"syscall"
+	"time"
 
-    "github.com/apache/dubbo-go/common/logger"
-    "github.com/apache/dubbo-go/config"
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
+	"dubbo.apache.org/dubbo-go/v3/config"
 
-    _ "github.com/apache/dubbo-go/protocol/dubbo"
-    _ "github.com/apache/dubbo-go/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 
-    _ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-    _ "github.com/apache/dubbo-go/filter/filter_impl"
+	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
+	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
 
-    _ "github.com/apache/dubbo-go/cluster/cluster_impl"
-    _ "github.com/apache/dubbo-go/cluster/loadbalance"
-    // _ "github.com/apache/dubbo-go/metadata/service/remote"
-    _ "github.com/apache/dubbo-go/metadata/service/inmemory"
-    _ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
+	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
+	// _ "dubbo.apache.org/dubbo-go/v3/metadata/remote/impl"
+	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 
-    _ "github.com/apache/dubbo-go-samples/game/go-server-game/pkg"
+	_ "github.com/apache/dubbo-go-samples/game/go-server-game/pkg"
 )
 
 func main() {
-    config.Load()
+	config.Load()
 
-    initSignal()
+	initSignal()
 }
 
 func initSignal() {
-    signals := make(chan os.Signal, 1)
-
-    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:
-            logger.Infof("app need reload")
-        default:
-            time.AfterFunc(time.Duration(time.Second*5), func() {
-                logger.Warnf("app exit now by force...")
-                os.Exit(1)
-            })
-
-            // The program exits normally or timeout forcibly exits.
-            logger.Warnf("app exit now...")
-            return
-        }
-    }
+	signals := make(chan os.Signal, 1)
+
+	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:
+			logger.Infof("app need reload")
+		default:
+			time.AfterFunc(time.Duration(time.Second*5), func() {
+				logger.Warnf("app exit now by force...")
+				os.Exit(1)
+			})
+
+			// The program exits normally or timeout forcibly exits.
+			logger.Warnf("app exit now...")
+			return
+		}
+	}
 }
diff --git a/game/go-server-game/pkg/consumer.go b/game/go-server-game/pkg/consumer.go
index 70f55d9..0528e89 100644
--- a/game/go-server-game/pkg/consumer.go
+++ b/game/go-server-game/pkg/consumer.go
@@ -4,4 +4,4 @@ import "github.com/apache/dubbo-go-samples/game/pkg/consumer/gate"
 
 var gateBasketball = new(gate.BasketballService)
 
-// var gateJump = new(gate.JumpService)
\ No newline at end of file
+// var gateJump = new(gate.JumpService)
diff --git a/game/go-server-game/pkg/main.go b/game/go-server-game/pkg/main.go
index e7ee90a..8e2a106 100644
--- a/game/go-server-game/pkg/main.go
+++ b/game/go-server-game/pkg/main.go
@@ -1,17 +1,17 @@
 package pkg
 
 import (
-    hessian "github.com/apache/dubbo-go-hessian2"
-    "github.com/apache/dubbo-go/config"
+	"dubbo.apache.org/dubbo-go/v3/config"
+	hessian "github.com/apache/dubbo-go-hessian2"
 
-    "github.com/apache/dubbo-go-samples/game/pkg/pojo"
+	"github.com/apache/dubbo-go-samples/game/pkg/pojo"
 )
 
 func init() {
-    config.SetProviderService(new(BasketballService))
-    // config.SetProviderService(new(JumpService))
+	config.SetProviderService(new(BasketballService))
+	// config.SetProviderService(new(JumpService))
 
-    config.SetConsumerService(gateBasketball)
+	config.SetConsumerService(gateBasketball)
 
-    hessian.RegisterPOJO(&pojo.Result{})
+	hessian.RegisterPOJO(&pojo.Result{})
 }
diff --git a/game/go-server-game/pkg/provider.go b/game/go-server-game/pkg/provider.go
index db3db05..4fbafe3 100644
--- a/game/go-server-game/pkg/provider.go
+++ b/game/go-server-game/pkg/provider.go
@@ -1,66 +1,66 @@
 package pkg
 
 import (
-    "context"
-    "github.com/apache/dubbo-go/common/logger"
+	"context"
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
 
-    "github.com/apache/dubbo-go-samples/game/pkg/pojo"
+	"github.com/apache/dubbo-go-samples/game/pkg/pojo"
 )
 
 type BasketballService struct{}
 
 func (p *BasketballService) Online(ctx context.Context, uid string) (*pojo.Result, error) {
-    logger.Infof("online: %s", uid)
-    return &pojo.Result{Code: 0}, nil
+	logger.Infof("online: %s", uid)
+	return &pojo.Result{Code: 0}, nil
 }
 
 func (p *BasketballService) Offline(ctx context.Context, uid string) (*pojo.Result, error) {
-    logger.Infof("offline: %#s", uid)
-    return &pojo.Result{Code: 0}, nil
+	logger.Infof("offline: %#s", uid)
+	return &pojo.Result{Code: 0}, nil
 }
 
 func (p *BasketballService) Message(ctx context.Context, uid, data string) (*pojo.Result, error) {
-    logger.Infof("message: %#v, %#v", uid, data)
+	logger.Infof("message: %#v, %#v", uid, data)
 
-    // // auto reply the same message
-    // _, err := gateBasketball.Send(context.TODO(), uid, data)
-    // if err != nil {
-    //     logger.Errorf("send fail: %#s", err.Error())
-    //     return &pojo.Result{Code: 1, Msg: err.Error()}, err
-    // }
+	// // auto reply the same message
+	// _, err := gateBasketball.Send(context.TODO(), uid, data)
+	// if err != nil {
+	//     logger.Errorf("send fail: %#s", err.Error())
+	//     return &pojo.Result{Code: 1, Msg: err.Error()}, err
+	// }
 
-    return &pojo.Result{Code: 0, Data: map[string]interface{}{"to": uid, "message": data}}, nil
+	return &pojo.Result{Code: 0, Data: map[string]interface{}{"to": uid, "message": data}}, nil
 }
 
 func (p *BasketballService) Reference() string {
-    return "gameProvider.basketballService"
+	return "gameProvider.basketballService"
 }
 
 type JumpService struct{}
 
 func (p *JumpService) Online(ctx context.Context, uid string) (*pojo.Result, error) {
-    logger.Infof("online: %#s", uid)
-    return &pojo.Result{Code: 0}, nil
+	logger.Infof("online: %#s", uid)
+	return &pojo.Result{Code: 0}, nil
 }
 
 func (p *JumpService) Offline(ctx context.Context, uid string) (*pojo.Result, error) {
-    logger.Infof("offline: %#s", uid)
-    return &pojo.Result{Code: 0}, nil
+	logger.Infof("offline: %#s", uid)
+	return &pojo.Result{Code: 0}, nil
 }
 
 func (p *JumpService) Message(ctx context.Context, uid, data string) (*pojo.Result, error) {
-    logger.Infof("message: %#s, %#s", uid, data)
+	logger.Infof("message: %#s, %#s", uid, data)
 
-    // reply the same message
-    _, err := gateBasketball.Send(context.TODO(), uid, data)
-    if err != nil {
-        logger.Errorf("send fail: %#s", err.Error())
-        return &pojo.Result{Code: 1, Msg: err.Error()}, err
-    }
+	// reply the same message
+	_, err := gateBasketball.Send(context.TODO(), uid, data)
+	if err != nil {
+		logger.Errorf("send fail: %#s", err.Error())
+		return &pojo.Result{Code: 1, Msg: err.Error()}, err
+	}
 
-    return &pojo.Result{Code: 0, Data: map[string]interface{}{"to": uid, "message": data}}, nil
+	return &pojo.Result{Code: 0, Data: map[string]interface{}{"to": uid, "message": data}}, nil
 }
 
 func (p *JumpService) Reference() string {
-    return "gameProvider.jumpService"
+	return "gameProvider.jumpService"
 }
diff --git a/game/go-server-game/tests/integration/gameprovider_test.go b/game/go-server-game/tests/integration/gameprovider_test.go
index 8502d40..a8a81c2 100644
--- a/game/go-server-game/tests/integration/gameprovider_test.go
+++ b/game/go-server-game/tests/integration/gameprovider_test.go
@@ -1,32 +1,32 @@
 package integration
 
 import (
-    "context"
-    "testing"
+	"context"
+	"testing"
 
-    "github.com/stretchr/testify/assert"
+	"github.com/stretchr/testify/assert"
 )
 
 func TestMessage(t *testing.T) {
-    res, err := gameProvider.Message(context.TODO(), "A001", "hello")
-    assert.Nil(t, err)
-    assert.NotNil(t, res)
-    assert.Equal(t, int32(0), res.Code)
-    assert.NotNil(t, res.Data)
-    assert.Equal(t, "A001", res.Data["to"])
-    assert.Equal(t, "hello", res.Data["message"])
+	res, err := gameProvider.Message(context.TODO(), "A001", "hello")
+	assert.Nil(t, err)
+	assert.NotNil(t, res)
+	assert.Equal(t, int32(0), res.Code)
+	assert.NotNil(t, res.Data)
+	assert.Equal(t, "A001", res.Data["to"])
+	assert.Equal(t, "hello", res.Data["message"])
 }
 
 func TestOnline(t *testing.T) {
-    res, err := gameProvider.Online(context.TODO(), "A001")
-    assert.Nil(t, err)
-    assert.NotNil(t, res)
-    assert.Equal(t, int32(0), res.Code)
+	res, err := gameProvider.Online(context.TODO(), "A001")
+	assert.Nil(t, err)
+	assert.NotNil(t, res)
+	assert.Equal(t, int32(0), res.Code)
 }
 
 func TestOffline(t *testing.T) {
-    res, err := gameProvider.Offline(context.TODO(), "A001")
-    assert.Nil(t, err)
-    assert.NotNil(t, res)
-    assert.Equal(t, int32(0), res.Code)
-}
\ No newline at end of file
+	res, err := gameProvider.Offline(context.TODO(), "A001")
+	assert.Nil(t, err)
+	assert.NotNil(t, res)
+	assert.Equal(t, int32(0), res.Code)
+}
diff --git a/game/go-server-game/tests/integration/main_test.go b/game/go-server-game/tests/integration/main_test.go
index e04d87a..036360a 100644
--- a/game/go-server-game/tests/integration/main_test.go
+++ b/game/go-server-game/tests/integration/main_test.go
@@ -1,37 +1,37 @@
 package integration
 
 import (
-    "os"
-    "testing"
-    "time"
+	"os"
+	"testing"
+	"time"
 
-    hessian "github.com/apache/dubbo-go-hessian2"
-    "github.com/apache/dubbo-go/config"
+	"dubbo.apache.org/dubbo-go/v3/config"
+	hessian "github.com/apache/dubbo-go-hessian2"
 
-    _ "github.com/apache/dubbo-go/protocol/dubbo"
-    _ "github.com/apache/dubbo-go/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 
-    _ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-    _ "github.com/apache/dubbo-go/filter/filter_impl"
+	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
+	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
 
-    _ "github.com/apache/dubbo-go/cluster/cluster_impl"
-    _ "github.com/apache/dubbo-go/cluster/loadbalance"
-    // _ "github.com/apache/dubbo-go/metadata/service/remote"
-    _ "github.com/apache/dubbo-go/metadata/service/inmemory"
-    _ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
+	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
+	// _ "dubbo.apache.org/dubbo-go/v3/metadata/remote/impl"
+	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 
-    "github.com/apache/dubbo-go-samples/game/pkg/consumer/game"
-    "github.com/apache/dubbo-go-samples/game/pkg/pojo"
+	"github.com/apache/dubbo-go-samples/game/pkg/consumer/game"
+	"github.com/apache/dubbo-go-samples/game/pkg/pojo"
 )
 
 var gameProvider = new(game.BasketballService)
 
 func TestMain(m *testing.M) {
-    config.SetConsumerService(gameProvider)
+	config.SetConsumerService(gameProvider)
 
-    hessian.RegisterPOJO(&pojo.Result{})
-    config.Load()
-    time.Sleep(3 * time.Second)
+	hessian.RegisterPOJO(&pojo.Result{})
+	config.Load()
+	time.Sleep(3 * time.Second)
 
-    os.Exit(m.Run())
-}
\ No newline at end of file
+	os.Exit(m.Run())
+}
diff --git a/game/go-server-gate/cmd/server.go b/game/go-server-gate/cmd/server.go
index 655521e..a2988e8 100644
--- a/game/go-server-gate/cmd/server.go
+++ b/game/go-server-gate/cmd/server.go
@@ -1,79 +1,79 @@
 package main
 
 import (
-    "context"
-    "encoding/json"
-    "net/http"
-    "os"
-    "os/signal"
-    "syscall"
-    "time"
-
-    "github.com/apache/dubbo-go/common/logger"
-    "github.com/apache/dubbo-go/config"
-
-    _ "github.com/apache/dubbo-go/protocol/dubbo"
-    _ "github.com/apache/dubbo-go/registry/protocol"
-
-    _ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-    _ "github.com/apache/dubbo-go/filter/filter_impl"
-
-    _ "github.com/apache/dubbo-go/cluster/cluster_impl"
-    _ "github.com/apache/dubbo-go/cluster/loadbalance"
-    // _ "github.com/apache/dubbo-go/metadata/service/remote"
-    _ "github.com/apache/dubbo-go/metadata/service/inmemory"
-    _ "github.com/apache/dubbo-go/registry/zookeeper"
-
-    "github.com/apache/dubbo-go-samples/game/go-server-gate/pkg"
+	"context"
+	"encoding/json"
+	"net/http"
+	"os"
+	"os/signal"
+	"syscall"
+	"time"
+
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
+	"dubbo.apache.org/dubbo-go/v3/config"
+
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+
+	_ "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/cluster/cluster_impl"
+	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
+	// _ "dubbo.apache.org/dubbo-go/v3/metadata/remote/impl"
+	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+
+	"github.com/apache/dubbo-go-samples/game/go-server-gate/pkg"
 )
 
 func main() {
-    config.Load()
+	config.Load()
 
-    go startHttp()
+	go startHttp()
 
-    initSignal()
+	initSignal()
 }
 
 func initSignal() {
-    signals := make(chan os.Signal, 1)
-
-    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:
-            logger.Infof("app need reload")
-        default:
-            time.AfterFunc(time.Duration(time.Second*5), func() {
-                logger.Warnf("app exit now by force...")
-                os.Exit(1)
-            })
-
-            // The program exits normally or timeout forcibly exits.
-            logger.Warnf("app exit now...")
-            return
-        }
-    }
+	signals := make(chan os.Signal, 1)
+
+	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:
+			logger.Infof("app need reload")
+		default:
+			time.AfterFunc(time.Duration(time.Second*5), func() {
+				logger.Warnf("app exit now by force...")
+				os.Exit(1)
+			})
+
+			// The program exits normally or timeout forcibly exits.
+			logger.Warnf("app exit now...")
+			return
+		}
+	}
 }
 
 func startHttp() {
-    http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
-        res, err := pkg.Message(context.TODO(), "abc", "hello")
-        if err != nil {
-            _, _ = w.Write([]byte(err.Error()))
-            return
-        }
-
-        b, err := json.Marshal(res)
-        if err != nil {
-            _, _ = w.Write([]byte(err.Error()))
-            return
-        }
-
-        _, _ = w.Write(b)
-    })
-
-    _ = http.ListenAndServe(":8000", nil)
-}
\ No newline at end of file
+	http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
+		res, err := pkg.Message(context.TODO(), "abc", "hello")
+		if err != nil {
+			_, _ = w.Write([]byte(err.Error()))
+			return
+		}
+
+		b, err := json.Marshal(res)
+		if err != nil {
+			_, _ = w.Write([]byte(err.Error()))
+			return
+		}
+
+		_, _ = w.Write(b)
+	})
+
+	_ = http.ListenAndServe(":8000", nil)
+}
diff --git a/game/go-server-gate/pkg/consumer.go b/game/go-server-gate/pkg/consumer.go
index e47b455..d0c6754 100644
--- a/game/go-server-gate/pkg/consumer.go
+++ b/game/go-server-gate/pkg/consumer.go
@@ -1,28 +1,28 @@
 package pkg
 
 import (
-    "context"
-    "github.com/apache/dubbo-go-samples/game/pkg/consumer/game"
-    "github.com/apache/dubbo-go-samples/game/pkg/pojo"
+	"context"
+	"github.com/apache/dubbo-go-samples/game/pkg/consumer/game"
+	"github.com/apache/dubbo-go-samples/game/pkg/pojo"
 )
 
 var gameBasketball = new(game.BasketballService)
-// var gameJump = new(game.JumpService)
 
+// var gameJump = new(game.JumpService)
 
 // just easy for demo test
 
 func Message(ctx context.Context, uid string, data string) (*pojo.Result, error) {
-    return gameBasketball.Message(ctx, uid, data)
-    // return gameJump.Message(ctx, uid, data)
+	return gameBasketball.Message(ctx, uid, data)
+	// return gameJump.Message(ctx, uid, data)
 }
 
 func Online(ctx context.Context, uid string) (*pojo.Result, error) {
-    return gameBasketball.Online(ctx, uid)
-    // return gameJump.Online(ctx, uid)
+	return gameBasketball.Online(ctx, uid)
+	// return gameJump.Online(ctx, uid)
 }
 
 func Offline(ctx context.Context, uid string) (*pojo.Result, error) {
-    return gameBasketball.Offline(ctx, uid)
-    // return gameJump.Offline(ctx, uid)
+	return gameBasketball.Offline(ctx, uid)
+	// return gameJump.Offline(ctx, uid)
 }
diff --git a/game/go-server-gate/pkg/main.go b/game/go-server-gate/pkg/main.go
index fd2e471..4505069 100644
--- a/game/go-server-gate/pkg/main.go
+++ b/game/go-server-gate/pkg/main.go
@@ -1,17 +1,17 @@
 package pkg
 
 import (
-    hessian "github.com/apache/dubbo-go-hessian2"
-    "github.com/apache/dubbo-go/config"
+	"dubbo.apache.org/dubbo-go/v3/config"
+	hessian "github.com/apache/dubbo-go-hessian2"
 
-    "github.com/apache/dubbo-go-samples/game/pkg/pojo"
+	"github.com/apache/dubbo-go-samples/game/pkg/pojo"
 )
 
 func init() {
-    config.SetProviderService(new(BasketballService))
-    // config.SetProviderService(new(JumpService))
+	config.SetProviderService(new(BasketballService))
+	// config.SetProviderService(new(JumpService))
 
-    config.SetConsumerService(gameBasketball)
+	config.SetConsumerService(gameBasketball)
 
-    hessian.RegisterPOJO(&pojo.Result{})
+	hessian.RegisterPOJO(&pojo.Result{})
 }
diff --git a/game/go-server-gate/pkg/provider.go b/game/go-server-gate/pkg/provider.go
index 28aa5fc..f5540d0 100644
--- a/game/go-server-gate/pkg/provider.go
+++ b/game/go-server-gate/pkg/provider.go
@@ -1,30 +1,30 @@
 package pkg
 
 import (
-    "context"
-    "github.com/apache/dubbo-go/common/logger"
+	"context"
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
 
-    "github.com/apache/dubbo-go-samples/game/pkg/pojo"
+	"github.com/apache/dubbo-go-samples/game/pkg/pojo"
 )
 
 type BasketballService struct{}
 
 func (p *BasketballService) Send(ctx context.Context, uid, data string) (*pojo.Result, error) {
-    logger.Infof("basketball: to=%s, message=%s", uid, data)
-    return &pojo.Result{Code: 0, Data: map[string]interface{}{"to": uid, "message": data}}, nil
+	logger.Infof("basketball: to=%s, message=%s", uid, data)
+	return &pojo.Result{Code: 0, Data: map[string]interface{}{"to": uid, "message": data}}, nil
 }
 
 func (p *BasketballService) Reference() string {
-    return "gateProvider.basketballService"
+	return "gateProvider.basketballService"
 }
 
 type JumpService struct{}
 
 func (p *JumpService) Send(ctx context.Context, uid, data string) (*pojo.Result, error) {
-    logger.Infof("jump: to=%s, message=%s", uid, data)
-    return &pojo.Result{Code: 0, Data: map[string]interface{}{"to": uid, "message": data}}, nil
+	logger.Infof("jump: to=%s, message=%s", uid, data)
+	return &pojo.Result{Code: 0, Data: map[string]interface{}{"to": uid, "message": data}}, nil
 }
 
 func (p *JumpService) Reference() string {
-    return "gateProvider.jumpService"
+	return "gateProvider.jumpService"
 }
diff --git a/game/go-server-gate/tests/integration/gateprovider_test.go b/game/go-server-gate/tests/integration/gateprovider_test.go
index ebb7ea2..ce9e1f4 100644
--- a/game/go-server-gate/tests/integration/gateprovider_test.go
+++ b/game/go-server-gate/tests/integration/gateprovider_test.go
@@ -1,18 +1,18 @@
 package integration
 
 import (
-    "context"
-    "testing"
+	"context"
+	"testing"
 
-    "github.com/stretchr/testify/assert"
+	"github.com/stretchr/testify/assert"
 )
 
 func TestSend(t *testing.T) {
-    res, err := gateProvider.Send(context.TODO(), "A001", "hello")
-    assert.Nil(t, err)
-    assert.NotNil(t, res)
-    assert.Equal(t, int32(0), res.Code)
-    assert.NotNil(t, res.Data)
-    assert.Equal(t, "A001", res.Data["to"])
-    assert.Equal(t, "hello", res.Data["message"])
-}
\ No newline at end of file
+	res, err := gateProvider.Send(context.TODO(), "A001", "hello")
+	assert.Nil(t, err)
+	assert.NotNil(t, res)
+	assert.Equal(t, int32(0), res.Code)
+	assert.NotNil(t, res.Data)
+	assert.Equal(t, "A001", res.Data["to"])
+	assert.Equal(t, "hello", res.Data["message"])
+}
diff --git a/game/go-server-gate/tests/integration/main_test.go b/game/go-server-gate/tests/integration/main_test.go
index 41bf36b..85d18e1 100644
--- a/game/go-server-gate/tests/integration/main_test.go
+++ b/game/go-server-gate/tests/integration/main_test.go
@@ -1,37 +1,37 @@
 package integration
 
 import (
-    "os"
-    "testing"
-    "time"
+	"os"
+	"testing"
+	"time"
 
-    hessian "github.com/apache/dubbo-go-hessian2"
-    "github.com/apache/dubbo-go/config"
+	"dubbo.apache.org/dubbo-go/v3/config"
+	hessian "github.com/apache/dubbo-go-hessian2"
 
-    _ "github.com/apache/dubbo-go/protocol/dubbo"
-    _ "github.com/apache/dubbo-go/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
 
-    _ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-    _ "github.com/apache/dubbo-go/filter/filter_impl"
+	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
+	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
 
-    _ "github.com/apache/dubbo-go/cluster/cluster_impl"
-    _ "github.com/apache/dubbo-go/cluster/loadbalance"
-    // _ "github.com/apache/dubbo-go/metadata/service/remote"
-    _ "github.com/apache/dubbo-go/metadata/service/inmemory"
-    _ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
+	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
+	// _ "dubbo.apache.org/dubbo-go/v3/metadata/remote/impl"
+	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 
-    "github.com/apache/dubbo-go-samples/game/pkg/consumer/gate"
-    "github.com/apache/dubbo-go-samples/game/pkg/pojo"
+	"github.com/apache/dubbo-go-samples/game/pkg/consumer/gate"
+	"github.com/apache/dubbo-go-samples/game/pkg/pojo"
 )
 
 var gateProvider = new(gate.BasketballService)
 
 func TestMain(m *testing.M) {
-    config.SetConsumerService(gateProvider)
+	config.SetConsumerService(gateProvider)
 
-    hessian.RegisterPOJO(&pojo.Result{})
-    config.Load()
-    time.Sleep(3 * time.Second)
+	hessian.RegisterPOJO(&pojo.Result{})
+	config.Load()
+	time.Sleep(3 * time.Second)
 
-    os.Exit(m.Run())
-}
\ No newline at end of file
+	os.Exit(m.Run())
+}
diff --git a/game/pkg/consumer/game/basketball.go b/game/pkg/consumer/game/basketball.go
index 5e900e5..5877cc0 100644
--- a/game/pkg/consumer/game/basketball.go
+++ b/game/pkg/consumer/game/basketball.go
@@ -1,16 +1,16 @@
 package game
 
 import (
-    "context"
-    "github.com/apache/dubbo-go-samples/game/pkg/pojo"
+	"context"
+	"github.com/apache/dubbo-go-samples/game/pkg/pojo"
 )
 
 type BasketballService struct {
-    Online  func(ctx context.Context, uid string) (*pojo.Result, error)
-    Offline func(ctx context.Context, uid string) (*pojo.Result, error)
-    Message func(ctx context.Context, uid string, data string) (*pojo.Result, error)
+	Online  func(ctx context.Context, uid string) (*pojo.Result, error)
+	Offline func(ctx context.Context, uid string) (*pojo.Result, error)
+	Message func(ctx context.Context, uid string, data string) (*pojo.Result, error)
 }
 
 func (p *BasketballService) Reference() string {
-    return "gameConsumer.basketballService"
+	return "gameConsumer.basketballService"
 }
diff --git a/game/pkg/consumer/game/jump.go b/game/pkg/consumer/game/jump.go
index 92d7a6a..abee46d 100644
--- a/game/pkg/consumer/game/jump.go
+++ b/game/pkg/consumer/game/jump.go
@@ -1,16 +1,16 @@
 package game
 
 import (
-    "context"
-    "github.com/apache/dubbo-go-samples/game/pkg/pojo"
+	"context"
+	"github.com/apache/dubbo-go-samples/game/pkg/pojo"
 )
 
 type JumpService struct {
-    Online  func(ctx context.Context, uid string) (*pojo.Result, error)
-    Offline func(ctx context.Context, uid string) (*pojo.Result, error)
-    Message func(ctx context.Context, uid string, data string) (*pojo.Result, error)
+	Online  func(ctx context.Context, uid string) (*pojo.Result, error)
+	Offline func(ctx context.Context, uid string) (*pojo.Result, error)
+	Message func(ctx context.Context, uid string, data string) (*pojo.Result, error)
 }
 
 func (p *JumpService) Reference() string {
-    return "gameConsumer.jumpService"
-}
\ No newline at end of file
+	return "gameConsumer.jumpService"
+}
diff --git a/game/pkg/consumer/gate/basketball.go b/game/pkg/consumer/gate/basketball.go
index 74833d3..d881c69 100644
--- a/game/pkg/consumer/gate/basketball.go
+++ b/game/pkg/consumer/gate/basketball.go
@@ -1,14 +1,14 @@
 package gate
 
 import (
-    "context"
-    "github.com/apache/dubbo-go-samples/game/pkg/pojo"
+	"context"
+	"github.com/apache/dubbo-go-samples/game/pkg/pojo"
 )
 
 type BasketballService struct {
-    Send func(ctx context.Context, uid string, data string) (*pojo.Result, error)
+	Send func(ctx context.Context, uid string, data string) (*pojo.Result, error)
 }
 
 func (p *BasketballService) Reference() string {
-    return "gateConsumer.basketballService"
+	return "gateConsumer.basketballService"
 }
diff --git a/game/pkg/consumer/gate/jump.go b/game/pkg/consumer/gate/jump.go
index 3797355..11aa313 100644
--- a/game/pkg/consumer/gate/jump.go
+++ b/game/pkg/consumer/gate/jump.go
@@ -1,14 +1,14 @@
 package gate
 
 import (
-    "context"
-    "github.com/apache/dubbo-go-samples/game/pkg/pojo"
+	"context"
+	"github.com/apache/dubbo-go-samples/game/pkg/pojo"
 )
 
 type JumpService struct {
-    Send func(ctx context.Context, uid string, data string) (*pojo.Result, error)
+	Send func(ctx context.Context, uid string, data string) (*pojo.Result, error)
 }
 
 func (p *JumpService) Reference() string {
-    return "gateConsumer.jumpService"
+	return "gateConsumer.jumpService"
 }
diff --git a/game/pkg/pojo/result.go b/game/pkg/pojo/result.go
index 28dfba6..63ddf5b 100644
--- a/game/pkg/pojo/result.go
+++ b/game/pkg/pojo/result.go
@@ -1,15 +1,15 @@
 package pojo
 
 type Result struct {
-    Code int32                  `json:"code"` // 0: success, [1, *): error
-    Msg  string                 `json:"msg,omitempty"`
-    Data map[string]interface{} `json:"data,omitempty"`
+	Code int32                  `json:"code"` // 0: success, [1, *): error
+	Msg  string                 `json:"msg,omitempty"`
+	Data map[string]interface{} `json:"data,omitempty"`
 }
 
 func (m Result) JavaClassName() string {
-    return "org.apache.dubbo.pojo.Result"
+	return "org.apache.dubbo.pojo.Result"
 }
 
 func (m *Result) Success() bool {
-    return m.Code == 0
+	return m.Code == 0
 }
diff --git a/general/dubbo/go-client/cmd/client.go b/general/dubbo/go-client/cmd/client.go
index 1b89fc6..c8484e1 100644
--- a/general/dubbo/go-client/cmd/client.go
+++ b/general/dubbo/go-client/cmd/client.go
@@ -23,20 +23,20 @@ import (
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/config"
 	hessian "github.com/apache/dubbo-go-hessian2"
 	"github.com/apache/dubbo-go-samples/general/dubbo/go-client/pkg"
-	"github.com/apache/dubbo-go/config"
 	"github.com/dubbogo/gost/log"
 )
 
 import (
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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"
 )
 
 var (
diff --git a/general/dubbo/go-server/cmd/server.go b/general/dubbo/go-server/cmd/server.go
index 97e5477..1637115 100644
--- a/general/dubbo/go-server/cmd/server.go
+++ b/general/dubbo/go-server/cmd/server.go
@@ -29,22 +29,22 @@ import (
 	hessian "github.com/apache/dubbo-go-hessian2"
 	"github.com/apache/dubbo-go-samples/general/dubbo/go-server/pkg"
 
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
+	_ "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"
 
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
+	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
+	_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
 
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
+	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
+	_ "dubbo.apache.org/dubbo-go/v3/metadata/service/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 var (
diff --git a/general/dubbo/go-server/pkg/user_provider.go b/general/dubbo/go-server/pkg/user_provider.go
index 6ccb0f1..757de75 100644
--- a/general/dubbo/go-server/pkg/user_provider.go
+++ b/general/dubbo/go-server/pkg/user_provider.go
@@ -30,8 +30,8 @@ import (
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3/config"
 	"github.com/apache/dubbo-go-hessian2/java_exception"
-	"github.com/apache/dubbo-go/config"
 )
 
 func init() {
diff --git a/general/dubbo/go-server/tests/integration/main_test.go b/general/dubbo/go-server/tests/integration/main_test.go
index eaad5f4..1ee1ddf 100644
--- a/general/dubbo/go-server/tests/integration/main_test.go
+++ b/general/dubbo/go-server/tests/integration/main_test.go
@@ -21,16 +21,16 @@ package integration
 
 import (
 	hessian "github.com/apache/dubbo-go-hessian2"
-	"github.com/apache/dubbo-go/config"
-
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	"dubbo.apache.org/dubbo-go/v3/config"
+
+	_ "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/metadata/service/inmemory"
+	_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
 import (
diff --git a/general/dubbo3/README.md b/general/dubbo3/README.md
new file mode 100644
index 0000000..462fab7
--- /dev/null
+++ b/general/dubbo3/README.md
@@ -0,0 +1,24 @@
+# Triple-go (Dubbo-go3.0) example
+
+Triple-go is a network protocol library released in version 3.0 based on the existing Dubbo service management capabilities.
+
+## Triple protocol introduction and source code:
+
+https://github.com/dubbogo/triple
+
+
+## Triple-go provides capabilities:
+-Intercommunication with Grpc, supporting normal calls and streaming calls
+
+[Example](./pb/dubbogo-grpc/README.md)
+
+-Intercommunication with Triple-java, currently the java side supports ordinary calls
+
+[Example](./pb/dubbogo-java/README.md)
+
+
+-Support Pb serialization and Hessian serialization. After Hessian serialization, it can be serialized again by nesting the following pb:
+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/general/dubbo3/README_zh.md
new file mode 100644
index 0000000..615ba3c
--- /dev/null
+++ b/general/dubbo3/README_zh.md
@@ -0,0 +1,24 @@
+# Triple-go(Dubbo-go3.0) 示例
+
+Triple-go 是在已有Dubbo服务治理能力的基础上,3.0 版本发布的网络协议库。
+
+## Triple 协议介绍以及源码:
+
+https://github.com/dubbogo/triple
+
+
+## Triple-go 提供能力:
+- 与 Grpc 互通,支持普通调用和流式调用
+  
+  [例子](./pb/dubbogo-grpc/README_zh.md)
+  
+- 与 Triple-java 互通,目前java端支持普通调用
+
+  [例子](./pb/dubbogo-java/README_zh.md)
+  
+
+- 支持 Pb 序列化和 Hessian 序列化,Hessian 序列化后通过嵌套入如下 pb,再次进行序列化:
+  https://github.com/dubbogo/triple/blob/master/internal/codec/proto/triple_wrapper.proto
+  
+  [例子](./hessian2/README_zh.md)
+
diff --git a/general/dubbo3/hessian2/README.md b/general/dubbo3/hessian2/README.md
new file mode 100644
index 0000000..45b4169
--- /dev/null
+++ b/general/dubbo3/hessian2/README.md
@@ -0,0 +1,26 @@
+# 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:
+https://github.com/dubbogo/triple/blob/master/internal/codec/proto/triple_wrapper.proto
+
+## Serialization scheme selection
+
+PB serialization is used by default. To use Hessian2+PB, please specify the serialization protocol as Hessian2 in the configuration file
+
+```yaml
+# service config
+services:
+  "UserProvider":
+    registry: "demoZK"
+    protocol: "tri" # tri is dubbo-go3.0 protocol
+    serialization: "hessian2" # hessian2 is serialization type
+    interface: "org.apache.dubbo.UserProvider"
+```
+
+And define pojo, provider, and consumer in the same way as dubbo-go1.5.x, then you can initiate the call.
+
+## Start service
+Run with goland
+
+triplego-hessian-client\
+triplego-hessian-server
\ No newline at end of file
diff --git a/general/dubbo3/hessian2/README_zh.md b/general/dubbo3/hessian2/README_zh.md
new file mode 100644
index 0000000..1fbbcd2
--- /dev/null
+++ b/general/dubbo3/hessian2/README_zh.md
@@ -0,0 +1,26 @@
+# Triple协议的Hessian2(Hessian+PB) 序列化方案
+
+Triple-go支持 Pb序列化和Hessian序列化,Hessian序列化后通过嵌套入如下pb,再次进行pb序列化:
+https://github.com/dubbogo/triple/blob/master/internal/codec/proto/triple_wrapper.proto
+
+## 序列化方案选择
+
+默认使用PB序列化,如需使用Hessian2+PB,请在配置文件中指定序列化协议为Hessian2
+
+```yaml
+# service config
+services:
+  "UserProvider":
+    registry: "demoZK"
+    protocol: "tri" # tri is dubbo-go3.0 protocol
+    serialization: "hessian2" # hessian2 is serialization type
+    interface: "org.apache.dubbo.UserProvider"
+```
+
+并按照与dubbo-go1.5.x相同的方法定义pojo、provider、consumer,即可发起调用。
+
+## 开启服务
+使用 goland 运行
+
+triplego-hessian-client\
+triplego-hessian-server
\ No newline at end of file
diff --git a/configcenter/apollo/go-client/cmd/client.go b/general/dubbo3/hessian2/go-client/cmd/client.go
similarity index 74%
copy from configcenter/apollo/go-client/cmd/client.go
copy to general/dubbo3/hessian2/go-client/cmd/client.go
index 77c760a..f9d9671 100644
--- a/configcenter/apollo/go-client/cmd/client.go
+++ b/general/dubbo3/hessian2/go-client/cmd/client.go
@@ -24,21 +24,21 @@ 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"
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/config_center/apollo"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
 	"github.com/dubbogo/gost/log"
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/configcenter/apollo/go-client/pkg"
+	"github.com/apache/dubbo-go-samples/general/dubbo3/hessian2/go-client/pkg"
 )
 
 var userProvider = new(pkg.UserProvider)
diff --git a/general/dubbo3/hessian2/go-client/conf/client.yml b/general/dubbo3/hessian2/go-client/conf/client.yml
new file mode 100644
index 0000000..8f0ec72
--- /dev/null
+++ b/general/dubbo3/hessian2/go-client/conf/client.yml
@@ -0,0 +1,32 @@
+# 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: "com.apache.dubbo.sample.basic.IGreeter"
\ No newline at end of file
diff --git a/router/condition/go-server/profiles/dev/log.yml b/general/dubbo3/hessian2/go-client/conf/log.yml
similarity index 90%
rename from router/condition/go-server/profiles/dev/log.yml
rename to general/dubbo3/hessian2/go-client/conf/log.yml
index 3ed242d..8c3f700 100644
--- a/router/condition/go-server/profiles/dev/log.yml
+++ b/general/dubbo3/hessian2/go-client/conf/log.yml
@@ -1,5 +1,4 @@
-
-level: "debug"
+level: "info"
 development: true
 disableCaller: false
 disableStacktrace: false
@@ -15,7 +14,7 @@ encoderConfig:
   callerKey: "caller"
   stacktraceKey: "stacktrace"
   lineEnding: ""
-  levelEncoder: "capitalColor"
+  levelEncoder: "capital"
   timeEncoder: "iso8601"
   durationEncoder: "seconds"
   callerEncoder: "short"
diff --git a/router/condition/go-client/pkg/user.go b/general/dubbo3/hessian2/go-client/pkg/hello.go
similarity index 94%
copy from router/condition/go-client/pkg/user.go
copy to general/dubbo3/hessian2/go-client/pkg/hello.go
index 7733ea4..eac055e 100644
--- a/router/condition/go-client/pkg/user.go
+++ b/general/dubbo3/hessian2/go-client/pkg/hello.go
@@ -19,14 +19,12 @@ package pkg
 
 import (
 	"context"
-	"time"
 )
 
 type User struct {
-	ID   string
+	Id   string
 	Name string
 	Age  int32
-	Time time.Time
 }
 
 type UserProvider struct {
@@ -38,5 +36,5 @@ func (u *UserProvider) Reference() string {
 }
 
 func (User) JavaClassName() string {
-	return "org.apache.dubbo.User"
+	return "com.apache.dubbo.sample.basic.User"
 }
diff --git a/helloworld/go-server/cmd/server.go b/general/dubbo3/hessian2/go-server/cmd/server.go
similarity index 70%
copy from helloworld/go-server/cmd/server.go
copy to general/dubbo3/hessian2/go-server/cmd/server.go
index 144f42a..5654245 100644
--- a/helloworld/go-server/cmd/server.go
+++ b/general/dubbo3/hessian2/go-server/cmd/server.go
@@ -26,32 +26,34 @@ import (
 )
 
 import (
-	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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"
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/helloworld/go-server/pkg"
+	"github.com/apache/dubbo-go-samples/general/dubbo3/hessian2/go-server/pkg"
 )
 
 var (
-	survivalTimeout = int(3e9)
+	survivalTimeout = int(3 * time.Second)
 )
 
+func init() {
+	config.SetProviderService(new(pkg.UserProvider))
+}
+
 // 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()
-
 	initSignal()
 }
 
@@ -66,6 +68,7 @@ func initSignal() {
 		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)
diff --git a/general/dubbo3/hessian2/go-server/conf/client.yml b/general/dubbo3/hessian2/go-server/conf/client.yml
new file mode 100644
index 0000000..c9761ef
--- /dev/null
+++ b/general/dubbo3/hessian2/go-server/conf/client.yml
@@ -0,0 +1,32 @@
+# 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/router/tag/go-client/profiles/dev/log.yml b/general/dubbo3/hessian2/go-server/conf/log.yml
similarity index 90%
rename from router/tag/go-client/profiles/dev/log.yml
rename to general/dubbo3/hessian2/go-server/conf/log.yml
index 3ed242d..8c3f700 100644
--- a/router/tag/go-client/profiles/dev/log.yml
+++ b/general/dubbo3/hessian2/go-server/conf/log.yml
@@ -1,5 +1,4 @@
-
-level: "debug"
+level: "info"
 development: true
 disableCaller: false
 disableStacktrace: false
@@ -15,7 +14,7 @@ encoderConfig:
   callerKey: "caller"
   stacktraceKey: "stacktrace"
   lineEnding: ""
-  levelEncoder: "capitalColor"
+  levelEncoder: "capital"
   timeEncoder: "iso8601"
   durationEncoder: "seconds"
   callerEncoder: "short"
diff --git a/general/dubbo3/hessian2/go-server/conf/server.yml b/general/dubbo3/hessian2/go-server/conf/server.yml
new file mode 100644
index 0000000..d00171d
--- /dev/null
+++ b/general/dubbo3/hessian2/go-server/conf/server.yml
@@ -0,0 +1,30 @@
+# 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: "hessian2" # hessian 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/router/condition/go-server/docker/docker-compose.yml b/general/dubbo3/hessian2/go-server/docker/docker-compose.yml
similarity index 100%
copy from router/condition/go-server/docker/docker-compose.yml
copy to general/dubbo3/hessian2/go-server/docker/docker-compose.yml
diff --git a/multi-registry/go-server/pkg/user.go b/general/dubbo3/hessian2/go-server/pkg/greeter.go
similarity index 86%
copy from multi-registry/go-server/pkg/user.go
copy to general/dubbo3/hessian2/go-server/pkg/greeter.go
index 9920a59..c6d39de 100644
--- a/multi-registry/go-server/pkg/user.go
+++ b/general/dubbo3/hessian2/go-server/pkg/greeter.go
@@ -19,29 +19,23 @@ package pkg
 
 import (
 	"context"
-	"time"
 )
-
 import (
 	"github.com/dubbogo/gost/log"
 )
-
 import (
 	hessian "github.com/apache/dubbo-go-hessian2"
-	"github.com/apache/dubbo-go/config"
 )
 
 func init() {
-	config.SetProviderService(new(UserProvider))
 	// ------for hessian2------
 	hessian.RegisterPOJO(&User{})
 }
 
 type User struct {
-	ID   string
+	Id   string
 	Name string
 	Age  int32
-	Time time.Time
 }
 
 type UserProvider struct {
@@ -49,7 +43,7 @@ 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()}
+	rsp := User{"A001", "Alex Stocks", 18}
 	gxlog.CInfo("rsp:%#v", rsp)
 	return &rsp, nil
 }
@@ -59,5 +53,5 @@ func (u *UserProvider) Reference() string {
 }
 
 func (u User) JavaClassName() string {
-	return "org.apache.dubbo.User"
+	return "com.apache.dubbo.sample.basic.User"
 }
diff --git a/config-api/go-server/tests/integration/main_test.go b/general/dubbo3/hessian2/go-server/tests/integration/main_test.go
similarity index 75%
copy from config-api/go-server/tests/integration/main_test.go
copy to general/dubbo3/hessian2/go-server/tests/integration/main_test.go
index f79029c..cfc20fb 100644
--- a/config-api/go-server/tests/integration/main_test.go
+++ b/general/dubbo3/hessian2/go-server/tests/integration/main_test.go
@@ -28,19 +28,17 @@ import (
 
 import (
 	hessian "github.com/apache/dubbo-go-hessian2"
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/metadata/service/inmemory"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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/inmemory"
+	_ "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) {
diff --git a/registry/servicediscovery/zookeeper/go-server/tests/integration/userprovider_test.go b/general/dubbo3/hessian2/go-server/tests/integration/userprovider_test.go
similarity index 99%
copy from registry/servicediscovery/zookeeper/go-server/tests/integration/userprovider_test.go
copy to general/dubbo3/hessian2/go-server/tests/integration/userprovider_test.go
index dc29d9a..7183e64 100644
--- a/registry/servicediscovery/zookeeper/go-server/tests/integration/userprovider_test.go
+++ b/general/dubbo3/hessian2/go-server/tests/integration/userprovider_test.go
@@ -23,6 +23,7 @@ import (
 	"context"
 	"testing"
 )
+
 import (
 	"github.com/stretchr/testify/assert"
 )
diff --git a/general/dubbo3/hessian2/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java b/general/dubbo3/hessian2/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
new file mode 100644
index 0000000..4df0b78
--- /dev/null
+++ b/general/dubbo3/hessian2/java-client/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
@@ -0,0 +1,1381 @@
+// 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>
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 1;</code>
+     */
+    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
+    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();
+      }
+      int mutable_bitField0_ = 0;
+      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>
+     */
+    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>
+     */
+    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>
+       */
+      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>
+       */
+      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>
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       */
+      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>
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 1;</code>
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>string id = 2;</code>
+     */
+    java.lang.String getId();
+    /**
+     * <code>string id = 2;</code>
+     */
+    com.google.protobuf.ByteString
+        getIdBytes();
+
+    /**
+     * <code>int32 age = 3;</code>
+     */
+    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
+    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();
+      }
+      int mutable_bitField0_ = 0;
+      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>
+     */
+    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>
+     */
+    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>
+     */
+    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>
+     */
+    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>
+     */
+    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>
+       */
+      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>
+       */
+      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>
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       */
+      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>
+       */
+      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>
+       */
+      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>
+       */
+      public Builder setId(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        id_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string id = 2;</code>
+       */
+      public Builder clearId() {
+        
+        id_ = getDefaultInstance().getId();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string id = 2;</code>
+       */
+      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>
+       */
+      public int getAge() {
+        return age_;
+      }
+      /**
+       * <code>int32 age = 3;</code>
+       */
+      public Builder setAge(int value) {
+        
+        age_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>int32 age = 3;</code>
+       */
+      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"
+    };
+    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
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        }, assigner);
+    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/general/dubbo3/hessian2/java-client/pom.xml b/general/dubbo3/hessian2/java-client/pom.xml
new file mode 100644
index 0000000..9812b42
--- /dev/null
+++ b/general/dubbo3/hessian2/java-client/pom.xml
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~  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">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.apache.dubbogo</groupId>
+    <version>1.0-SNAPSHOT</version>
+    <artifactId>dubbo-samples-triple-client</artifactId>
+
+    <properties>
+        <source.level>1.8</source.level>
+        <target.level>1.8</target.level>
+        <dubbo.version>3.0.0-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>
+        <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>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo</artifactId>
+            <version>${dubbo.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>3.14.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-dependencies-zookeeper</artifactId>
+            <version>${dubbo.version}</version>
+            <type>pom</type>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+            <version>${spring-test.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <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>
+                <groupId>org.xolstice.maven.plugins</groupId>
+                <artifactId>protobuf-maven-plugin</artifactId>
+                <version>0.6.1</version>
+                <configuration>
+                    <protocArtifact>com.google.protobuf:protoc:3.7.1:exe:${os.detected.classifier}</protocArtifact>
+                    <pluginId>triple-java</pluginId>
+                    <outputDirectory>build/generated/source/proto/main/java</outputDirectory>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>compile</goal>
+                            <goal>test-compile</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <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>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>add-source</goal>
+                        </goals>
+                        <configuration>
+                            <sources>
+                                <source>build/generated/source/proto/main/java</source>
+                            </sources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
\ No newline at end of file
diff --git a/general/dubbo3/hessian2/java-client/run.sh b/general/dubbo3/hessian2/java-client/run.sh
new file mode 100644
index 0000000..5152f3a
--- /dev/null
+++ b/general/dubbo3/hessian2/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/general/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java b/general/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java
new file mode 100644
index 0000000..d80df27
--- /dev/null
+++ b/general/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/ApiConsumer.java
@@ -0,0 +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.
+ */
+
+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.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");
+        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);
+
+            } catch (Throwable t) {
+                t.printStackTrace();
+            }
+
+        }
+        System.in.read();
+    }
+}
diff --git a/general/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java b/general/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
new file mode 100644
index 0000000..1c6f637
--- /dev/null
+++ b/general/dubbo3/hessian2/java-client/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;
+
+
+
+public interface IGreeter {
+    /**
+     * <pre>
+     *  Sends a greeting
+     * </pre>
+     */
+    User getUser(String request);
+
+}
diff --git a/general/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/User.java b/general/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/User.java
new file mode 100644
index 0000000..b5a6017
--- /dev/null
+++ b/general/dubbo3/hessian2/java-client/src/main/java/com/apache/dubbo/sample/basic/User.java
@@ -0,0 +1,9 @@
+package com.apache.dubbo.sample.basic;
+
+import java.io.Serializable;
+
+public class User implements Serializable {
+    String name;
+    String id;
+    int age;
+}
diff --git a/general/dubbo3/hessian2/java-client/src/main/proto/helloworld.proto b/general/dubbo3/hessian2/java-client/src/main/proto/helloworld.proto
new file mode 100644
index 0000000..ee6ca29
--- /dev/null
+++ b/general/dubbo3/hessian2/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/general/dubbo3/hessian2/java-client/src/main/resources/log4j.properties b/general/dubbo3/hessian2/java-client/src/main/resources/log4j.properties
new file mode 100644
index 0000000..6b82aba
--- /dev/null
+++ b/general/dubbo3/hessian2/java-client/src/main/resources/log4j.properties
@@ -0,0 +1,26 @@
+#
+#
+#   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/general/dubbo3/hessian2/java-server/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java b/general/dubbo3/hessian2/java-server/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
new file mode 100644
index 0000000..4df0b78
--- /dev/null
+++ b/general/dubbo3/hessian2/java-server/build/generated/source/proto/main/java/org/apache/dubbo/sample/hello/Helloworld.java
@@ -0,0 +1,1381 @@
+// 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>
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 1;</code>
+     */
+    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
+    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();
+      }
+      int mutable_bitField0_ = 0;
+      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>
+     */
+    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>
+     */
+    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>
+       */
+      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>
+       */
+      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>
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       */
+      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>
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 1;</code>
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>string id = 2;</code>
+     */
+    java.lang.String getId();
+    /**
+     * <code>string id = 2;</code>
+     */
+    com.google.protobuf.ByteString
+        getIdBytes();
+
+    /**
+     * <code>int32 age = 3;</code>
+     */
+    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
+    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();
+      }
+      int mutable_bitField0_ = 0;
+      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>
+     */
+    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>
+     */
+    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>
+     */
+    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>
+     */
+    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>
+     */
+    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>
+       */
+      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>
+       */
+      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>
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       */
+      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>
+       */
+      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>
+       */
+      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>
+       */
+      public Builder setId(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        id_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string id = 2;</code>
+       */
+      public Builder clearId() {
+        
+        id_ = getDefaultInstance().getId();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string id = 2;</code>
+       */
+      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>
+       */
+      public int getAge() {
+        return age_;
+      }
+      /**
+       * <code>int32 age = 3;</code>
+       */
+      public Builder setAge(int value) {
+        
+        age_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>int32 age = 3;</code>
+       */
+      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"
+    };
+    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
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        }, assigner);
+    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/general/dubbo3/hessian2/java-server/pom.xml b/general/dubbo3/hessian2/java-server/pom.xml
new file mode 100644
index 0000000..a6c41b5
--- /dev/null
+++ b/general/dubbo3/hessian2/java-server/pom.xml
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~  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>
+
+    <artifactId>dubbo-samples-triple</artifactId>
+
+    <properties>
+        <source.level>1.8</source.level>
+        <target.level>1.8</target.level>
+        <dubbo.version>3.0.0-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>
+        <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>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo</artifactId>
+            <version>${dubbo.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>3.14.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-dependencies-zookeeper</artifactId>
+            <version>${dubbo.version}</version>
+            <type>pom</type>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+            <version>${spring-test.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <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>
+                <groupId>org.xolstice.maven.plugins</groupId>
+                <artifactId>protobuf-maven-plugin</artifactId>
+                <version>0.6.1</version>
+                <configuration>
+                    <protocArtifact>com.google.protobuf:protoc:3.7.1:exe:${os.detected.classifier}</protocArtifact>
+                    <pluginId>triple-java</pluginId>
+                    <outputDirectory>build/generated/source/proto/main/java</outputDirectory>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>compile</goal>
+                            <goal>test-compile</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <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>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>add-source</goal>
+                        </goals>
+                        <configuration>
+                            <sources>
+                                <source>build/generated/source/proto/main/java</source>
+                            </sources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
\ No newline at end of file
diff --git a/general/dubbo3/hessian2/java-server/run.sh b/general/dubbo3/hessian2/java-server/run.sh
new file mode 100644
index 0000000..939b13d
--- /dev/null
+++ b/general/dubbo3/hessian2/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/general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java b/general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/ApiProvider.java
new file mode 100644
index 0000000..8a6f7f2
--- /dev/null
+++ b/general/dubbo3/hessian2/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, 50053));
+        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/general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java b/general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
new file mode 100644
index 0000000..3c7b561
--- /dev/null
+++ b/general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter.java
@@ -0,0 +1,29 @@
+/*
+ *  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;
+
+
+public interface IGreeter {
+    /**
+     * <pre>
+     *  Sends a greeting
+     * </pre>
+     */
+    User getUser(String request);
+
+}
diff --git a/general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter1Impl.java b/general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter1Impl.java
new file mode 100644
index 0000000..62371d8
--- /dev/null
+++ b/general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/IGreeter1Impl.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;
+
+
+public class IGreeter1Impl implements IGreeter {
+    @Override
+    public User getUser(String request) {
+        System.out.println("receiv: " + request);
+        User usr = new User();
+        usr.age = 19;
+        usr.name = "hello" + request;
+        usr.id = "23";
+        return usr;
+    }
+}
diff --git a/general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/User.java b/general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/User.java
new file mode 100644
index 0000000..b5a6017
--- /dev/null
+++ b/general/dubbo3/hessian2/java-server/src/main/java/com/apache/dubbo/sample/basic/User.java
@@ -0,0 +1,9 @@
+package com.apache.dubbo.sample.basic;
+
+import java.io.Serializable;
+
+public class User implements Serializable {
+    String name;
+    String id;
+    int age;
+}
diff --git a/general/dubbo3/hessian2/java-server/src/main/proto/helloworld.proto b/general/dubbo3/hessian2/java-server/src/main/proto/helloworld.proto
new file mode 100644
index 0000000..ee6ca29
--- /dev/null
+++ b/general/dubbo3/hessian2/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/general/dubbo3/hessian2/java-server/src/main/resources/log4j.properties b/general/dubbo3/hessian2/java-server/src/main/resources/log4j.properties
new file mode 100644
index 0000000..6b82aba
--- /dev/null
+++ b/general/dubbo3/hessian2/java-server/src/main/resources/log4j.properties
@@ -0,0 +1,26 @@
+#
+#
+#   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/general/dubbo3/pb/dubbogo-grpc/README.md b/general/dubbo3/pb/dubbogo-grpc/README.md
new file mode 100644
index 0000000..a79d119
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-grpc/README.md
@@ -0,0 +1,186 @@
+# Triple-Grpc interactive example
+
+## Example structure
+
+In this example, we provide proto protocol, server, unary RPC client, streaming rpc client for triple and grpc respectively.
+
+Any group of client and server can be used interchangeably to implement RPC calls.
+
+## Triple service start
+
+### pb generation
+1. First write the proto file
+
+```protobuf
+syntax = "proto3";
+
+option go_package = "protobuf/dubbo3";
+package protobuf;
+
+// The greeting service definition.
+service Greeter {
+  // Sends a greeting
+  rpc SayHello (HelloRequest) returns (User) {}
+  rpc SayHelloStream (stream HelloRequest) returns (stream User) {}
+}
+
+// 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;
+}
+
+```
+2. Install the protoc cli tool
+    
+3. Install protoc-gen-dubbo3 (used to generate a stub suitable for triple)    
+```shell
+    go get -u dubbo.apache.org/dubbo-go/v3/protocol/dubbo3/protoc-gen-dubbo3@3.0
+```
+
+4. generate pb file
+```shell
+    protoc -I . helloworld.proto --dubbo3_out=plugins=grpc+dubbo:.
+```
+
+### Server start
+1. Provider structure definition
+```go
+package pkg
+
+import (
+    "context"
+    "fmt"
+)
+
+import (
+    "dubbo.apache.org/dubbo-go/v3/common/logger"
+)
+
+import (
+    dubbo3 "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3"
+)
+
+type GreeterProvider struct {
+// Introduce dubbo3 provider base
+    *dubbo3.GreeterProviderBase
+}
+
+func NewGreeterProvider() *GreeterProvider {
+    return &GreeterProvider{// Initialize base with the instance in the generated pb
+        GreeterProviderBase: &dubbo3.GreeterProviderBase{},
+    }
+}
+// SayHelloStream provides functions for streaming RPC calls
+func (s *GreeterProvider) SayHelloStream(svr dubbo3.Greeter_SayHelloStreamServer) error {
+    c, err := svr.Recv()
+    if err != nil {
+        return err
+    }
+    logger.Infof("Dubbo-go3 GreeterProvider recv 1 user, name = %s\n", c.Name)
+    c2, err := svr.Recv()
+    if err != nil {
+        return err
+    }
+    logger.Infof("Dubbo-go3 GreeterProvider recv 2 user, name = %s\n", c2.Name)
+    c3, err := svr.Recv()
+    if err != nil {
+        return err
+    }
+    logger.Infof("Dubbo-go3 GreeterProvider recv 3 user, name = %s\n", c3.Name)
+    
+    svr.Send(&dubbo3.User{
+        Name: "hello "+ c.Name,
+        Age: 18,
+        Id: "123456789",
+    })
+    svr.Send(&dubbo3.User{
+        Name: "hello "+ c2.Name,
+        Age: 19,
+        Id: "123456789",
+    })
+    return nil
+}
+
+// SayHello provides service functions called by ordinary rpc
+func (s *GreeterProvider) SayHello(ctx context.Context, in *dubbo3.HelloRequest) (*dubbo3.User, error) {
+    logger.Infof("Dubbo3 GreeterProvider get user name = %s\n" + in.Name)
+    fmt.Println("get triple header tri-req-id = ", ctx.Value("tri-req-id"))
+    fmt.Println("get triple header tri-service-version = ", ctx.Value("tri-service-version"))
+    return &dubbo3.User{Name: "Hello "+ in.Name, Id: "12345", Age: 21}, nil
+}
+
+// Reference needs to correspond to the Reference key in config
+func (g *GreeterProvider) Reference() string {
+    return "GreeterProvider"
+}
+```
+2. Configuration file
+   server/dubbogo-server/conf/server.yml
+```yaml
+# service config
+services:
+  "GreeterProvider":
+    registry: "demoZK"
+    protocol: "tri" # Use triple protocol
+    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.
+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:
+```go
+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
+}
+```
+
+3. Start the server
+
+goland run
+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
+```go
+import (
+    dubbo3pb "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3"
+)
+
+// Directly introduce the GreeterClientImpl structure, you can enter the structure, and see the Reference as "greeterImpl"
+var greeterProvider = new(dubbo3pb.GreeterClientImpl)
+
+func init() {
+    config.SetConsumerService(greeterProvider)
+}
+```
+
+The corresponding reference key is defined in the configuration file
+```yaml
+# reference config
+references:
+  "greeterImpl":
+    registry: "demoZk"
+    protocol: "tri"
+    interface: "protobuf.Greeter"
+    url: tri://localhost:20001
+```
+
+2. Start the client
+
+goland run
+triple/triple-unary-client
\ No newline at end of file
diff --git a/general/dubbo3/pb/dubbogo-grpc/README_zh.md b/general/dubbo3/pb/dubbogo-grpc/README_zh.md
new file mode 100644
index 0000000..bb8f130
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-grpc/README_zh.md
@@ -0,0 +1,187 @@
+# Triple-Grpc 互通示例
+
+## 示例结构
+
+在本示例中,我们针对 triple 和 grpc ,分别提供了 proto 协议、服务端、普通 RPC 客户端、流式调用而客户端。
+
+可以交叉使用任一组客户端和服务端,实现 RPC 调用。 
+
+## Triple 服务启动
+
+### pb 生成
+1. 首先编写 proto 文件
+  
+```protobuf
+syntax = "proto3";
+
+option go_package = "protobuf/dubbo3";
+package protobuf;
+
+// The greeting service definition.
+service Greeter {
+  // Sends a greeting
+  rpc SayHello (HelloRequest) returns (User) {}
+  rpc SayHelloStream (stream HelloRequest) returns (stream User) {}
+}
+
+// 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;
+}
+```
+
+2. 安装 protoc cli 工具
+   
+3. 安装 protoc-gen-dubbo3(用于生成适配于triple的stub)
+```shell
+go get -u dubbo.apache.org/dubbo-go/v3/protocol/dubbo3/protoc-gen-dubbo3@3.0
+```
+4. 生成 pb 文件
+```shell
+    protoc -I . helloworld.proto --dubbo3_out=plugins=grpc+dubbo:.
+```
+
+### 服务端启动
+1. Provider 结构定义
+```go
+package pkg
+
+import (
+	"context"
+	"fmt"
+)
+
+import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
+)
+
+import (
+	dubbo3 "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3"
+)
+
+type GreeterProvider struct {
+	// 引入dubbo3 provider base
+	*dubbo3.GreeterProviderBase
+}
+
+func NewGreeterProvider() *GreeterProvider {
+	return &GreeterProvider{// 使用生成的pb中的实例初始化base
+		GreeterProviderBase: &dubbo3.GreeterProviderBase{},
+	}
+}
+
+// SayHelloStream 提供流式RPC调用的函数
+func (s *GreeterProvider) SayHelloStream(svr dubbo3.Greeter_SayHelloStreamServer) error {
+	c, err := svr.Recv()
+	if err != nil {
+		return err
+	}
+	logger.Infof("Dubbo-go3 GreeterProvider recv 1 user, name = %s\n", c.Name)
+	c2, err := svr.Recv()
+	if err != nil {
+		return err
+	}
+	logger.Infof("Dubbo-go3 GreeterProvider recv 2 user, name = %s\n", c2.Name)
+	c3, err := svr.Recv()
+	if err != nil {
+		return err
+	}
+	logger.Infof("Dubbo-go3 GreeterProvider recv 3 user, name = %s\n", c3.Name)
+
+	svr.Send(&dubbo3.User{
+		Name: "hello " + c.Name,
+		Age:  18,
+		Id:   "123456789",
+	})
+	svr.Send(&dubbo3.User{
+		Name: "hello " + c2.Name,
+		Age:  19,
+		Id:   "123456789",
+	})
+	return nil
+}
+
+// SayHello 提供普通rpc调用的服务函数
+func (s *GreeterProvider) SayHello(ctx context.Context, in *dubbo3.HelloRequest) (*dubbo3.User, error) {
+	logger.Infof("Dubbo3 GreeterProvider get user name = %s\n" + in.Name)
+	fmt.Println("get triple header tri-req-id = ", ctx.Value("tri-req-id"))
+	fmt.Println("get triple header tri-service-version = ", ctx.Value("tri-service-version"))
+	return &dubbo3.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
+}
+
+// Reference 需要和config中Reference key 对应
+func (g *GreeterProvider) Reference() string {
+	return "GreeterProvider"
+}
+```
+2. 配置文件
+server/dubbogo-server/conf/server.yml
+```yaml
+# service config
+services:
+  "GreeterProvider":
+    registry: "demoZK"
+    protocol: "tri" # 使用triple协议
+    interface: "protobuf.Greeter" # 和grpc生成的的接口名一致,如下
+```
+
+Grpc pb 文件的接口名可见为 protobuf.Greeter, 是用户根据需要定义的。
+triple-go 要想和 grpc 打通,一定要和 grpc 的接口名一致,并正确配置在 yaml 文件中。
+
+protobuf/grpc/helloworld.pb.go:
+```go
+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
+}
+```
+
+3. 启动服务端
+
+goland 运行
+triple/triple-server
+
+## 客户端(以普通rpc调用为例, 流式RPC同理)
+
+1. Consumer 端结构定义
+Consumer 结构已经在pb文件中实现好,可直接引入
+```go
+import (
+    dubbo3pb "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3"
+)
+
+// 直接引入GreeterClientImpl 结构,可以进入该结构,查看Reference为“greeterImpl”
+var greeterProvider = new(dubbo3pb.GreeterClientImpl)
+
+func init() {
+    config.SetConsumerService(greeterProvider)
+}
+```
+
+配置文件中定义好对应 reference key
+```yaml
+# reference config
+references:
+  "greeterImpl":
+    registry: "demoZk"
+    protocol: "tri"
+    interface: "protobuf.Greeter"
+    url: tri://localhost:20001
+```
+
+2. 启动客户端
+
+goland 运行
+triple/triple-unary-client
+
diff --git a/general/grpc/unary/go-server/app/helloworld.pb.go b/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/helloworld.pb.go
similarity index 53%
copy from general/grpc/unary/go-server/app/helloworld.pb.go
copy to general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/helloworld.pb.go
index 3f17426..bc2822f 100644
--- a/general/grpc/unary/go-server/app/helloworld.pb.go
+++ b/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/helloworld.pb.go
@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: helloworld.proto
 
-package main
+package protobuf
 
 import (
 	context "context"
@@ -14,9 +14,11 @@ import (
 )
 
 import (
-	"github.com/apache/dubbo-go/protocol"
-	dgrpc "github.com/apache/dubbo-go/protocol/grpc"
-	"github.com/apache/dubbo-go/protocol/invocation"
+	"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"
 )
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -71,66 +73,82 @@ func (m *HelloRequest) GetName() string {
 }
 
 // The response message containing the greetings
-type HelloReply struct {
-	Message              string   `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
+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 *HelloReply) Reset()         { *m = HelloReply{} }
-func (m *HelloReply) String() string { return proto.CompactTextString(m) }
-func (*HelloReply) ProtoMessage()    {}
-func (*HelloReply) Descriptor() ([]byte, []int) {
+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 *HelloReply) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_HelloReply.Unmarshal(m, b)
+func (m *User) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_User.Unmarshal(m, b)
 }
-func (m *HelloReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_HelloReply.Marshal(b, m, deterministic)
+func (m *User) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_User.Marshal(b, m, deterministic)
 }
-func (m *HelloReply) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_HelloReply.Merge(m, src)
+func (m *User) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_User.Merge(m, src)
 }
-func (m *HelloReply) XXX_Size() int {
-	return xxx_messageInfo_HelloReply.Size(m)
+func (m *User) XXX_Size() int {
+	return xxx_messageInfo_User.Size(m)
 }
-func (m *HelloReply) XXX_DiscardUnknown() {
-	xxx_messageInfo_HelloReply.DiscardUnknown(m)
+func (m *User) XXX_DiscardUnknown() {
+	xxx_messageInfo_User.DiscardUnknown(m)
 }
 
-var xxx_messageInfo_HelloReply proto.InternalMessageInfo
+var xxx_messageInfo_User proto.InternalMessageInfo
+
+func (m *User) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
 
-func (m *HelloReply) GetMessage() string {
+func (m *User) GetID() string {
 	if m != nil {
-		return m.Message
+		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((*HelloReply)(nil), "protobuf.HelloReply")
+	proto.RegisterType((*User)(nil), "protobuf.User")
 }
 
 func init() { proto.RegisterFile("helloworld.proto", fileDescriptor_17b8c58d586b62f2) }
 
 var fileDescriptor_17b8c58d586b62f2 = []byte{
-	// 183 bytes of a gzipped FileDescriptorProto
+	// 178 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, 0x49, 0x8d, 0x8b, 0x0b, 0xaa, 0xa6, 0x20, 0xa7, 0x52, 0x48, 0x82, 0x8b, 0x3d, 0x37,
-	0xb5, 0xb8, 0x38, 0x31, 0x1d, 0xa6, 0x08, 0xc6, 0x35, 0x72, 0xe5, 0x62, 0x77, 0x2f, 0x4a, 0x4d,
-	0x2d, 0x49, 0x2d, 0x12, 0xb2, 0xe2, 0xe2, 0x08, 0x4e, 0xac, 0x04, 0xeb, 0x12, 0x12, 0xd3, 0x83,
-	0xd9, 0xa6, 0x87, 0x6c, 0x95, 0x94, 0x08, 0x86, 0x78, 0x41, 0x4e, 0xa5, 0x12, 0x83, 0x93, 0x36,
-	0x97, 0x40, 0x7e, 0x51, 0xba, 0x5e, 0x62, 0x41, 0x62, 0x72, 0x46, 0xaa, 0x5e, 0x4a, 0x69, 0x52,
-	0x52, 0xbe, 0x13, 0x3f, 0x58, 0x45, 0x38, 0xc8, 0x0b, 0x01, 0x20, 0x4d, 0x01, 0x8c, 0x8b, 0x98,
-	0x98, 0x3d, 0x7c, 0xc2, 0x93, 0xd8, 0xc0, 0x66, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xde,
-	0x1e, 0xf0, 0xa3, 0xe4, 0x00, 0x00, 0x00,
+	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, 0xaa, 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, 0x84, 0xec, 0xb8,
+	0xf8, 0x60, 0xba, 0x82, 0x4b, 0x8a, 0x52, 0x13, 0x73, 0x89, 0xd7, 0xab, 0xc1, 0x68, 0xc0, 0x98,
+	0xc4, 0x06, 0x16, 0x34, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x98, 0x59, 0x9f, 0x6b, 0x07, 0x01,
+	0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -146,7 +164,8 @@ const _ = grpc.SupportPackageIsVersion6
 // 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) (*HelloReply, error)
+	SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*User, error)
+	SayHelloStream(ctx context.Context, opts ...grpc.CallOption) (Greeter_SayHelloStreamClient, error)
 }
 
 type greeterClient struct {
@@ -157,8 +176,8 @@ func NewGreeterClient(cc grpc.ClientConnInterface) GreeterClient {
 	return &greeterClient{cc}
 }
 
-func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*HelloReply, error) {
-	out := new(HelloReply)
+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
@@ -166,19 +185,54 @@ func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...
 	return out, nil
 }
 
+func (c *greeterClient) SayHelloStream(ctx context.Context, opts ...grpc.CallOption) (Greeter_SayHelloStreamClient, error) {
+	stream, err := c.cc.NewStream(ctx, &_Greeter_serviceDesc.Streams[0], "/protobuf.Greeter/SayHelloStream", opts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &greeterSayHelloStreamClient{stream}
+	return x, nil
+}
+
+type Greeter_SayHelloStreamClient interface {
+	Send(*HelloRequest) error
+	Recv() (*User, error)
+	grpc.ClientStream
+}
+
+type greeterSayHelloStreamClient struct {
+	grpc.ClientStream
+}
+
+func (x *greeterSayHelloStreamClient) Send(m *HelloRequest) error {
+	return x.ClientStream.SendMsg(m)
+}
+
+func (x *greeterSayHelloStreamClient) Recv() (*User, error) {
+	m := new(User)
+	if err := x.ClientStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
 // GreeterServer is the server API for Greeter service.
 type GreeterServer interface {
 	// Sends a greeting
-	SayHello(context.Context, *HelloRequest) (*HelloReply, error)
+	SayHello(context.Context, *HelloRequest) (*User, error)
+	SayHelloStream(Greeter_SayHelloStreamServer) error
 }
 
 // UnimplementedGreeterServer can be embedded to have forward compatible implementations.
 type UnimplementedGreeterServer struct {
 }
 
-func (*UnimplementedGreeterServer) SayHello(ctx context.Context, req *HelloRequest) (*HelloReply, error) {
+func (*UnimplementedGreeterServer) SayHello(ctx context.Context, req *HelloRequest) (*User, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method SayHello not implemented")
 }
+func (*UnimplementedGreeterServer) SayHelloStream(srv Greeter_SayHelloStreamServer) error {
+	return status.Errorf(codes.Unimplemented, "method SayHelloStream not implemented")
+}
 
 func RegisterGreeterServer(s *grpc.Server, srv GreeterServer) {
 	s.RegisterService(&_Greeter_serviceDesc, srv)
@@ -202,6 +256,32 @@ func _Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(in
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Greeter_SayHelloStream_Handler(srv interface{}, stream grpc.ServerStream) error {
+	return srv.(GreeterServer).SayHelloStream(&greeterSayHelloStreamServer{stream})
+}
+
+type Greeter_SayHelloStreamServer interface {
+	Send(*User) error
+	Recv() (*HelloRequest, error)
+	grpc.ServerStream
+}
+
+type greeterSayHelloStreamServer struct {
+	grpc.ServerStream
+}
+
+func (x *greeterSayHelloStreamServer) Send(m *User) error {
+	return x.ServerStream.SendMsg(m)
+}
+
+func (x *greeterSayHelloStreamServer) Recv() (*HelloRequest, error) {
+	m := new(HelloRequest)
+	if err := x.ServerStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
 var _Greeter_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "protobuf.Greeter",
 	HandlerType: (*GreeterServer)(nil),
@@ -211,24 +291,58 @@ var _Greeter_serviceDesc = grpc.ServiceDesc{
 			Handler:    _Greeter_SayHello_Handler,
 		},
 	},
-	Streams:  []grpc.StreamDesc{},
+	Streams: []grpc.StreamDesc{
+		{
+			StreamName:    "SayHelloStream",
+			Handler:       _Greeter_SayHelloStream_Handler,
+			ServerStreams: true,
+			ClientStreams: true,
+		},
+	},
 	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
+}
+func (c *greeterDubbo3Client) SayHelloStream(ctx context.Context, opt ...grpc.CallOption) (Greeter_SayHelloStreamClient, error) {
+	interfaceKey := ctx.Value(tripleConstant.InterfaceKey).(string)
+	stream, err := c.cc.NewStream(ctx, "/"+interfaceKey+"/SayHelloStream", opt...)
+	if err != nil {
+		return nil, err
+	}
+	x := &greeterSayHelloStreamClient{stream}
+	return x, 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 *HelloReply) error
+	SayHello       func(ctx context.Context, in *HelloRequest, out *User) error
+	SayHelloStream func(ctx context.Context) (Greeter_SayHelloStreamClient, error)
 }
 
 func (c *GreeterClientImpl) Reference() string {
 	return "greeterImpl"
 }
 
-func (c *GreeterClientImpl) GetDubboStub(cc *grpc.ClientConn) GreeterClient {
-	return NewGreeterClient(cc)
+func (c *GreeterClientImpl) GetDubboStub(cc *dubbo3.TripleConn) GreeterClient {
+	return NewGreeterDubbo3Client(cc)
 }
 
 type GreeterProviderBase struct {
@@ -248,12 +362,12 @@ func _DUBBO_Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec f
 	if err := dec(in); err != nil {
 		return nil, err
 	}
-	base := srv.(dgrpc.DubboGrpcService)
+	base := srv.(dgrpc.Dubbo3GrpcService)
 	args := []interface{}{}
 	args = append(args, in)
 	invo := invocation.NewRPCInvocation("SayHello", args, nil)
 	if interceptor == nil {
-		result := base.GetProxyImpl().Invoke(context.Background(), invo)
+		result := base.GetProxyImpl().Invoke(ctx, invo)
 		return result.Result(), result.Error()
 	}
 	info := &grpc.UnaryServerInfo{
@@ -267,6 +381,15 @@ func _DUBBO_Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec f
 	return interceptor(ctx, in, info, handler)
 }
 
+func _DUBBO_Greeter_SayHelloStream_Handler(srv interface{}, stream grpc.ServerStream) error {
+	_, ok := srv.(dgrpc.Dubbo3GrpcService)
+	invo := invocation.NewRPCInvocation("SayHelloStream", nil, nil)
+	if !ok {
+		fmt.Println(invo)
+	}
+	return srv.(GreeterServer).SayHelloStream(&greeterSayHelloStreamServer{stream})
+}
+
 func (s *GreeterProviderBase) ServiceDesc() *grpc.ServiceDesc {
 	return &grpc.ServiceDesc{
 		ServiceName: "protobuf.Greeter",
@@ -277,7 +400,14 @@ func (s *GreeterProviderBase) ServiceDesc() *grpc.ServiceDesc {
 				Handler:    _DUBBO_Greeter_SayHello_Handler,
 			},
 		},
-		Streams:  []grpc.StreamDesc{},
+		Streams: []grpc.StreamDesc{
+			{
+				StreamName:    "SayHelloStream",
+				Handler:       _DUBBO_Greeter_SayHelloStream_Handler,
+				ServerStreams: true,
+				ClientStreams: true,
+			},
+		},
 		Metadata: "helloworld.proto",
 	}
 }
diff --git a/registry/servicediscovery/zookeeper/go-client/pkg/user.go b/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/helloworld.proto
similarity index 64%
copy from registry/servicediscovery/zookeeper/go-client/pkg/user.go
copy to general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/helloworld.proto
index 7733ea4..d0a746e 100644
--- a/registry/servicediscovery/zookeeper/go-client/pkg/user.go
+++ b/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/helloworld.proto
@@ -15,28 +15,24 @@
  * 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) {}
+  rpc SayHelloStream (stream HelloRequest) returns (stream 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/general/grpc/protobuf/protobuf.mk b/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/protobuf.mk
similarity index 75%
copy from general/grpc/protobuf/protobuf.mk
copy to general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/protobuf.mk
index 618c49d..bd5c19a 100644
--- a/general/grpc/protobuf/protobuf.mk
+++ b/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3/protobuf.mk
@@ -16,10 +16,10 @@ ifeq ($(UNAME), Linux)
 endif
 
 $(PROTOC_GEN_GO):
-	go get -u github.com/apache/dubbo-go/protocol/grpc/protoc-gen-dubbo
+	go get -u dubbo.apache.org/dubbo-go/v3/protocol/dubbo3/protoc-gen-dubbo3@3.0
 
 helloworld.pb.go: helloworld.proto | $(PROTOC_GEN_GO) $(PROTOC)
-	protoc -I . helloworld.proto --dubbo_out=plugins=grpc+dubbo:.
+	protoc -I . helloworld.proto --dubbo3_out=plugins=grpc+dubbo:.
 
 .PHONY: compile
 compile: helloworld.pb.go
diff --git a/general/dubbo3/pb/dubbogo-grpc/protobuf/grpc/helloworld.pb.go b/general/dubbo3/pb/dubbogo-grpc/protobuf/grpc/helloworld.pb.go
new file mode 100644
index 0000000..cfe7fa2
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-grpc/protobuf/grpc/helloworld.pb.go
@@ -0,0 +1,407 @@
+//
+// 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.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.26.0
+// 	protoc        v3.15.6
+// source: helloworld.proto
+
+package grpc
+
+import (
+	context "context"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// The request message containing the user's name.
+type HelloRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+}
+
+func (x *HelloRequest) Reset() {
+	*x = HelloRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_helloworld_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *HelloRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HelloRequest) ProtoMessage() {}
+
+func (x *HelloRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_helloworld_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use HelloRequest.ProtoReflect.Descriptor instead.
+func (*HelloRequest) Descriptor() ([]byte, []int) {
+	return file_helloworld_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *HelloRequest) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+// The response message containing the greetings
+type User struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	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"`
+}
+
+func (x *User) Reset() {
+	*x = User{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_helloworld_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *User) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*User) ProtoMessage() {}
+
+func (x *User) ProtoReflect() protoreflect.Message {
+	mi := &file_helloworld_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use User.ProtoReflect.Descriptor instead.
+func (*User) Descriptor() ([]byte, []int) {
+	return file_helloworld_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *User) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *User) GetID() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *User) GetAge() int32 {
+	if x != nil {
+		return x.Age
+	}
+	return 0
+}
+
+var File_helloworld_proto protoreflect.FileDescriptor
+
+var file_helloworld_proto_rawDesc = []byte{
+	0x0a, 0x10, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x12, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x22, 0x22, 0x0a, 0x0c,
+	0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x22, 0x3c, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02,
+	0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03,
+	0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x61, 0x67, 0x65, 0x32, 0x7f,
+	0x0a, 0x07, 0x47, 0x72, 0x65, 0x65, 0x74, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x08, 0x53, 0x61, 0x79,
+	0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x22, 0x00, 0x12,
+	0x3e, 0x0a, 0x0e, 0x53, 0x61, 0x79, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x53, 0x74, 0x72, 0x65, 0x61,
+	0x6d, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x48, 0x65, 0x6c,
+	0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42,
+	0x11, 0x5a, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x62, 0x62,
+	0x6f, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_helloworld_proto_rawDescOnce sync.Once
+	file_helloworld_proto_rawDescData = file_helloworld_proto_rawDesc
+)
+
+func file_helloworld_proto_rawDescGZIP() []byte {
+	file_helloworld_proto_rawDescOnce.Do(func() {
+		file_helloworld_proto_rawDescData = protoimpl.X.CompressGZIP(file_helloworld_proto_rawDescData)
+	})
+	return file_helloworld_proto_rawDescData
+}
+
+var file_helloworld_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_helloworld_proto_goTypes = []interface{}{
+	(*HelloRequest)(nil), // 0: protobuf.HelloRequest
+	(*User)(nil),         // 1: protobuf.User
+}
+var file_helloworld_proto_depIdxs = []int32{
+	0, // 0: protobuf.Greeter.SayHello:input_type -> protobuf.HelloRequest
+	0, // 1: protobuf.Greeter.SayHelloStream:input_type -> protobuf.HelloRequest
+	1, // 2: protobuf.Greeter.SayHello:output_type -> protobuf.User
+	1, // 3: protobuf.Greeter.SayHelloStream:output_type -> protobuf.User
+	2, // [2:4] is the sub-list for method output_type
+	0, // [0:2] is the sub-list for method input_type
+	0, // [0:0] is the sub-list for extension type_name
+	0, // [0:0] is the sub-list for extension extendee
+	0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_helloworld_proto_init() }
+func file_helloworld_proto_init() {
+	if File_helloworld_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_helloworld_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*HelloRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_helloworld_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*User); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_helloworld_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   2,
+			NumExtensions: 0,
+			NumServices:   1,
+		},
+		GoTypes:           file_helloworld_proto_goTypes,
+		DependencyIndexes: file_helloworld_proto_depIdxs,
+		MessageInfos:      file_helloworld_proto_msgTypes,
+	}.Build()
+	File_helloworld_proto = out.File
+	file_helloworld_proto_rawDesc = nil
+	file_helloworld_proto_goTypes = nil
+	file_helloworld_proto_depIdxs = nil
+}
+
+// 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)
+	SayHelloStream(ctx context.Context, opts ...grpc.CallOption) (Greeter_SayHelloStreamClient, 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
+}
+
+func (c *greeterClient) SayHelloStream(ctx context.Context, opts ...grpc.CallOption) (Greeter_SayHelloStreamClient, error) {
+	stream, err := c.cc.NewStream(ctx, &_Greeter_serviceDesc.Streams[0], "/protobuf.Greeter/SayHelloStream", opts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &greeterSayHelloStreamClient{stream}
+	return x, nil
+}
+
+type Greeter_SayHelloStreamClient interface {
+	Send(*HelloRequest) error
+	Recv() (*User, error)
+	grpc.ClientStream
+}
+
+type greeterSayHelloStreamClient struct {
+	grpc.ClientStream
+}
+
+func (x *greeterSayHelloStreamClient) Send(m *HelloRequest) error {
+	return x.ClientStream.SendMsg(m)
+}
+
+func (x *greeterSayHelloStreamClient) Recv() (*User, error) {
+	m := new(User)
+	if err := x.ClientStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+// GreeterServer is the server API for Greeter service.
+type GreeterServer interface {
+	// Sends a greeting
+	SayHello(context.Context, *HelloRequest) (*User, error)
+	SayHelloStream(Greeter_SayHelloStreamServer) error
+}
+
+// UnimplementedGreeterServer can be embedded to have forward compatible implementations.
+type UnimplementedGreeterServer struct {
+}
+
+func (*UnimplementedGreeterServer) SayHello(context.Context, *HelloRequest) (*User, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SayHello not implemented")
+}
+func (*UnimplementedGreeterServer) SayHelloStream(Greeter_SayHelloStreamServer) error {
+	return status.Errorf(codes.Unimplemented, "method SayHelloStream 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)
+}
+
+func _Greeter_SayHelloStream_Handler(srv interface{}, stream grpc.ServerStream) error {
+	return srv.(GreeterServer).SayHelloStream(&greeterSayHelloStreamServer{stream})
+}
+
+type Greeter_SayHelloStreamServer interface {
+	Send(*User) error
+	Recv() (*HelloRequest, error)
+	grpc.ServerStream
+}
+
+type greeterSayHelloStreamServer struct {
+	grpc.ServerStream
+}
+
+func (x *greeterSayHelloStreamServer) Send(m *User) error {
+	return x.ServerStream.SendMsg(m)
+}
+
+func (x *greeterSayHelloStreamServer) Recv() (*HelloRequest, error) {
+	m := new(HelloRequest)
+	if err := x.ServerStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+var _Greeter_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "protobuf.Greeter",
+	HandlerType: (*GreeterServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "SayHello",
+			Handler:    _Greeter_SayHello_Handler,
+		},
+	},
+	Streams: []grpc.StreamDesc{
+		{
+			StreamName:    "SayHelloStream",
+			Handler:       _Greeter_SayHelloStream_Handler,
+			ServerStreams: true,
+			ClientStreams: true,
+		},
+	},
+	Metadata: "helloworld.proto",
+}
diff --git a/registry/servicediscovery/zookeeper/go-client/pkg/user.go b/general/dubbo3/pb/dubbogo-grpc/protobuf/grpc/helloworld.proto
similarity index 62%
copy from registry/servicediscovery/zookeeper/go-client/pkg/user.go
copy to general/dubbo3/pb/dubbogo-grpc/protobuf/grpc/helloworld.proto
index 7733ea4..c29f4c5 100644
--- a/registry/servicediscovery/zookeeper/go-client/pkg/user.go
+++ b/general/dubbo3/pb/dubbogo-grpc/protobuf/grpc/helloworld.proto
@@ -14,29 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+syntax = "proto3";
 
-package pkg
+option go_package = "protobuf/dubbo3";
+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) {}
+  rpc SayHelloStream (stream HelloRequest) returns (stream 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/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/env.sh b/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/env.sh
new file mode 100644
index 0000000..d4a72c2
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/env.sh
@@ -0,0 +1,2 @@
+export CONF_PROVIDER_FILE_PATH="../conf/server.yml"
+export APP_LOG_CONF_FILE="../conf/log.yml"
\ No newline at end of file
diff --git a/general/grpc/go-server/cmd/server.go b/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/server.go
similarity index 71%
copy from general/grpc/go-server/cmd/server.go
copy to general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/server.go
index b4d9875..2fab8c8 100644
--- a/general/grpc/go-server/cmd/server.go
+++ b/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/cmd/server.go
@@ -19,7 +19,6 @@ package main
 
 import (
 	"fmt"
-	"github.com/apache/dubbo-go-samples/general/grpc/go-server/pkg"
 	"os"
 	"os/signal"
 	"syscall"
@@ -27,15 +26,21 @@ import (
 )
 
 import (
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/grpc"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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"
+)
+
+import (
+	"github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/pkg"
 )
 
 var (
@@ -60,6 +65,7 @@ func initSignal() {
 		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)
diff --git a/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/client.yml b/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/client.yml
new file mode 100644
index 0000000..62ac541
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/client.yml
@@ -0,0 +1,22 @@
+# dubbo-go3 client yaml configure file
+# application config (not necessary)
+application:
+  organization: "dubbo.io"
+  name: "greeterImpl"
+  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"
+
+# reference config
+references:
+  "GreeterProvider":
+    registry: "demoZk"
+    protocol: "tri"
+    interface: "protobuf.Greeter"
\ No newline at end of file
diff --git a/router/condition/go-client/conf/log.yml b/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/log.yml
similarity index 96%
copy from router/condition/go-client/conf/log.yml
copy to general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/log.yml
index 2b6e93a..8c3f700 100644
--- a/router/condition/go-client/conf/log.yml
+++ b/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/log.yml
@@ -1,4 +1,4 @@
-level: "debug"
+level: "info"
 development: true
 disableCaller: false
 disableStacktrace: false
diff --git a/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/server.yml b/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/server.yml
new file mode 100644
index 0000000..aa17206
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/conf/server.yml
@@ -0,0 +1,28 @@
+# dubbo-go3 server yaml configure file
+# application config (not necessary)
+application:
+  organization: "dubbo.io"
+  name: "GreeterProvider"
+  module: "dubbo-go3.0 server"
+  version: "0.0.1"
+  environment: "dev"
+
+# registry config
+registries:
+  "demoZK":
+    protocol: "zookeeper"
+    timeout: "3s"
+    address: "127.0.0.1:2181"
+
+# service config
+services:
+  "greeterImpl":
+    registry: "demoZK"
+    protocol: "tri"
+    interface: "protobuf.Greeter" # must be compatible with grpc or dubbo-java
+
+# protocol config
+protocols:
+  "tri":
+    name: "tri"
+    port: 20001
\ No newline at end of file
diff --git a/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/pkg/greeter.go b/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/pkg/greeter.go
new file mode 100644
index 0000000..4f6e05b
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-grpc/server/dubbogo-server/pkg/greeter.go
@@ -0,0 +1,83 @@
+/*
+ * 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"
+	"fmt"
+	tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
+)
+
+import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
+)
+
+import (
+	dubbo3 "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3"
+)
+
+type GreeterProvider struct {
+	*dubbo3.GreeterProviderBase
+}
+
+func NewGreeterProvider() *GreeterProvider {
+	return &GreeterProvider{
+		GreeterProviderBase: &dubbo3.GreeterProviderBase{},
+	}
+}
+
+func (s *GreeterProvider) SayHelloStream(svr dubbo3.Greeter_SayHelloStreamServer) error {
+	c, err := svr.Recv()
+	if err != nil {
+		return err
+	}
+	logger.Infof("Dubbo-go3 GreeterProvider recv 1 user, name = %s\n", c.Name)
+	c2, err := svr.Recv()
+	if err != nil {
+		return err
+	}
+	logger.Infof("Dubbo-go3 GreeterProvider recv 2 user, name = %s\n", c2.Name)
+	c3, err := svr.Recv()
+	if err != nil {
+		return err
+	}
+	logger.Infof("Dubbo-go3 GreeterProvider recv 3 user, name = %s\n", c3.Name)
+
+	svr.Send(&dubbo3.User{
+		Name: "hello " + c.Name,
+		Age:  18,
+		Id:   "123456789",
+	})
+	svr.Send(&dubbo3.User{
+		Name: "hello " + c2.Name,
+		Age:  19,
+		Id:   "123456789",
+	})
+	return nil
+}
+
+func (s *GreeterProvider) SayHello(ctx context.Context, in *dubbo3.HelloRequest) (*dubbo3.User, error) {
+	logger.Infof("Dubbo3 GreeterProvider get user name = %s\n" + in.Name)
+	fmt.Println("get triple header tri-req-id = ", ctx.Value(tripleConstant.TripleCtxKey(tripleConstant.TripleRequestID)))
+	fmt.Println("get triple header tri-service-version = ", ctx.Value(tripleConstant.TripleCtxKey(tripleConstant.TripleServiceVersion)))
+	return &dubbo3.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
+}
+
+func (g *GreeterProvider) Reference() string {
+	return "greeterImpl"
+}
diff --git a/general/dubbo3/pb/dubbogo-grpc/server/grpcgo-server/main.go b/general/dubbo3/pb/dubbogo-grpc/server/grpcgo-server/main.go
new file mode 100644
index 0000000..89f0858
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-grpc/server/grpcgo-server/main.go
@@ -0,0 +1,90 @@
+/*
+ * 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"
+	"log"
+	"net"
+)
+
+import (
+	"golang.org/x/net/context"
+	"google.golang.org/grpc"
+	"google.golang.org/grpc/reflection"
+)
+
+import (
+	pb "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/protobuf/grpc"
+)
+
+const (
+	port = ":20001"
+)
+
+// GreeterProvider is used as provider
+type GreeterProvider struct{}
+
+func (s *GreeterProvider) SayHelloStream(svr pb.Greeter_SayHelloStreamServer) error {
+	c, err := svr.Recv()
+	if err != nil {
+		return err
+	}
+	fmt.Printf("grpc GreeterProvider recv 1 user, name = %s\n", c.Name)
+	c2, err := svr.Recv()
+	if err != nil {
+		return err
+	}
+	fmt.Printf("grpc GreeterProvider recv 2 user, name = %s\n", c2.Name)
+	c3, err := svr.Recv()
+	if err != nil {
+		return err
+	}
+	fmt.Printf("grpc GreeterProvider recv 3 user, name = %s\n", c3.Name)
+
+	svr.Send(&pb.User{
+		Name: "hello " + c.Name,
+		Age:  18,
+		Id:   "123456789",
+	})
+	svr.Send(&pb.User{
+		Name: "hello " + c2.Name,
+		Age:  19,
+		Id:   "123456789",
+	})
+	return nil
+}
+
+func (s *GreeterProvider) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.User, error) {
+	fmt.Printf("Dubbo3 GreeterProvider get user name = %s\n" + in.Name)
+	return &pb.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
+}
+
+func main() {
+	lis, err := net.Listen("tcp", port)
+	if err != nil {
+		log.Fatalf("failed to listen: %v", err)
+	}
+	s := grpc.NewServer()
+	pb.RegisterGreeterServer(s, &GreeterProvider{})
+	// Register reflection service on gRPC client.
+	reflection.Register(s)
+	if err := s.Serve(lis); err != nil {
+		log.Fatalf("failed to serve: %v", err)
+	}
+}
diff --git a/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/cmd/client.go b/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/cmd/client.go
new file mode 100644
index 0000000..9ea8b4d
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/cmd/client.go
@@ -0,0 +1,88 @@
+/*
+ * 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/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/protocol/grpc"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+)
+
+import (
+	dubbo3pb "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3"
+)
+
+var greeterProvider = new(dubbo3pb.GreeterClientImpl)
+
+func init() {
+	config.SetConsumerService(greeterProvider)
+}
+
+// need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
+func main() {
+	config.Load()
+	time.Sleep(time.Second * 3)
+
+	testSayHello()
+}
+
+func testSayHello() {
+	ctx := context.Background()
+	ctx = context.WithValue(ctx, "tri-req-id", "triple-request-id-demo")
+
+	req := dubbo3pb.HelloRequest{
+		Name: "laurence",
+	}
+
+	r, err := greeterProvider.SayHelloStream(ctx)
+	if err != nil {
+		panic(err)
+	}
+
+	for i := 0; i < 3; i++ {
+		if err := r.Send(&req); err != nil {
+			logger.Errorf("Send SayHelloStream num %d request error = %v\n", i+1, err)
+			return
+		}
+	}
+
+	rspUser := &dubbo3pb.User{}
+	if err := r.RecvMsg(rspUser); err != nil {
+		logger.Errorf("Receive 1 SayHelloStream response user error = %v\n", err)
+		return
+	}
+	logger.Infof("Receive 1 user = %+v\n", rspUser)
+	rspUser2 := &dubbo3pb.User{}
+	if err := r.RecvMsg(rspUser2); err != nil {
+		logger.Errorf("Receive 2 SayHelloStream response user error = %v\n", err)
+		return
+	}
+	logger.Infof("Receive 2 user = %+v\n", rspUser2)
+}
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
new file mode 100644
index 0000000..4ac7e80
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/cmd/env.sh
@@ -0,0 +1,2 @@
+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-grpc/stream-client/dubbogo-client/conf/client.yml b/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/conf/client.yml
new file mode 100644
index 0000000..1369f75
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/conf/client.yml
@@ -0,0 +1,23 @@
+# dubbo-go3 client yaml configure file
+# application config (not necessary)
+application:
+  organization: "dubbo.io"
+  name: "greeterImpl"
+  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"
+
+# reference config
+references:
+  "greeterImpl":
+    registry: "demoZk"
+    protocol: "tri"
+    interface: "protobuf.Greeter"
+    url: tri://localhost:20001
\ No newline at end of file
diff --git a/router/condition/go-client/conf/log.yml b/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/conf/log.yml
similarity index 96%
copy from router/condition/go-client/conf/log.yml
copy to general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/conf/log.yml
index 2b6e93a..8c3f700 100644
--- a/router/condition/go-client/conf/log.yml
+++ b/general/dubbo3/pb/dubbogo-grpc/stream-client/dubbogo-client/conf/log.yml
@@ -1,4 +1,4 @@
-level: "debug"
+level: "info"
 development: true
 disableCaller: false
 disableStacktrace: false
diff --git a/general/grpc/stream/go-client/app/hello.go b/general/dubbo3/pb/dubbogo-grpc/stream-client/grpcgo-client/main.go
similarity index 51%
copy from general/grpc/stream/go-client/app/hello.go
copy to general/dubbo3/pb/dubbogo-grpc/stream-client/grpcgo-client/main.go
index 1066565..7e3bb86 100644
--- a/general/grpc/stream/go-client/app/hello.go
+++ b/general/dubbo3/pb/dubbogo-grpc/stream-client/grpcgo-client/main.go
@@ -18,33 +18,50 @@
 package main
 
 import (
-	"context"
+	"fmt"
+	"log"
 )
-
 import (
+	"golang.org/x/net/context"
 	"google.golang.org/grpc"
 )
 
 import (
-	"github.com/apache/dubbo-go/config"
+	pb "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/protobuf/grpc"
 )
 
-var grpcGreeterImpl = new(GrpcGreeterImpl)
-
-func init() {
-	config.SetConsumerService(grpcGreeterImpl)
-}
+const (
+	address = "localhost:20001"
+)
 
-type GrpcGreeterImpl struct {
-	SayHelloTwoSidesStream func(ctx context.Context) (Greeter_SayHelloTwoSidesStreamClient, error)
-	SayHelloClientStream   func(ctx context.Context) (Greeter_SayHelloClientStreamClient, error)
-	SayHelloServerStream   func(ctx context.Context, request *HelloRequest) (Greeter_SayHelloServerStreamClient, error)
-}
+func main() {
+	// Set up a connection to the server
+	conn, err := grpc.Dial(address, grpc.WithInsecure())
+	if err != nil {
+		log.Fatalf("did not connect: %v", err)
+	}
+	defer conn.Close()
+	c := pb.NewGreeterClient(conn)
 
-func (u *GrpcGreeterImpl) Reference() string {
-	return "GrpcGreeterImpl"
-}
+	BigDataReq := &pb.HelloRequest{
+		Name: "Laurence",
+	}
+	clientStream, err := c.SayHelloStream(context.Background())
+	if err != nil {
+		panic(err)
+	}
+	for i := 0; i < 3; i++ {
+		clientStream.Send(BigDataReq)
+	}
+	user1, err := clientStream.Recv()
+	if err != nil {
+		panic(err)
+	}
+	fmt.Printf("get 1 received user = %+v\n", user1)
 
-func (u *GrpcGreeterImpl) GetDubboStub(cc *grpc.ClientConn) GreeterClient {
-	return NewGreeterClient(cc)
+	user2, err := clientStream.Recv()
+	if err != nil {
+		panic(err)
+	}
+	fmt.Printf("get 2 received user = %+v\n", user2)
 }
diff --git a/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/cmd/client.go b/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/cmd/client.go
new file mode 100644
index 0000000..31ac63c
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/cmd/client.go
@@ -0,0 +1,74 @@
+/*
+ * 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 (
+	tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
+)
+
+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/protocol/grpc"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
+	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
+)
+
+import (
+	dubbo3pb "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/protobuf/dubbo3"
+)
+
+var greeterProvider = new(dubbo3pb.GreeterClientImpl)
+
+func init() {
+	config.SetConsumerService(greeterProvider)
+}
+
+// need to setup environment variable "CONF_CONSUMER_FILE_PATH" to "conf/client.yml" before run
+func main() {
+	config.Load()
+	time.Sleep(time.Second * 3)
+
+	testSayHello()
+}
+
+func testSayHello() {
+	ctx := context.Background()
+	ctx = context.WithValue(ctx, tripleConstant.TripleCtxKey(tripleConstant.TripleRequestID), "triple-request-id-demo")
+
+	req := dubbo3pb.HelloRequest{
+		Name: "laurence",
+	}
+	user := dubbo3pb.User{}
+	err := greeterProvider.SayHello(ctx, &req, &user)
+	if err != nil {
+		panic(err)
+	}
+
+	logger.Infof("Receive user = %+v\n", user)
+}
diff --git a/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/cmd/env.sh b/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/cmd/env.sh
new file mode 100644
index 0000000..4ac7e80
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/cmd/env.sh
@@ -0,0 +1,2 @@
+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-grpc/unary-client/dubbogo-client/conf/client.yml b/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/conf/client.yml
new file mode 100644
index 0000000..d814a11
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/conf/client.yml
@@ -0,0 +1,23 @@
+# dubbo client yaml configure file
+# application config (not necessary)
+application:
+  organization: "dubbo.io"
+  name: "GreeterProvider"
+  module: "dubbo-go greeter  client"
+  version: "0.0.1"
+  environment: "dev"
+
+# registry config
+registries:
+  "demoZk":
+    protocol: "zookeeper"
+    timeout: "3s"
+    address: "127.0.0.1:2181"
+
+# reference config
+references:
+  "greeterImpl":
+    registry: "demoZk"
+    protocol: "tri"
+    interface: "protobuf.Greeter"
+    url: tri://localhost:20001
\ No newline at end of file
diff --git a/router/condition/go-client/conf/log.yml b/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/conf/log.yml
similarity index 96%
copy from router/condition/go-client/conf/log.yml
copy to general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/conf/log.yml
index 2b6e93a..8c3f700 100644
--- a/router/condition/go-client/conf/log.yml
+++ b/general/dubbo3/pb/dubbogo-grpc/unary-client/dubbogo-client/conf/log.yml
@@ -1,4 +1,4 @@
-level: "debug"
+level: "info"
 development: true
 disableCaller: false
 disableStacktrace: false
diff --git a/general/grpc/unary/go-client/app/hello.go b/general/dubbo3/pb/dubbogo-grpc/unary-client/grpcgo-client/main.go
similarity index 60%
copy from general/grpc/unary/go-client/app/hello.go
copy to general/dubbo3/pb/dubbogo-grpc/unary-client/grpcgo-client/main.go
index 95b78c5..e71d351 100644
--- a/general/grpc/unary/go-client/app/hello.go
+++ b/general/dubbo3/pb/dubbogo-grpc/unary-client/grpcgo-client/main.go
@@ -17,27 +17,40 @@
 
 package main
 
-
 import (
-	"context"
+	"fmt"
+	"log"
 )
 
 import (
+	"golang.org/x/net/context"
 	"google.golang.org/grpc"
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/general/grpc/protobuf"
+	pb "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-grpc/protobuf/grpc"
 )
 
-type GrpcGreeterImpl struct {
-	SayHello func(ctx context.Context, in *protobuf.HelloRequest, out *protobuf.HelloReply) error
-}
-
-func (u *GrpcGreeterImpl) Reference() string {
-	return "GrpcGreeterImpl"
-}
+const (
+	address = "localhost:20001"
+)
 
-func (u *GrpcGreeterImpl) GetDubboStub(cc *grpc.ClientConn) protobuf.GreeterClient {
-	return protobuf.NewGreeterClient(cc)
+func main() {
+	// Set up a connection to the client.
+	conn, err := grpc.Dial(address, grpc.WithInsecure())
+	if err != nil {
+		log.Fatalf("did not connect: %v", err)
+	}
+	defer conn.Close()
+	c := pb.NewGreeterClient(conn)
+
+	req := &pb.HelloRequest{
+		Name: "laurence",
+	}
+	ctx := context.Background()
+	rsp, err := c.SayHello(ctx, req)
+	if err != nil {
+		panic(err)
+	}
+	fmt.Printf("get received user = %+v\n", rsp)
 }
diff --git a/general/dubbo3/pb/dubbogo-java/README.md b/general/dubbo3/pb/dubbogo-java/README.md
new file mode 100644
index 0000000..74ec5d1
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-java/README.md
@@ -0,0 +1,22 @@
+# dubbo-java intercommunication
+
+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/general/dubbo3/pb/dubbogo-java/README_zh.md b/general/dubbo3/pb/dubbogo-java/README_zh.md
new file mode 100644
index 0000000..d84970d
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-java/README_zh.md
@@ -0,0 +1,21 @@
+# dubbo-java互通
+
+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/general/grpc/go-client/cmd/client.go b/general/dubbo3/pb/dubbogo-java/go-client/cmd/client.go
similarity index 55%
copy from general/grpc/go-client/cmd/client.go
copy to general/dubbo3/pb/dubbogo-java/go-client/cmd/client.go
index a22f23a..c9ce71e 100644
--- a/general/grpc/go-client/cmd/client.go
+++ b/general/dubbo3/pb/dubbogo-java/go-client/cmd/client.go
@@ -19,25 +19,30 @@ package main
 
 import (
 	"context"
-	"github.com/apache/dubbo-go-samples/general/grpc/go-client/pkg"
-	"github.com/apache/dubbo-go-samples/general/grpc/protobuf"
-	"github.com/dubbogo/gost/log"
+	"fmt"
+
 	"time"
 )
 
 import (
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/dubbo"
-	_ "github.com/apache/dubbo-go/protocol/grpc"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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"
+)
+
+import (
+	"github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-java/go-client/pkg"
+	pb "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-java/protobuf"
 )
 
-var grpcGreeterImpl = new(pkg.GrpcGreeterImpl)
+var grpcGreeterImpl = new(pkg.GreeterProvider)
 
 func init() {
 	config.SetConsumerService(grpcGreeterImpl)
@@ -49,13 +54,16 @@ func main() {
 	time.Sleep(3 * time.Second)
 
 	gxlog.CInfo("\n\n\nstart to test dubbo")
-	reply := &protobuf.HelloReply{}
-	req := &protobuf.HelloRequest{
-		Name: "xujianhai",
+	req := &pb.HelloRequest{
+		Name: "laurence",
 	}
-	err := grpcGreeterImpl.SayHello(context.TODO(), req, reply)
+
+	ctx := context.Background()
+	ctx = context.WithValue(ctx, "tri-req-id", "test_value_XXXXXXXX")
+
+	reply, err := grpcGreeterImpl.SayHello(ctx, req)
 	if err != nil {
 		panic(err)
 	}
-	gxlog.CInfo("client response result: %v\n", reply)
+	fmt.Printf("client response result: %v\n", reply)
 }
diff --git a/general/dubbo3/pb/dubbogo-java/go-client/cmd/env.sh b/general/dubbo3/pb/dubbogo-java/go-client/cmd/env.sh
new file mode 100644
index 0000000..4ac7e80
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-java/go-client/cmd/env.sh
@@ -0,0 +1,2 @@
+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/go-client/conf/client.yml b/general/dubbo3/pb/dubbogo-java/go-client/conf/client.yml
new file mode 100644
index 0000000..cd98b32
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-java/go-client/conf/client.yml
@@ -0,0 +1,31 @@
+# dubbo client yaml configure file
+
+check: true
+# client
+request_timeout: "3s"
+# connect timeout
+connect_timeout: "3s"
+
+# application config
+application:
+  organization: "dubbo.io"
+  name: "GreeterGrpcConsumer"
+  module: "dubbo-go greeter grpc 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:
+  "GreeterProvider":
+    registry: "demoZk"
+    protocol: "tri"
+    interface: "com.apache.dubbo.sample.basic.IGreeter"
\ No newline at end of file
diff --git a/router/condition/go-client/conf/log.yml b/general/dubbo3/pb/dubbogo-java/go-client/conf/log.yml
similarity index 96%
copy from router/condition/go-client/conf/log.yml
copy to general/dubbo3/pb/dubbogo-java/go-client/conf/log.yml
index 2b6e93a..8c3f700 100644
--- a/router/condition/go-client/conf/log.yml
+++ b/general/dubbo3/pb/dubbogo-java/go-client/conf/log.yml
@@ -1,4 +1,4 @@
-level: "debug"
+level: "info"
 development: true
 disableCaller: false
 disableStacktrace: false
diff --git a/general/grpc/unary/go-client/app/hello.go b/general/dubbo3/pb/dubbogo-java/go-client/pkg/hello.go
similarity index 64%
copy from general/grpc/unary/go-client/app/hello.go
copy to general/dubbo3/pb/dubbogo-java/go-client/pkg/hello.go
index 95b78c5..eade071 100644
--- a/general/grpc/unary/go-client/app/hello.go
+++ b/general/dubbo3/pb/dubbogo-java/go-client/pkg/hello.go
@@ -15,29 +15,28 @@
  * limitations under the License.
  */
 
-package main
-
+package pkg
 
 import (
 	"context"
 )
 
 import (
-	"google.golang.org/grpc"
+	"github.com/dubbogo/triple/pkg/triple"
 )
 
 import (
-	"github.com/apache/dubbo-go-samples/general/grpc/protobuf"
+	dubbo3pb "github.com/apache/dubbo-go-samples/general/dubbo3/pb/dubbogo-java/protobuf"
 )
 
-type GrpcGreeterImpl struct {
-	SayHello func(ctx context.Context, in *protobuf.HelloRequest, out *protobuf.HelloReply) error
+type GreeterProvider struct {
+	SayHello func(ctx context.Context, request *dubbo3pb.HelloRequest) (*dubbo3pb.User, error)
 }
 
-func (u *GrpcGreeterImpl) Reference() string {
-	return "GrpcGreeterImpl"
+func (u *GreeterProvider) Reference() string {
+	return "GreeterProvider"
 }
 
-func (u *GrpcGreeterImpl) GetDubboStub(cc *grpc.ClientConn) protobuf.GreeterClient {
-	return protobuf.NewGreeterClient(cc)
+func (u *GreeterProvider) GetDubboStub(cc *triple.TripleConn) dubbo3pb.GreeterClient {
+	return dubbo3pb.NewGreeterDubbo3Client(cc)
 }
diff --git a/general/dubbo3/pb/dubbogo-java/go-server/cmd/env.sh b/general/dubbo3/pb/dubbogo-java/go-server/cmd/env.sh
new file mode 100644
index 0000000..d4a72c2
--- /dev/null
+++ b/general/dubbo3/pb/dubbogo-java/go-server/cmd/env.sh
@@ -0,0 +1,2 @@
+export CONF_PROVIDER_FILE_PATH="../conf/server.yml"
+export APP_LOG_CONF_FILE="../conf/log.yml"
\ No newline at end of file
diff --git a/general/grpc/go-server/cmd/server.go b/general/dubbo3/pb/dubbogo-java/go-server/cmd/server.go
similarity index 71%
copy from general/grpc/go-server/cmd/server.go
copy to general/dubbo3/pb/dubbogo-java/go-server/cmd/server.go
index b4d9875..3dcfba0 100644
--- a/general/grpc/go-server/cmd/server.go
+++ b/general/dubbo3/pb/dubbogo-java/go-server/cmd/server.go
@@ -19,7 +19,6 @@ package main
 
 import (
 	"fmt"
-	"github.com/apache/dubbo-go-samples/general/grpc/go-server/pkg"
 	"os"
 	"os/signal"
 	"syscall"
@@ -27,15 +26,21 @@ import (
 )
 
 import (
-	_ "github.com/apache/dubbo-go/cluster/cluster_impl"
-	_ "github.com/apache/dubbo-go/cluster/loadbalance"
-	"github.com/apache/dubbo-go/common/logger"
-	_ "github.com/apache/dubbo-go/common/proxy/proxy_factory"
-	"github.com/apache/dubbo-go/config"
-	_ "github.com/apache/dubbo-go/filter/filter_impl"
-	_ "github.com/apache/dubbo-go/protocol/grpc"
-	_ "github.com/apache/dubbo-go/registry/protocol"
-	_ "github.com/apache/dubbo-go/registry/zookeeper"
+	_ "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"
+)
... 14772 lines suppressed ...