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/06/15 02:30:00 UTC

[dubbo-go-samples] branch 3.0 updated: Tst: add router to integration and fix hessian2 sample (#124)

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 f7fa507  Tst: add router to integration and fix hessian2 sample (#124)
f7fa507 is described below

commit f7fa507a0aafc4962bef5c3ba5b9e2235a276731
Author: EnableAsync <43...@users.noreply.github.com>
AuthorDate: Tue Jun 15 10:29:52 2021 +0800

    Tst: add router to integration and fix hessian2 sample (#124)
    
    * Fix: fix general/dubbo3/hessian2/go-server and registry/nacos config
    
    Fix: fix general-dubbo3-hessian2-go goland config
    
    Fix: fix registry-nacos-go
    
    * Tst: add router/uniform-router/file/go-server2
    
    * Tst: add group and context
    
    Co-authored-by: rai <rai>
---
 .run/{ => general}/general-dubbo-go-client.run.xml |  0
 .run/{ => general}/general-dubbo-go-server.run.xml |  0
 .../general-dubbo3-hessian2-go-client.run.xml      | 28 ++++++++++++++++++++++
 .../general-dubbo3-hessian2-go-server.run.xml}     | 10 ++++----
 .run/{ => general}/general-rest-go-client.run.xml  |  0
 .run/{ => general}/general-rest-go-server.run.xml  |  0
 .run/group-go-client.run.xml                       |  2 +-
 .run/group-go-server-group-a.run.xml               |  2 +-
 .run/group-go-server-group-b.run.xml               |  2 +-
 .../registry-nacos-go-client.run.xml}              |  8 +++----
 .run/registry/registry-nacos-go-server.run.xml     | 15 ++++++++++++
 build/Makefile                                     |  6 +++++
 docker/README_zh.md                                |  2 +-
 general/dubbo3/hessian2/go-client/conf/client.yml  |  2 +-
 general/dubbo3/hessian2/go-client/pkg/hello.go     |  2 +-
 general/dubbo3/hessian2/go-server/conf/server.yml  |  2 +-
 general/dubbo3/hessian2/go-server/pkg/greeter.go   |  2 +-
 group/README.md                                    |  5 +++-
 group/README_zh.md                                 |  5 +++-
 group/go-server-group-a/conf/client.yml            |  5 ++--
 .../tests/integration/main_test.go                 | 12 +++++-----
 .../tests/integration/userprovider_test.go         |  4 ++--
 group/go-server-group-b/conf/client.yml            |  5 ++--
 .../tests/integration/main_test.go                 | 12 +++++-----
 .../tests/integration/userprovider_test.go         |  5 ++--
 integrate_test.sh                                  |  2 +-
 .../file/go-server/conf/dest_rule.yml              | 11 +++++++++
 .../file/go-server/conf/virtual_service.yml        | 22 +++++++++++++++++
 .../file/go-server/tests/integration/main_test.go  |  3 +++
 .../tests/integration/userprovider_test.go         |  6 ++++-
 .../file/go-server2/conf/dest_rule.yml             | 11 +++++++++
 .../file/go-server2/conf/virtual_service.yml       | 22 +++++++++++++++++
 .../file/go-server2/tests/integration/main_test.go |  3 +++
 start_integrate_test.sh                            | 19 ++++++++++++++-
 34 files changed, 192 insertions(+), 43 deletions(-)

diff --git a/.run/general-dubbo-go-client.run.xml b/.run/general/general-dubbo-go-client.run.xml
similarity index 100%
copy from .run/general-dubbo-go-client.run.xml
copy to .run/general/general-dubbo-go-client.run.xml
diff --git a/.run/general-dubbo-go-server.run.xml b/.run/general/general-dubbo-go-server.run.xml
similarity index 100%
copy from .run/general-dubbo-go-server.run.xml
copy to .run/general/general-dubbo-go-server.run.xml
diff --git a/.run/general/general-dubbo3-hessian2-go-client.run.xml b/.run/general/general-dubbo3-hessian2-go-client.run.xml
new file mode 100644
index 0000000..72e0626
--- /dev/null
+++ b/.run/general/general-dubbo3-hessian2-go-client.run.xml
@@ -0,0 +1,28 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="general-dubbo3-hessian2-go-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="general">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <envs>
+      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/hessian2/go-client/conf/client.yml" />
+      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/general/dubbo3/hessian2/go-client/conf/log.yml" />
+    </envs>
+    <kind value="PACKAGE" />
+    <filePath value="$PROJECT_DIR$/|$PROJECT_DIR$/general/dubbo3/hessian2/go-server/cmd" />
+    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/hessian2/go-server/cmd" />
+    <directory value="$PROJECT_DIR$/" />
+    <method v="2" />
+  </configuration>
+  <configuration default="false" name="general-dubbo3-hessian2-go-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="general">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <envs>
+      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo3/hessian2/go-client/conf/client.yml" />
+      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/general/dubbo3/hessian2/go-client/conf/log.yml" />
+    </envs>
+    <kind value="PACKAGE" />
+    <filePath value="$PROJECT_DIR$/|$PROJECT_DIR$/general/dubbo3/hessian2/go-client/cmd" />
+    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/hessian2/go-client/cmd" />
+    <directory value="$PROJECT_DIR$/" />
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/.run/general-dubbo-go-server.run.xml b/.run/general/general-dubbo3-hessian2-go-server.run.xml
similarity index 54%
rename from .run/general-dubbo-go-server.run.xml
rename to .run/general/general-dubbo3-hessian2-go-server.run.xml
index d464b91..e3a48d3 100644
--- a/.run/general-dubbo-go-server.run.xml
+++ b/.run/general/general-dubbo3-hessian2-go-server.run.xml
@@ -1,14 +1,14 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="general-dubbo-go-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="general">
+  <configuration default="false" name="general-dubbo3-hessian2-go-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="general">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/dubbo/go-server/conf/log.yml" />
-      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo/go-server/conf/server.yml" />
+      <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$/general/grpc/unary/go-server/app/server.go" />
-    <package value="github.com/apache/dubbo-go-samples/general/dubbo/go-server/cmd" />
+    <filePath value="$PROJECT_DIR$/general/dubbo3/hessian2/go-server/cmd/server.go" />
+    <package value="github.com/apache/dubbo-go-samples/general/dubbo3/hessian2/go-server/cmd" />
     <directory value="$PROJECT_DIR$" />
     <method v="2" />
   </configuration>
diff --git a/.run/general-rest-go-client.run.xml b/.run/general/general-rest-go-client.run.xml
similarity index 100%
rename from .run/general-rest-go-client.run.xml
rename to .run/general/general-rest-go-client.run.xml
diff --git a/.run/general-rest-go-server.run.xml b/.run/general/general-rest-go-server.run.xml
similarity index 100%
rename from .run/general-rest-go-server.run.xml
rename to .run/general/general-rest-go-server.run.xml
diff --git a/.run/group-go-client.run.xml b/.run/group-go-client.run.xml
index 917b7dd..5fdbcb5 100644
--- a/.run/group-go-client.run.xml
+++ b/.run/group-go-client.run.xml
@@ -1,5 +1,5 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="group-go-client" type="GoApplicationRunConfiguration" factoryName="Go Application">
+  <configuration default="false" name="group-go-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="group">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
diff --git a/.run/group-go-server-group-a.run.xml b/.run/group-go-server-group-a.run.xml
index 6bfb6ea..a26044b 100644
--- a/.run/group-go-server-group-a.run.xml
+++ b/.run/group-go-server-group-a.run.xml
@@ -1,5 +1,5 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="group-go-server-group-a" type="GoApplicationRunConfiguration" factoryName="Go Application">
+  <configuration default="false" name="group-go-server-group-a" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="group">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
diff --git a/.run/group-go-server-group-b.run.xml b/.run/group-go-server-group-b.run.xml
index 4bf2722..6d41199 100644
--- a/.run/group-go-server-group-b.run.xml
+++ b/.run/group-go-server-group-b.run.xml
@@ -1,5 +1,5 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="group-go-server-group-b" type="GoApplicationRunConfiguration" factoryName="Go Application">
+  <configuration default="false" name="group-go-server-group-b" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="group">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
diff --git a/.run/general-dubbo-go-client.run.xml b/.run/registry/registry-nacos-go-client.run.xml
similarity index 50%
rename from .run/general-dubbo-go-client.run.xml
rename to .run/registry/registry-nacos-go-client.run.xml
index e04219c..a3f4886 100644
--- a/.run/general-dubbo-go-client.run.xml
+++ b/.run/registry/registry-nacos-go-client.run.xml
@@ -1,14 +1,14 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="general-dubbo-go-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="general">
+  <configuration default="false" name="registry-nacos-go-client" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="registry">
     <module name="dubbo-go-samples" />
     <working_directory value="$PROJECT_DIR$" />
     <envs>
-      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/general/dubbo/go-client/conf/client.yml" />
-      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/general/dubbo/go-client/conf/log.yml" />
+      <env name="CONF_CONSUMER_FILE_PATH" value="$PROJECT_DIR$/registry/nacos/go-client/conf/client.yml" />
+      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/general/registry/nacos/go-client/conf/log.yml" />
     </envs>
     <kind value="PACKAGE" />
     <filePath value="$PROJECT_DIR$/general/grpc/unary/go-client/app/client.go" />
-    <package value="github.com/apache/dubbo-go-samples/general/dubbo/go-client/cmd" />
+    <package value="github.com/apache/dubbo-go-samples/registry/nacos/go-client/cmd" />
     <directory value="$PROJECT_DIR$" />
     <method v="2" />
   </configuration>
diff --git a/.run/registry/registry-nacos-go-server.run.xml b/.run/registry/registry-nacos-go-server.run.xml
new file mode 100644
index 0000000..80a04bf
--- /dev/null
+++ b/.run/registry/registry-nacos-go-server.run.xml
@@ -0,0 +1,15 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="registry-nacos-go-server" type="GoApplicationRunConfiguration" factoryName="Go Application" folderName="registry">
+    <module name="dubbo-go-samples" />
+    <working_directory value="$PROJECT_DIR$" />
+    <envs>
+      <env name="APP_LOG_CONF_FILE" value="$PROJECT_DIR$/registry/nacos/go-server/conf/log.yml" />
+      <env name="CONF_PROVIDER_FILE_PATH" value="$PROJECT_DIR$/registry/nacos/go-server/conf/server.yml" />
+    </envs>
+    <kind value="PACKAGE" />
+    <filePath value="$PROJECT_DIR$/general/registry/nacos/go-server/cmd/server.go" />
+    <package value="github.com/apache/dubbo-go-samples/registry/nacos/go-server/cmd" />
+    <directory value="$PROJECT_DIR$" />
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/build/Makefile b/build/Makefile
index 0d76a56..124ab7c 100644
--- a/build/Makefile
+++ b/build/Makefile
@@ -86,6 +86,8 @@ config:
 	@-test -f $(PROJECT_DIR)/conf/server.yml && cat $(PROJECT_DIR)/conf/server.yml | sed "s#\$$HOST_IP#$(DOCKER_HOST_IP)#g" > $(OUT_DIR)/conf/server.yml && echo "  > $(OUT_DIR)/conf/server.yml"
 	@-test -f $(PROJECT_DIR)/conf/client.yml && cat $(PROJECT_DIR)/conf/client.yml | sed "s#\$$HOST_IP#$(DOCKER_HOST_IP)#g" > $(OUT_DIR)/conf/client.yml && echo "  > $(OUT_DIR)/conf/client.yml"
 	@-test -f $(PROJECT_DIR)/conf/router_config.yml && cat $(PROJECT_DIR)/conf/router_config.yml | sed "s#\$$HOST_IP#$(DOCKER_HOST_IP)#g" > $(OUT_DIR)/conf/router_config.yml && echo "  > $(OUT_DIR)/conf/router_config.yml"
+	@-test -f $(PROJECT_DIR)/conf/virtual_service.yml && cat $(PROJECT_DIR)/conf/virtual_service.yml | sed "s#\$$HOST_IP#$(DOCKER_HOST_IP)#g" > $(OUT_DIR)/conf/virtual_service.yml && echo "  > $(OUT_DIR)/conf/virtual_service.yml"
+	@-test -f $(PROJECT_DIR)/conf/dest_rule.yml && cat $(PROJECT_DIR)/conf/dest_rule.yml | sed "s#\$$HOST_IP#$(DOCKER_HOST_IP)#g" > $(OUT_DIR)/conf/dest_rule.yml && echo "  > $(OUT_DIR)/conf/dest_rule.yml"
 
 ## docker-health-check: check services health on docker
 .PHONY: docker-health-check
@@ -130,6 +132,8 @@ print-server-log:
 .PHONY: run
 run: export CONF_CONSUMER_FILE_PATH ?= $(OUT_DIR)/conf/client.yml
 run: export CONF_ROUTER_FILE_PATH ?= $(OUT_DIR)/conf/router_config.yml
+run: export CONF_DEST_RULE_FILE_PATH ?= $(OUT_DIR)/conf/dest_rule.yml
+run: export CONF_VIRTUAL_SERVICE_FILE_PATH ?= $(OUT_DIR)/conf/virtual_service.yml
 run: build
 	$(info   >  Running application $(PROJECT_NAME), output is redirected to $(LOG_FILE))
 	@-$(OUT_DIR)/$(PROJECT_NAME)$(EXT_NAME) 2>&1 | tee $(LOG_FILE)
@@ -145,6 +149,8 @@ stop:
 .PHONY: integration
 integration: export CONF_CONSUMER_FILE_PATH ?= $(OUT_DIR)/conf/client.yml
 integration: export CONF_ROUTER_FILE_PATH ?= $(OUT_DIR)/conf/router_config.yml
+integration: export CONF_DEST_RULE_FILE_PATH ?= $(OUT_DIR)/conf/dest_rule.yml
+integration: export CONF_VIRTUAL_SERVICE_FILE_PATH ?= $(OUT_DIR)/conf/virtual_service.yml
 integration:
 	$(info   >  Running integration test for application $(PROJECT_NAME))
 	@go clean -testcache
diff --git a/docker/README_zh.md b/docker/README_zh.md
index 35bc4e5..54c1dbd 100644
--- a/docker/README_zh.md
+++ b/docker/README_zh.md
@@ -32,7 +32,7 @@ docker run -e DUBBO_IP_TO_REGISTRY=127.0.0.1  -p 20000:20000  --link zkserver:zk
 
 - 首先开启了zookeeper docker,用于注册服务
 
-- 之后需要设置t ip_to_registry 环境变量.  \
+- 之后需要设置 DUBBO_IP_TO_REGISTRY 环境变量.  \
 
   docker桥接网络模型需要明确指定主机ip用于网络通信。Dubbo框架在运行参数中提供了两个系统属性,能够指定Ip和port进行注册,然后其他服务通过注册好的信息访问当前服务。
 
diff --git a/general/dubbo3/hessian2/go-client/conf/client.yml b/general/dubbo3/hessian2/go-client/conf/client.yml
index 8f0ec72..c9761ef 100644
--- a/general/dubbo3/hessian2/go-client/conf/client.yml
+++ b/general/dubbo3/hessian2/go-client/conf/client.yml
@@ -29,4 +29,4 @@ references:
     registry: "demoZk"
     protocol: "tri"
     serialization: "hessian2"
-    interface: "com.apache.dubbo.sample.basic.IGreeter"
\ No newline at end of file
+    interface: "org.apache.dubbo.UserProvider"
\ No newline at end of file
diff --git a/general/dubbo3/hessian2/go-client/pkg/hello.go b/general/dubbo3/hessian2/go-client/pkg/hello.go
index eac055e..742fa65 100644
--- a/general/dubbo3/hessian2/go-client/pkg/hello.go
+++ b/general/dubbo3/hessian2/go-client/pkg/hello.go
@@ -36,5 +36,5 @@ func (u *UserProvider) Reference() string {
 }
 
 func (User) JavaClassName() string {
-	return "com.apache.dubbo.sample.basic.User"
+	return "org.apache.dubbo.User"
 }
diff --git a/general/dubbo3/hessian2/go-server/conf/server.yml b/general/dubbo3/hessian2/go-server/conf/server.yml
index d00171d..efa157b 100644
--- a/general/dubbo3/hessian2/go-server/conf/server.yml
+++ b/general/dubbo3/hessian2/go-server/conf/server.yml
@@ -21,7 +21,7 @@ services:
     registry: "demoZK"
     protocol: "tri" # tri is dubbo-go3.0 protocol
     serialization: "hessian2" # hessian is serialization type
-    interface: "com.apache.dubbo.sample.basic.IGreeter"
+    interface: "org.apache.dubbo.UserProvider"
 
 # protocol config
 protocols:
diff --git a/general/dubbo3/hessian2/go-server/pkg/greeter.go b/general/dubbo3/hessian2/go-server/pkg/greeter.go
index 8e1f7f6..e6aef5e 100644
--- a/general/dubbo3/hessian2/go-server/pkg/greeter.go
+++ b/general/dubbo3/hessian2/go-server/pkg/greeter.go
@@ -53,5 +53,5 @@ func (u UserProvider) Reference() string {
 }
 
 func (u User) JavaClassName() string {
-	return "com.apache.dubbo.sample.basic.User"
+	return "org.apache.dubbo.User"
 }
diff --git a/group/README.md b/group/README.md
index a5c01d9..85ca7ec 100644
--- a/group/README.md
+++ b/group/README.md
@@ -30,4 +30,7 @@ references:
     # ...
     group: "GroupA"
     # ...
-```
\ No newline at end of file
+```
+
+### 3. How to run the sample
+dubbo-go checks if all servers under consumer references are alive, so needs to start all types of group servers under consumer references
\ No newline at end of file
diff --git a/group/README_zh.md b/group/README_zh.md
index 3ce2ad4..c3ce7fb 100644
--- a/group/README_zh.md
+++ b/group/README_zh.md
@@ -30,4 +30,7 @@ references:
     # ...
     group: "GroupA"
     # ...
-```
\ No newline at end of file
+```
+
+### 3. 使用说明
+dubbo-go 会检查消费者 references 下的所有服务器是否存活,需要启动消费者 references 下所有类型的 group 服务器
\ No newline at end of file
diff --git a/group/go-server-group-a/conf/client.yml b/group/go-server-group-a/conf/client.yml
index 11ae382..9f45019 100644
--- a/group/go-server-group-a/conf/client.yml
+++ b/group/go-server-group-a/conf/client.yml
@@ -9,7 +9,7 @@ connect_timeout: "3s"
 # application config
 application:
   organization: "dubbo.io"
-  name: "UserInfoTest"
+  name: "UserInfoClient"
   module: "dubbo-go user-info client"
   version: "0.0.1"
   environment: "dev"
@@ -25,9 +25,10 @@ registries:
 
 # reference config
 references:
-  "UserProvider":
+  "UserProviderGroupA":
     registry: "demoZk"
     protocol: "dubbo"
+    group: "GroupA"
     interface: "org.apache.dubbo.UserProvider"
     cluster: "failover"
     methods:
diff --git a/group/go-server-group-a/tests/integration/main_test.go b/group/go-server-group-a/tests/integration/main_test.go
index 537f610..e4041f5 100644
--- a/group/go-server-group-a/tests/integration/main_test.go
+++ b/group/go-server-group-a/tests/integration/main_test.go
@@ -27,8 +27,8 @@ import (
 )
 
 import (
-	hessian "github.com/apache/dubbo-go-hessian2"
 	"dubbo.apache.org/dubbo-go/v3/config"
+	hessian "github.com/apache/dubbo-go-hessian2"
 
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
@@ -40,10 +40,10 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
-var userProvider = new(UserProvider)
+var userProviderA = new(UserProviderGroupA)
 
 func TestMain(m *testing.M) {
-	config.SetConsumerService(userProvider)
+	config.SetConsumerService(userProviderA)
 	hessian.RegisterPOJO(&User{})
 	config.Load()
 	time.Sleep(3 * time.Second)
@@ -58,12 +58,12 @@ type User struct {
 	Time time.Time
 }
 
-type UserProvider struct {
+type UserProviderGroupA struct {
 	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
 }
 
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
+func (u *UserProviderGroupA) Reference() string {
+	return "UserProviderGroupA"
 }
 
 func (User) JavaClassName() string {
diff --git a/group/go-server-group-a/tests/integration/userprovider_test.go b/group/go-server-group-a/tests/integration/userprovider_test.go
index dc29d9a..b0a1658 100644
--- a/group/go-server-group-a/tests/integration/userprovider_test.go
+++ b/group/go-server-group-a/tests/integration/userprovider_test.go
@@ -29,10 +29,10 @@ import (
 
 func TestGetUser(t *testing.T) {
 	user := &User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
+	err := userProviderA.GetUser(context.TODO(), []interface{}{"A001"}, user)
 	assert.Nil(t, err)
 	assert.Equal(t, "A001", user.ID)
-	assert.Equal(t, "Alex Stocks", user.Name)
+	assert.Equal(t, "Alex Stocks In Group A", user.Name)
 	assert.Equal(t, int32(18), user.Age)
 	assert.NotNil(t, user.Time)
 }
diff --git a/group/go-server-group-b/conf/client.yml b/group/go-server-group-b/conf/client.yml
index 11ae382..c826213 100644
--- a/group/go-server-group-b/conf/client.yml
+++ b/group/go-server-group-b/conf/client.yml
@@ -9,7 +9,7 @@ connect_timeout: "3s"
 # application config
 application:
   organization: "dubbo.io"
-  name: "UserInfoTest"
+  name: "UserInfoClient"
   module: "dubbo-go user-info client"
   version: "0.0.1"
   environment: "dev"
@@ -25,9 +25,10 @@ registries:
 
 # reference config
 references:
-  "UserProvider":
+  "UserProviderGroupB":
     registry: "demoZk"
     protocol: "dubbo"
+    group: "GroupB"
     interface: "org.apache.dubbo.UserProvider"
     cluster: "failover"
     methods:
diff --git a/group/go-server-group-b/tests/integration/main_test.go b/group/go-server-group-b/tests/integration/main_test.go
index 537f610..df3a5c6 100644
--- a/group/go-server-group-b/tests/integration/main_test.go
+++ b/group/go-server-group-b/tests/integration/main_test.go
@@ -27,8 +27,8 @@ import (
 )
 
 import (
-	hessian "github.com/apache/dubbo-go-hessian2"
 	"dubbo.apache.org/dubbo-go/v3/config"
+	hessian "github.com/apache/dubbo-go-hessian2"
 
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
@@ -40,10 +40,10 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/registry/zookeeper"
 )
 
-var userProvider = new(UserProvider)
+var userProviderB = new(UserProviderGroupB)
 
 func TestMain(m *testing.M) {
-	config.SetConsumerService(userProvider)
+	config.SetConsumerService(userProviderB)
 	hessian.RegisterPOJO(&User{})
 	config.Load()
 	time.Sleep(3 * time.Second)
@@ -58,12 +58,12 @@ type User struct {
 	Time time.Time
 }
 
-type UserProvider struct {
+type UserProviderGroupB struct {
 	GetUser func(ctx context.Context, req []interface{}, rsp *User) error
 }
 
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
+func (u *UserProviderGroupB) Reference() string {
+	return "UserProviderGroupB"
 }
 
 func (User) JavaClassName() string {
diff --git a/group/go-server-group-b/tests/integration/userprovider_test.go b/group/go-server-group-b/tests/integration/userprovider_test.go
index 7183e64..d9c06a1 100644
--- a/group/go-server-group-b/tests/integration/userprovider_test.go
+++ b/group/go-server-group-b/tests/integration/userprovider_test.go
@@ -23,17 +23,16 @@ import (
 	"context"
 	"testing"
 )
-
 import (
 	"github.com/stretchr/testify/assert"
 )
 
 func TestGetUser(t *testing.T) {
 	user := &User{}
-	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
+	err := userProviderB.GetUser(context.TODO(), []interface{}{"A001"}, user)
 	assert.Nil(t, err)
 	assert.Equal(t, "A001", user.ID)
-	assert.Equal(t, "Alex Stocks", user.Name)
+	assert.Equal(t, "Alex Stocks In Group B", user.Name)
 	assert.Equal(t, int32(18), user.Age)
 	assert.NotNil(t, user.Time)
 }
diff --git a/integrate_test.sh b/integrate_test.sh
index 73e801b..8ae516c 100755
--- a/integrate_test.sh
+++ b/integrate_test.sh
@@ -15,7 +15,7 @@
 #  limitations under the License.
 
 if [ -z "$1" ]; then
-  echo 'Provide test directory please, like : ./integrate_test.sh $(pwd)/helloworld/go-server .'
+  echo "Provide test directory please, like : ./integrate_test.sh $(pwd)/helloworld/go-server ."
   exit
 fi
 
diff --git a/router/uniform-router/file/go-server/conf/dest_rule.yml b/router/uniform-router/file/go-server/conf/dest_rule.yml
new file mode 100644
index 0000000..4702fe5
--- /dev/null
+++ b/router/uniform-router/file/go-server/conf/dest_rule.yml
@@ -0,0 +1,11 @@
+apiVersion: service.dubbo.apache.org/v1alpha1
+kind: DestinationRule
+metadata: { name: demo-route }
+spec:
+  host: demo
+  subsets:
+    - name: all
+      labels: { ut: CENTER } # 服务端url存在 `ut:CENTER` 的键值参数
+    - name: center
+      labels: { ut: other } # 服务端url存在 `ut:other` 的键值参数
+    - name: other
\ No newline at end of file
diff --git a/router/uniform-router/file/go-server/conf/virtual_service.yml b/router/uniform-router/file/go-server/conf/virtual_service.yml
new file mode 100644
index 0000000..dbd687a
--- /dev/null
+++ b/router/uniform-router/file/go-server/conf/virtual_service.yml
@@ -0,0 +1,22 @@
+apiVersion: service.dubbo.apache.org/v1alpha1
+kind: VirtualService
+metadata: {name: demo-route}
+spec:
+  dubbo:
+    # 使用正则表达式匹配service名,只有个满足该service名的请求才能路由。
+    # 就此例子来说,不满足service名的请求会直接找不到provider
+    - services:
+      - { regex: org.apache.dubbo.UserProvider* }
+      routedetail:
+        # 匹配规则,如果(sourceLabel)客户端url满足存在参数 `trafficLabel: xxx` 的才能匹配成功
+        - match:
+            - sourceLabels: {trafficLabel: xxx}
+          name: other-condition
+          route: # 一旦匹配上述match规则,将选择dest_rule.yml里定义的名为other的子集
+            - destination: {host: demo, subset: other}
+        - name: center-match
+          # 没有match,兜底逻辑,一定会被匹配到。
+          route: # 将选择dest_rule.yml里定义的名为center的子集
+            - destination: {host: demo, subset: center}
+
+  hosts: [demo]  # 匹配dest_rule.yml里面的host
diff --git a/router/uniform-router/file/go-server/tests/integration/main_test.go b/router/uniform-router/file/go-server/tests/integration/main_test.go
index a796532..77d9f57 100644
--- a/router/uniform-router/file/go-server/tests/integration/main_test.go
+++ b/router/uniform-router/file/go-server/tests/integration/main_test.go
@@ -24,6 +24,8 @@ import (
 
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
+	"dubbo.apache.org/dubbo-go/v3/cluster/router/v3router"
+	"dubbo.apache.org/dubbo-go/v3/common/extension"
 	_ "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"
@@ -42,6 +44,7 @@ import (
 var userProvider = new(UserProvider)
 
 func TestMain(m *testing.M) {
+	extension.SetRouterFactory("uniform", v3router.NewUniformRouterFactory)
 	config.SetConsumerService(userProvider)
 	hessian.RegisterPOJO(&User{})
 	config.Load()
diff --git a/router/uniform-router/file/go-server/tests/integration/userprovider_test.go b/router/uniform-router/file/go-server/tests/integration/userprovider_test.go
index 5b455d5..09b09c3 100644
--- a/router/uniform-router/file/go-server/tests/integration/userprovider_test.go
+++ b/router/uniform-router/file/go-server/tests/integration/userprovider_test.go
@@ -30,5 +30,9 @@ import (
 func TestGetUser(t *testing.T) {
 	user := &User{}
 	err := userProvider.GetUser(context.TODO(), []interface{}{"A001"}, user)
-	assert.NotNil(t, err)
+	assert.Nil(t, err)
+	assert.Equal(t, "A001", user.Id)
+	assert.Equal(t, "Alex Stocks", user.Name)
+	assert.Equal(t, int32(18), user.Age)
+	assert.NotNil(t, user.Time)
 }
diff --git a/router/uniform-router/file/go-server2/conf/dest_rule.yml b/router/uniform-router/file/go-server2/conf/dest_rule.yml
new file mode 100644
index 0000000..4702fe5
--- /dev/null
+++ b/router/uniform-router/file/go-server2/conf/dest_rule.yml
@@ -0,0 +1,11 @@
+apiVersion: service.dubbo.apache.org/v1alpha1
+kind: DestinationRule
+metadata: { name: demo-route }
+spec:
+  host: demo
+  subsets:
+    - name: all
+      labels: { ut: CENTER } # 服务端url存在 `ut:CENTER` 的键值参数
+    - name: center
+      labels: { ut: other } # 服务端url存在 `ut:other` 的键值参数
+    - name: other
\ No newline at end of file
diff --git a/router/uniform-router/file/go-server2/conf/virtual_service.yml b/router/uniform-router/file/go-server2/conf/virtual_service.yml
new file mode 100644
index 0000000..dbd687a
--- /dev/null
+++ b/router/uniform-router/file/go-server2/conf/virtual_service.yml
@@ -0,0 +1,22 @@
+apiVersion: service.dubbo.apache.org/v1alpha1
+kind: VirtualService
+metadata: {name: demo-route}
+spec:
+  dubbo:
+    # 使用正则表达式匹配service名,只有个满足该service名的请求才能路由。
+    # 就此例子来说,不满足service名的请求会直接找不到provider
+    - services:
+      - { regex: org.apache.dubbo.UserProvider* }
+      routedetail:
+        # 匹配规则,如果(sourceLabel)客户端url满足存在参数 `trafficLabel: xxx` 的才能匹配成功
+        - match:
+            - sourceLabels: {trafficLabel: xxx}
+          name: other-condition
+          route: # 一旦匹配上述match规则,将选择dest_rule.yml里定义的名为other的子集
+            - destination: {host: demo, subset: other}
+        - name: center-match
+          # 没有match,兜底逻辑,一定会被匹配到。
+          route: # 将选择dest_rule.yml里定义的名为center的子集
+            - destination: {host: demo, subset: center}
+
+  hosts: [demo]  # 匹配dest_rule.yml里面的host
diff --git a/router/uniform-router/file/go-server2/tests/integration/main_test.go b/router/uniform-router/file/go-server2/tests/integration/main_test.go
index a796532..77d9f57 100644
--- a/router/uniform-router/file/go-server2/tests/integration/main_test.go
+++ b/router/uniform-router/file/go-server2/tests/integration/main_test.go
@@ -24,6 +24,8 @@ import (
 
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
+	"dubbo.apache.org/dubbo-go/v3/cluster/router/v3router"
+	"dubbo.apache.org/dubbo-go/v3/common/extension"
 	_ "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"
@@ -42,6 +44,7 @@ import (
 var userProvider = new(UserProvider)
 
 func TestMain(m *testing.M) {
+	extension.SetRouterFactory("uniform", v3router.NewUniformRouterFactory)
 	config.SetConsumerService(userProvider)
 	hessian.RegisterPOJO(&User{})
 	config.Load()
diff --git a/start_integrate_test.sh b/start_integrate_test.sh
index 58a562b..a720d0d 100755
--- a/start_integrate_test.sh
+++ b/start_integrate_test.sh
@@ -22,6 +22,9 @@ array+=("configcenter/apollo/go-server")
 array+=("configcenter/nacos/go-server")
 array+=("configcenter/zookeeper/go-server")
 
+# context
+array+=("context/go-server")
+
 # direct
 array+=("direct/go-server")
 
@@ -30,12 +33,21 @@ array+=("filter/custom/go-server")
 array+=("filter/tpslimit/go-server")
 array+=("filter/sentinel/go-server")
 
+# general
 array+=("general/dubbo/go-server")
+
+array+=("general/dubbo3/hessian2/go-server")
+array+=("general/grpc/go-server")
 array+=("general/dubbo3/codec-extension/go-server")
 array+=("general/dubbo3/msgpack/go-server")
 
+
 array+=("generic/go-server")
 
+# group
+array+=("group/go-server-group-a")
+array+=("group/go-server-group-b")
+
 # hello world
 array+=("helloworld/go-server")
 
@@ -47,16 +59,21 @@ array+=("metric/go-server")
 
 array+=("registry/zookeeper/go-server")
 array+=("registry/etcd/go-server")
+array+=("registry/nacos/go-server")
 
 # registry/servicediscovery/zookeeper
 array+=("registry/servicediscovery/zookeeper/go-server")
 array+=("registry/servicediscovery/nacos/go-server")
 
 
+# router
+array+=("router/uniform-router/file/go-server")
+array+=("router/uniform-router/file/go-server2")
+
 
 for((i=0;i<${#array[*]};i++))
 do
-	./integrate_test.sh ${array[i]}
+	./integrate_test.sh "${array[i]}"
 	result=$?
 	if [ $result -gt 0 ]; then
     exit $result