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 2026/03/29 14:34:47 UTC

(dubbo-go-samples) branch main updated: clean up compatibility directory (#1062)

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

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


The following commit(s) were added to refs/heads/main by this push:
     new f1860fa4 clean up compatibility directory (#1062)
f1860fa4 is described below

commit f1860fa4cb3468541cba3febef912a4f97367e9b
Author: Zecheng Zhu <16...@qq.com>
AuthorDate: Sun Mar 29 22:34:42 2026 +0800

    clean up compatibility directory (#1062)
    
    * migrate polaris router
    
    * rm compatibility/generic
    
    * clean up compatibility/api
---
 README.md                                          |   7 +-
 README_CN.md                                       |   7 +-
 compatibility/api/generate.sh                      |   4 -
 compatibility/api/samples_api.pb.go                | 264 ---------------------
 compatibility/api/samples_api.proto                |  41 ----
 compatibility/api/samples_api_triple.pb.go         | 259 --------------------
 compatibility/generic/README.md                    | 104 --------
 compatibility/generic/README_zh.md                 | 104 --------
 .../generic/default/go-client/cmd/client.go        | 263 --------------------
 .../generic/default/go-server/cmd/server.go        |  73 ------
 .../generic/default/go-server/conf/dubbogo.yml     |  22 --
 .../generic/default/go-server/pkg/init.go          |  32 ---
 .../generic/default/go-server/pkg/user.go          |  40 ----
 .../generic/default/go-server/pkg/user_provider.go | 134 -----------
 .../default/go-server/pkg/user_provider_triple.go  | 133 -----------
 .../generic/default/go-server/pkg/user_response.go |  26 --
 compatibility/generic/default/java-client/pom.xml  | 162 -------------
 compatibility/generic/default/java-client/run.sh   |   1 -
 .../java/org/apache/dubbo/samples/ApiConsumer.java | 187 ---------------
 .../main/java/org/apache/dubbo/samples/User.java   |  77 ------
 .../src/main/resources/log4j.properties            |  19 --
 compatibility/generic/default/java-server/pom.xml  | 164 -------------
 compatibility/generic/default/java-server/run.sh   |   1 -
 .../java/org/apache/dubbo/samples/ApiProvider.java |  53 -----
 .../main/java/org/apache/dubbo/samples/Gender.java |  23 --
 .../java/org/apache/dubbo/samples/Response.java    |  92 -------
 .../main/java/org/apache/dubbo/samples/User.java   |  95 --------
 .../org/apache/dubbo/samples/UserProvider.java     |  54 -----
 .../org/apache/dubbo/samples/UserProviderImpl.java | 135 -----------
 .../apache/dubbo/samples/UserProviderTriple.java   |  56 -----
 .../dubbo/samples/UserProviderTripleImpl.java      | 135 -----------
 .../src/main/resources/log4j.properties            |  20 --
 compatibility/polaris/router/README-zh.md          | 121 ----------
 compatibility/polaris/router/README.md             | 121 ----------
 .../polaris/router/go-client/conf/dubbogo.yaml     |  25 --
 .../router/go-server/server-dev/cmd/server.go      | 111 ---------
 .../router/go-server/server-dev/conf/dubbogo.yaml  |  28 ---
 .../router/go-server/server-pre/cmd/server.go      | 111 ---------
 .../router/go-server/server-pre/conf/dubbogo.yaml  |  28 ---
 .../router/go-server/server-prod/cmd/server.go     | 111 ---------
 .../router/go-server/server-prod/conf/dubbogo.yaml |  28 ---
 .../router/images/dubbogo-route-rule-dev.png       | Bin 103117 -> 0 bytes
 .../router/images/dubbogo-route-rule-pre.png       | Bin 102704 -> 0 bytes
 .../router/images/dubbogo-route-rule-prod.png      | Bin 97770 -> 0 bytes
 router/polaris/README.md                           |  91 +++++++
 router/polaris/README_zh.md                        |  91 +++++++
 .../polaris/go-client/cmd/client.go                |  63 ++---
 router/polaris/go-server/server-dev/cmd/server.go  |  92 +++++++
 router/polaris/go-server/server-pre/cmd/server.go  |  92 +++++++
 router/polaris/go-server/server-prod/cmd/server.go |  92 +++++++
 router/polaris/image/dubbogo-route-rule.png        | Bin 0 -> 80726 bytes
 router/polaris/proto/user.pb.go                    | 241 +++++++++++++++++++
 .../pkg/user.go => router/polaris/proto/user.proto |  26 +-
 router/polaris/proto/user.triple.go                | 122 ++++++++++
 54 files changed, 871 insertions(+), 3510 deletions(-)

diff --git a/README.md b/README.md
index 94fd2f16..9de60f94 100644
--- a/README.md
+++ b/README.md
@@ -50,6 +50,7 @@ Please refer to [HOWTO.md](HOWTO.md) for detailed instructions on running the sa
   * `router/tag`: Dubbo-go tag router examples.
   * `router/condition`: Dubbo-go condition router examples.
   * `router/script`: Dubbo-go script router examples.
+  * `router/polaris`: Quickly experience Polaris' service routing capabilities in Dubbo-go.
 * `rpc`: Various RPC protocol examples with Dubbo-go.
   * `rpc/dubbo`: Dubbo protocol example, including Java–Go interop.
   * `rpc/grpc`: gRPC protocol example.
@@ -61,12 +62,6 @@ Please refer to [HOWTO.md](HOWTO.md) for detailed instructions on running the sa
 * `tls`: Demonstrates how to use TLS (based on X.509 certificates) in Dubbo-go to enable encrypted communication and/or mutual authentication between client and server, also includes Go–Java interoperability.
 * `transaction/seata-go`: Distributed transaction example using `seata-go`.
 
-### compatibility (legacy Dubbo-go samples)
-
-* `compatibility/generic`: Generic invocation example.
-* `compatibility/polaris`:  Dubbo-go integrate with polaris samples.
-    * `compatibility/polaris/router`: Quickly experience Polaris' service routing capabilities in dubbogo
-
 ### Tools
 
 * `pgw-cleaner`: Operations and maintenance tool for cleaning up zombie metrics in Prometheus Push mode.
diff --git a/README_CN.md b/README_CN.md
index f6250068..b42aab1b 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -50,6 +50,7 @@
   * `router/tag`: Dubbo-go 的 tag router 使用示例。
   * `router/condition`: Dubbo-go 的 condition router 使用示例。
   * `router/script`: Dubbo-go 的 script router 使用示例。
+  * `router/polaris`:在 Dubbo-go 中快速体验北极星的服务路由能力。
 * `rpc`:Dubbo-go 支持的多种 RPC 协议示例。
   * `rpc/dubbo`:Dubbo 协议示例,包含 Java–Go 互操作。
   * `rpc/grpc`:基于 gRPC 协议的示例。
@@ -61,12 +62,6 @@
 * `tls`:演示如何在 Dubbo-go 中使用 TLS(基于 X.509 证书),实现客户端与服务端之间的加密通信和/或双向认证,同时包含 Go 与 Java 的互操作示例。
 * `transaction/seata-go`:基于 `seata-go` 的分布式事务示例。
 
-### compatibility(旧版 Dubbo-go 示例)
-
-* `compatibility/generic`:泛化调用示例。
-* `compatibility/polaris`:  Dubbo-go 与 polaris 集成示例.
-    * `compatibility/polaris/router`: 在 dubbogo 中快速体验北极星的服务路由能力
-
 ### 工具
 
 * `pgw-cleaner`:用于在 Prometheus Push 模式下清理僵尸指标的运维工具。
diff --git a/compatibility/api/generate.sh b/compatibility/api/generate.sh
deleted file mode 100755
index 4aaaa2e0..00000000
--- a/compatibility/api/generate.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-export GO111MODULE="on"
-export GOPROXY="http://goproxy.io"
-go install github.com/dubbogo/tools/cmd/protoc-gen-go-triple@v1.0.8
-protoc --go_out=. --go-triple_out=. samples_api.proto
\ No newline at end of file
diff --git a/compatibility/api/samples_api.pb.go b/compatibility/api/samples_api.pb.go
deleted file mode 100644
index fd9bfcad..00000000
--- a/compatibility/api/samples_api.pb.go
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// 	protoc-gen-go v1.26.0
-// 	protoc        v3.14.0
-// source: samples_api.proto
-
-package api
-
-import (
-	reflect "reflect"
-	sync "sync"
-)
-
-import (
-	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-
-	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-)
-
-const (
-	// Verify that this generated code is sufficiently up-to-date.
-	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
-	// 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_samples_api_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_samples_api_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_samples_api_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_samples_api_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_samples_api_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_samples_api_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_samples_api_proto protoreflect.FileDescriptor
-
-var file_samples_api_proto_rawDesc = []byte{
-	0x0a, 0x11, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e,
-	0x64, 0x75, 0x62, 0x62, 0x6f, 0x67, 0x6f, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e,
-	0x61, 0x70, 0x69, 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, 0xd7, 0x01, 0x0a, 0x07, 0x47, 0x72, 0x65, 0x65, 0x74, 0x65,
-	0x72, 0x12, 0x60, 0x0a, 0x08, 0x53, 0x61, 0x79, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x12, 0x2c, 0x2e,
-	0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f,
-	0x67, 0x6f, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48,
-	0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6f, 0x72,
-	0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x67, 0x6f,
-	0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x73, 0x65,
-	0x72, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0e, 0x53, 0x61, 0x79, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x53,
-	0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2c, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63,
-	0x68, 0x65, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x67, 0x6f, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c,
-	0x65, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65,
-	0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x67, 0x6f, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,
-	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42,
-	0x08, 0x5a, 0x06, 0x2e, 0x2f, 0x3b, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x33,
-}
-
-var (
-	file_samples_api_proto_rawDescOnce sync.Once
-	file_samples_api_proto_rawDescData = file_samples_api_proto_rawDesc
-)
-
-func file_samples_api_proto_rawDescGZIP() []byte {
-	file_samples_api_proto_rawDescOnce.Do(func() {
-		file_samples_api_proto_rawDescData = protoimpl.X.CompressGZIP(file_samples_api_proto_rawDescData)
-	})
-	return file_samples_api_proto_rawDescData
-}
-
-var file_samples_api_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
-var file_samples_api_proto_goTypes = []interface{}{
-	(*HelloRequest)(nil), // 0: org.apache.dubbogo.samples.api.HelloRequest
-	(*User)(nil),         // 1: org.apache.dubbogo.samples.api.User
-}
-var file_samples_api_proto_depIdxs = []int32{
-	0, // 0: org.apache.dubbogo.samples.api.Greeter.SayHello:input_type -> org.apache.dubbogo.samples.api.HelloRequest
-	0, // 1: org.apache.dubbogo.samples.api.Greeter.SayHelloStream:input_type -> org.apache.dubbogo.samples.api.HelloRequest
-	1, // 2: org.apache.dubbogo.samples.api.Greeter.SayHello:output_type -> org.apache.dubbogo.samples.api.User
-	1, // 3: org.apache.dubbogo.samples.api.Greeter.SayHelloStream:output_type -> org.apache.dubbogo.samples.api.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_samples_api_proto_init() }
-func file_samples_api_proto_init() {
-	if File_samples_api_proto != nil {
-		return
-	}
-	if !protoimpl.UnsafeEnabled {
-		file_samples_api_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_samples_api_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_samples_api_proto_rawDesc,
-			NumEnums:      0,
-			NumMessages:   2,
-			NumExtensions: 0,
-			NumServices:   1,
-		},
-		GoTypes:           file_samples_api_proto_goTypes,
-		DependencyIndexes: file_samples_api_proto_depIdxs,
-		MessageInfos:      file_samples_api_proto_msgTypes,
-	}.Build()
-	File_samples_api_proto = out.File
-	file_samples_api_proto_rawDesc = nil
-	file_samples_api_proto_goTypes = nil
-	file_samples_api_proto_depIdxs = nil
-}
diff --git a/compatibility/api/samples_api.proto b/compatibility/api/samples_api.proto
deleted file mode 100644
index 2b808e6e..00000000
--- a/compatibility/api/samples_api.proto
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-syntax = "proto3";
-package org.apache.dubbogo.samples.api;
-
-option go_package = "./;api";
-
-// The greeting service definition.
-service Greeter {
-  // Sends a greeting
-  rpc SayHello (HelloRequest) returns (User) {}
-  // Sends a greeting via stream
-  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;
-}
\ No newline at end of file
diff --git a/compatibility/api/samples_api_triple.pb.go b/compatibility/api/samples_api_triple.pb.go
deleted file mode 100644
index 5704ebc5..00000000
--- a/compatibility/api/samples_api_triple.pb.go
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Code generated by protoc-gen-go-triple. DO NOT EDIT.
-// versions:
-// - protoc-gen-go-triple v1.0.8
-// - protoc             v3.14.0
-// source: samples_api.proto
-
-package api
-
-import (
-	context "context"
-	fmt "fmt"
-)
-
-import (
-	constant1 "dubbo.apache.org/dubbo-go/v3/common/constant"
-	protocol "dubbo.apache.org/dubbo-go/v3/protocol"
-	dubbo3 "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
-	invocation "dubbo.apache.org/dubbo-go/v3/protocol/invocation"
-
-	grpc_go "github.com/dubbogo/grpc-go"
-	codes "github.com/dubbogo/grpc-go/codes"
-	metadata "github.com/dubbogo/grpc-go/metadata"
-	status "github.com/dubbogo/grpc-go/status"
-
-	common "github.com/dubbogo/triple/pkg/common"
-	constant "github.com/dubbogo/triple/pkg/common/constant"
-	triple "github.com/dubbogo/triple/pkg/triple"
-)
-
-// 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_go.SupportPackageIsVersion7
-
-// GreeterClient is the client API for Greeter service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
-type GreeterClient interface {
-	// Sends a greeting
-	SayHello(ctx context.Context, in *HelloRequest, opts ...grpc_go.CallOption) (*User, common.ErrorWithAttachment)
-	// Sends a greeting via stream
-	SayHelloStream(ctx context.Context, opts ...grpc_go.CallOption) (Greeter_SayHelloStreamClient, error)
-}
-
-type greeterClient struct {
-	cc *triple.TripleConn
-}
-
-type GreeterClientImpl struct {
-	SayHello       func(ctx context.Context, in *HelloRequest) (*User, error)
-	SayHelloStream func(ctx context.Context) (Greeter_SayHelloStreamClient, error)
-}
-
-func (c *GreeterClientImpl) GetDubboStub(cc *triple.TripleConn) GreeterClient {
-	return NewGreeterClient(cc)
-}
-
-func (c *GreeterClientImpl) XXX_InterfaceName() string {
-	return "org.apache.dubbogo.samples.api.Greeter"
-}
-
-func NewGreeterClient(cc *triple.TripleConn) GreeterClient {
-	return &greeterClient{cc}
-}
-
-func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc_go.CallOption) (*User, common.ErrorWithAttachment) {
-	out := new(User)
-	interfaceKey := ctx.Value(constant.InterfaceKey).(string)
-	return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/SayHello", in, out)
-}
-
-func (c *greeterClient) SayHelloStream(ctx context.Context, opts ...grpc_go.CallOption) (Greeter_SayHelloStreamClient, error) {
-	interfaceKey := ctx.Value(constant.InterfaceKey).(string)
-	stream, err := c.cc.NewStream(ctx, "/"+interfaceKey+"/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_go.ClientStream
-}
-
-type greeterSayHelloStreamClient struct {
-	grpc_go.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.
-// All implementations must embed UnimplementedGreeterServer
-// for forward compatibility
-type GreeterServer interface {
-	// Sends a greeting
-	SayHello(context.Context, *HelloRequest) (*User, error)
-	// Sends a greeting via stream
-	SayHelloStream(Greeter_SayHelloStreamServer) error
-	mustEmbedUnimplementedGreeterServer()
-}
-
-// UnimplementedGreeterServer must be embedded to have forward compatible implementations.
-type UnimplementedGreeterServer struct {
-	proxyImpl protocol.Invoker
-}
-
-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 (s *UnimplementedGreeterServer) XXX_SetProxyImpl(impl protocol.Invoker) {
-	s.proxyImpl = impl
-}
-
-func (s *UnimplementedGreeterServer) XXX_GetProxyImpl() protocol.Invoker {
-	return s.proxyImpl
-}
-
-func (s *UnimplementedGreeterServer) XXX_ServiceDesc() *grpc_go.ServiceDesc {
-	return &Greeter_ServiceDesc
-}
-func (s *UnimplementedGreeterServer) XXX_InterfaceName() string {
-	return "org.apache.dubbogo.samples.api.Greeter"
-}
-
-func (UnimplementedGreeterServer) mustEmbedUnimplementedGreeterServer() {}
-
-// UnsafeGreeterServer may be embedded to opt out of forward compatibility for this service.
-// Use of this interface is not recommended, as added methods to GreeterServer will
-// result in compilation errors.
-type UnsafeGreeterServer interface {
-	mustEmbedUnimplementedGreeterServer()
-}
-
-func RegisterGreeterServer(s grpc_go.ServiceRegistrar, srv GreeterServer) {
-	s.RegisterService(&Greeter_ServiceDesc, srv)
-}
-
-func _Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
-	in := new(HelloRequest)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	base := srv.(dubbo3.Dubbo3GrpcService)
-	args := []interface{}{}
-	args = append(args, in)
-	md, _ := metadata.FromIncomingContext(ctx)
-	invAttachment := make(map[string]interface{}, len(md))
-	for k, v := range md {
-		invAttachment[k] = v
-	}
-	invo := invocation.NewRPCInvocation("SayHello", args, invAttachment)
-	if interceptor == nil {
-		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
-		return result, result.Error()
-	}
-	info := &grpc_go.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
-	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
-		return result, result.Error()
-	}
-	return interceptor(ctx, in, info, handler)
-}
-
-func _Greeter_SayHelloStream_Handler(srv interface{}, stream grpc_go.ServerStream) error {
-	_, ok := srv.(dubbo3.Dubbo3GrpcService)
-	ctx := stream.Context()
-	md, _ := metadata.FromIncomingContext(ctx)
-	invAttachment := make(map[string]interface{}, len(md))
-	for k, v := range md {
-		invAttachment[k] = v
-	}
-	stream.(grpc_go.CtxSetterStream).SetContext(context.WithValue(ctx, constant1.AttachmentKey, invAttachment))
-	invo := invocation.NewRPCInvocation("SayHelloStream", nil, nil)
-	if !ok {
-		fmt.Println(invo)
-		return nil
-	}
-	return srv.(GreeterServer).SayHelloStream(&greeterSayHelloStreamServer{stream})
-}
-
-type Greeter_SayHelloStreamServer interface {
-	Send(*User) error
-	Recv() (*HelloRequest, error)
-	grpc_go.ServerStream
-}
-
-type greeterSayHelloStreamServer struct {
-	grpc_go.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
-}
-
-// Greeter_ServiceDesc is the grpc_go.ServiceDesc for Greeter service.
-// It's only intended for direct use with grpc_go.RegisterService,
-// and not to be introspected or modified (even as a copy)
-var Greeter_ServiceDesc = grpc_go.ServiceDesc{
-	ServiceName: "org.apache.dubbogo.samples.api.Greeter",
-	HandlerType: (*GreeterServer)(nil),
-	Methods: []grpc_go.MethodDesc{
-		{
-			MethodName: "SayHello",
-			Handler:    _Greeter_SayHello_Handler,
-		},
-	},
-	Streams: []grpc_go.StreamDesc{
-		{
-			StreamName:    "SayHelloStream",
-			Handler:       _Greeter_SayHelloStream_Handler,
-			ServerStreams: true,
-			ClientStreams: true,
-		},
-	},
-	Metadata: "samples_api.proto",
-}
diff --git a/compatibility/generic/README.md b/compatibility/generic/README.md
deleted file mode 100644
index c69e1112..00000000
--- a/compatibility/generic/README.md
+++ /dev/null
@@ -1,104 +0,0 @@
-# Generic Invocation
-
-Generic invocation ensures the RPC could be passed properly even if one of clients has no information about interface, because generic invocation converts the POJO to a generic type, like dictionary, string, etc. It is often used for testing and gateways. Please visit our documentation for more details.
-
-## Getting Started
-
-The samples of generic invocation are parted by the way of generalization:
-
-- default:uses MapGeneralizer which converts POJOs to maps
-
-Each sample contains 4 subfolders:
-
-- go-server:Dubbo-Go server sample
-- go-client:Dubbo-Go client sample
-- java-client:Dubbo server sample
-- java-server:Dubbo client sample
-
-Providing java samples is convenient to test interoperability between Dubbo and Dubbo-Go.
-
-### Registry
-
-This sample uses ZooKeeper as the registry. In fact, etcd and Nacos are supported as well. Executing the following command, a ZooKeeper instance will be launched. Please note that docker and docker-compose **SHOULD** be installed before.
-
-```shell
-cd ./default/go-server/docker \
-  && docker-compose up -d
-```
-### Server
-
-There are two ways to launch a Dubbo-Go server: using GoLand or using command line tool.
-
-Using GoLand. Please select `v3config-generic/generic-default-go-server` from Configurations at top-right corner, and then click Run button.
-
-Using command line tool. The `$ProjectRootDir` is the root directory of the dubbo-go-samples project.
-
-```shell
-cd $ProjectRootDir/generic/default/go-server/cmd \
-  && go run server.go
-```
-
-### Client
-
-There are two ways to launch a Dubbo-Go client: using GoLand or using command line tool.
-
-Using GoLand. Please select `v3config-generic/generic-default-go-client` from Configurations at top-right corner, and then click Run button.
-
-Using command line tool. The `$ProjectRootDir` is the root directory of the dubbo-go-samples project.
-
-```shell
-cd $ProjectRootDir/generic/default/go-client/cmd \
-  && go run client.go
-```
-
-## Switch the example from interface-level service discovery to application-level service discovery
-
-1. Modify the configuration file of the server go-server and add the field `registry-type: service`
-
-```
-registries:
-     zk:
-       protocol: zookeeper
-       timeout: 3s
-       address: 127.0.0.1:2181
-       registry-type: service
-...
-...
-```
-
-2. Modify the client.go file of client go-client
-
-First add the field `RegistryType: "service"`:
-
-```
-registryConfig := &config.RegistryConfig{
-     Protocol: "zookeeper",
-     Address: "127.0.0.1:2181",
-     RegistryType: "service",
-}
-```
-
-Then add `metadataConfig` configuration:
-
-```
-metadataConf := &config.MetadataReportConfig{
-     Protocol: "zookeeper",
-     Address: "127.0.0.1:2181",
-}
-```
-
-Finally, configure `metadataConfig` into `rootConfig` through `SetMetadataReport`
-
-```
-...
-...
-rootConfig := config. NewRootConfigBuilder().
-     AddRegistry("zk", registryConfig).
-     SetMetadataReport(metadataConf).
-     build()
-...
-...
-```
-
-Now, the generic call of application-level service discovery can be realized.
-
diff --git a/compatibility/generic/README_zh.md b/compatibility/generic/README_zh.md
deleted file mode 100644
index 07ea42ba..00000000
--- a/compatibility/generic/README_zh.md
+++ /dev/null
@@ -1,104 +0,0 @@
-# 泛化调用
-
-泛化调用是在客户端没有接口信息时保证信息被正确传递的手段,即把 POJO 泛化为通用格式(如字典、字符串),一般被用于集成测试、网关等场景。
-
-## 开始
-
-泛化调用例子根据泛化方式划分为:
-
-- default:默认泛化方式,即 Map 泛化方式
-
-在每种泛化调用的例子中,又包含四种文件:
-
-- go-server:Dubbo-Go server 例子
-- go-client:Dubbo-Go client 例子
-- java-client:Dubbo server 例子
-- java-server:Dubbo client 例子
-
-Dubbo Java 例子可以方便测试与 Dubbo-Go 的互通性,可以启动 java server 或 go client,或者 go server 和 java client 进行测试。
-
-### 注册中心
-
-本例子中使用 ZooKeeper 作为注册中心,也支持 etcd、Nacos 等作为注册中心。下面命令表示从 docker 中启动 ZooKeeper,所以需要首先确保 docker 和 docker-compose 是否已经安装。
-
-```shell
-cd ./default/go-server/docker \
-  && docker-compose up -d
-```
-### 服务端
-
-使用 Dubbo-Go 作为 provider,有两种方案可供选择:使用 GoLand 启动或从命令行工具启动。
-
-使用 GoLand 启动。需要在右上角 Configurations 中选择 `v3config-generic/generic-default-go-server`,点击 Run 按钮运行即可。
-
-从命令行工具启动。`$ProjectRootDir` 是指 dubbo-go-samples 项目根目录。
-
-```shell
-cd $ProjectRootDir/generic/default/go-server/cmd \
-  && go run server.go
-```
-
-### 客户端
-
-使用 Dubbo-Go 作为 consumer,有两种方案可供选择:使用 GoLand 启动和从命令行工具启动。
-
-使用 GoLand 启动。需要在右上角 Configurations 中选择 `v3config-generic/generic-default-go-client`,点击 Run 按钮运行即可。
-
-从命令行工具启动。`$ProjectRootDir` 是指 dubbo-go-samples 项目根目录。
-
-```shell
-cd $ProjectRootDir/generic/default/go-client/cmd \
-  && go run client.go
-```
-
-## 将示例由接口级服务发现切换至应用级服务发现
-
-1. 修改服务端 go-server 的配置文件,增添字段 `registry-type: service`
-
-```
-registries:
-    zk:
-      protocol: zookeeper
-      timeout: 3s
-      address: 127.0.0.1:2181
-      registry-type: service
-...
-...
-```
-
-2. 修改客户端 go-client 的 client.go 文件
-
-首先添加同样添加 `RegistryType: "service"` 字段
-
-```
-registryConfig := &config.RegistryConfig{
-    Protocol:     "zookeeper",
-    Address:      "127.0.0.1:2181",
-    RegistryType: "service",
-}
-```
-
-然后增添 `metadataConfig` 配置
-
-```
-metadataConf := &config.MetadataReportConfig{
-    Protocol: "zookeeper",
-    Address:  "127.0.0.1:2181",
-}
-```
-
-最后将 `metadataConfig` 通过 `SetMetadataReport` 配置进入 `rootConfig`
-
-```
-...
-...
-rootConfig := config.NewRootConfigBuilder().
-    AddRegistry("zk", registryConfig).
-    SetMetadataReport(metadataConf).
-    Build()
-...
-...
-```
-
-至此即可实现应用级服务发现的泛化调用。
-
diff --git a/compatibility/generic/default/go-client/cmd/client.go b/compatibility/generic/default/go-client/cmd/client.go
deleted file mode 100644
index 75002fe6..00000000
--- a/compatibility/generic/default/go-client/cmd/client.go
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package main
-
-import (
-	"context"
-	"time"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-	"dubbo.apache.org/dubbo-go/v3/config/generic"
-	_ "dubbo.apache.org/dubbo-go/v3/imports"
-	"dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log/logger"
-
-	tpconst "github.com/dubbogo/triple/pkg/common/constant"
-)
-
-import (
-	"github.com/apache/dubbo-go-samples/compatibility/generic/default/go-client/pkg"
-)
-
-const appName = "dubbo.io"
-
-// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/generic/default/go-client/conf/dubbogo.yml
-func main() {
-	// register POJOs
-	hessian.RegisterPOJO(&pkg.User{})
-
-	// generic invocation samples using hessian serialization on Dubbo protocol
-	dubboRefConf := newRefConf("org.apache.dubbo.samples.UserProvider", dubbo.DUBBO)
-	callGetUser(dubboRefConf)
-	//callGetOneUser(dubboRefConf)
-	callGetUsers(dubboRefConf)
-	callGetUsersMap(dubboRefConf)
-	callQueryUser(dubboRefConf)
-	callQueryUsers(dubboRefConf)
-	//callQueryAll(dubboRefConf)
-
-	// generic invocation samples using hessian serialization on Triple protocol
-	tripleRefConf := newRefConf("org.apache.dubbo.samples.UserProviderTriple", tpconst.TRIPLE)
-	callGetUser(tripleRefConf)
-	//callGetOneUser(tripleRefConf)
-	callGetUsers(tripleRefConf)
-	callGetUsersMap(tripleRefConf)
-	callQueryUser(tripleRefConf)
-	callQueryUsers(tripleRefConf)
-	//callQueryAll(tripleRefConf)
-
-}
-
-func callGetUser(refConf config.ReferenceConfig) {
-	resp, err := refConf.GetRPCService().(*generic.GenericService).Invoke(
-		context.TODO(),
-		"GetUser1",
-		[]string{"java.lang.String"},
-		[]hessian.Object{"A003"},
-	)
-
-	if err != nil {
-		panic(err)
-	}
-	logger.Infof("GetUser1(userId string) res: %+v", resp)
-
-	resp, err = refConf.GetRPCService().(*generic.GenericService).Invoke(
-		context.TODO(),
-		"GetUser2",
-		[]string{"java.lang.String", "java.lang.String"},
-		[]hessian.Object{"A003", "lily"},
-	)
-	if err != nil {
-		panic(err)
-	}
-	logger.Infof("GetUser2(userId string, name string) res: %+v", resp)
-
-	resp, err = refConf.GetRPCService().(*generic.GenericService).Invoke(
-		context.TODO(),
-		"GetUser3",
-		[]string{"int"},
-		[]hessian.Object{1},
-	)
-	if err != nil {
-		panic(err)
-	}
-	logger.Infof("GetUser3(userCode int) res: %+v", resp)
-
-	resp, err = refConf.GetRPCService().(*generic.GenericService).Invoke(
-		context.TODO(),
-		"GetUser4",
-		[]string{"int", "java.lang.String"},
-		[]hessian.Object{1, "zhangsan"},
-	)
-	if err != nil {
-		panic(err)
-	}
-	logger.Infof("GetUser4(userCode int, name string) res: %+v", resp)
-}
-
-// nolint
-func callGetOneUser(refConf config.ReferenceConfig) {
-	resp, err := refConf.GetRPCService().(*generic.GenericService).Invoke(
-		context.TODO(),
-		"GetOneUser",
-		[]string{},
-		// TODO go-go []hessian.Object{}, go-java []string{}
-		[]hessian.Object{},
-	)
-	if err != nil {
-		panic(err)
-	}
-	logger.Infof("GetOneUser() res: %+v", resp)
-}
-
-func callGetUsers(refConf config.ReferenceConfig) {
-	resp, err := refConf.GetRPCService().(*generic.GenericService).Invoke(
-		context.TODO(),
-		"GetUsers",
-		[]string{"java.util.List"},
-		[]hessian.Object{
-			[]hessian.Object{
-				"001", "002", "003", "004",
-			},
-		},
-	)
-	if err != nil {
-		panic(err)
-	}
-	logger.Infof("GetUsers1(userIdList []*string) res: %+v", resp)
-}
-
-func callGetUsersMap(refConf config.ReferenceConfig) {
-	resp, err := refConf.GetRPCService().(*generic.GenericService).Invoke(
-		context.TODO(),
-		"GetUsersMap",
-		[]string{"java.util.List"},
-		[]hessian.Object{
-			[]hessian.Object{
-				"001", "002", "003", "004",
-			},
-		},
-	)
-	if err != nil {
-		panic(err)
-	}
-	logger.Infof("GetUserMap(userIdList []*string) res: %+v", resp)
-}
-
-func callQueryUser(refConf config.ReferenceConfig) {
-	resp, err := refConf.GetRPCService().(*generic.GenericService).Invoke(
-		context.TODO(),
-		"queryUser",
-		[]string{"org.apache.dubbo.samples.User"},
-		// the map represents a User object:
-		// &User {
-		// 		ID: "3213",
-		// 		Name: "panty",
-		// 		Age: 25,
-		// 		Time: time.Now(),
-		// }
-		[]hessian.Object{
-			map[string]hessian.Object{
-				"iD":   "3213",
-				"name": "panty",
-				"age":  25,
-				"time": time.Now(),
-			}},
-	)
-	if err != nil {
-		panic(err)
-	}
-	logger.Infof("queryUser(user *User) res: %+v", resp)
-}
-
-func callQueryUsers(refConf config.ReferenceConfig) {
-	var resp, err = refConf.GetRPCService().(*generic.GenericService).Invoke(
-		context.TODO(),
-		"queryUsers",
-		[]string{"java.util.ArrayList"},
-		[]hessian.Object{
-			[]hessian.Object{
-				map[string]hessian.Object{
-					"id":    "3212",
-					"name":  "XavierNiu",
-					"age":   24,
-					"time":  time.Now().Add(4),
-					"class": "org.apache.dubbo.samples.User",
-				},
-				map[string]hessian.Object{
-					"iD":    "3213",
-					"name":  "zhangsan",
-					"age":   21,
-					"time":  time.Now().Add(4),
-					"class": "org.apache.dubbo.samples.User",
-				},
-			},
-		},
-	)
-	if err != nil {
-		panic(err)
-	}
-	logger.Infof("queryUsers(users []*User) res: %+v", resp)
-}
-
-// nolint
-func callQueryAll(refConf config.ReferenceConfig) {
-	resp, err := refConf.GetRPCService().(*generic.GenericService).Invoke(
-		context.TODO(),
-		"queryAll",
-		[]string{},
-		// TODO go-go []hessian.Object{}, go-java []string{}
-		//[]hessian.Object{},
-		[]hessian.Object{},
-	)
-	if err != nil {
-		panic(err)
-	}
-	logger.Infof("queryAll() res: %+v", resp)
-}
-
-func newRefConf(iface, protocol string) config.ReferenceConfig {
-	registryConfig := &config.RegistryConfig{
-		Protocol: "zookeeper",
-		Address:  "127.0.0.1:2181",
-	}
-
-	refConf := config.ReferenceConfig{
-		InterfaceName: iface,
-		Cluster:       "failover",
-		RegistryIDs:   []string{"zk"},
-		Protocol:      protocol,
-		Generic:       "true",
-	}
-
-	rootConfig := config.NewRootConfigBuilder().
-		AddRegistry("zk", registryConfig).
-		Build()
-	if err := config.Load(config.WithRootConfig(rootConfig)); err != nil {
-		panic(err)
-	}
-	_ = refConf.Init(rootConfig)
-	refConf.GenericLoad(appName)
-
-	return refConf
-}
diff --git a/compatibility/generic/default/go-server/cmd/server.go b/compatibility/generic/default/go-server/cmd/server.go
deleted file mode 100644
index 5a249d80..00000000
--- a/compatibility/generic/default/go-server/cmd/server.go
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package main
-
-import (
-	"fmt"
-	"os"
-	"os/signal"
-	"syscall"
-	"time"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/imports"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log/logger"
-)
-
-import (
-	"github.com/apache/dubbo-go-samples/compatibility/generic/default/go-server/pkg"
-)
-
-// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/generic/default/go-server/conf/dubbogo.yml
-func main() {
-	hessian.RegisterPOJO(&pkg.User{})
-	config.SetProviderService(&pkg.User{})
-	if err := config.Load(); err != nil {
-		panic(err)
-	}
-	initSignal()
-}
-
-func initSignal() {
-	signals := make(chan os.Signal, 1)
-	// It is not possible to block SIGKILL or syscall.SIGSTOP
-	signal.Notify(signals, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP,
-		syscall.SIGQUIT, syscall.SIGTERM)
-	for {
-		sig := <-signals
-		logger.Infof("get signal %s", sig.String())
-		switch sig {
-		case syscall.SIGHUP:
-			// reload()
-		default:
-			time.AfterFunc(10*time.Second, func() {
-				logger.Warnf("app exit now by force...")
-				os.Exit(1)
-			})
-
-			// The program exits normally or timeout forcibly exits.
-			fmt.Println("app exit now...")
-			return
-		}
-	}
-}
diff --git a/compatibility/generic/default/go-server/conf/dubbogo.yml b/compatibility/generic/default/go-server/conf/dubbogo.yml
deleted file mode 100644
index 7514f8ed..00000000
--- a/compatibility/generic/default/go-server/conf/dubbogo.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-dubbo:
-  registries:
-    zk:
-      protocol: zookeeper
-      timeout: 3s
-      address: 127.0.0.1:2181
-  protocols:
-    dubbo:
-      name: dubbo
-      port: 20000
-    triple:
-      name: tri
-      port: 20001
-  provider:
-    registry-ids: zk
-    services:
-      UserProvider:
-        serialization: hessian2
-        interface: org.apache.dubbo.samples.UserProvider
-      UserProviderTriple:
-        serialization: hessian2
-        interface: org.apache.dubbo.samples.UserProviderTriple
\ No newline at end of file
diff --git a/compatibility/generic/default/go-server/pkg/init.go b/compatibility/generic/default/go-server/pkg/init.go
deleted file mode 100644
index 42873348..00000000
--- a/compatibility/generic/default/go-server/pkg/init.go
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-)
-
-func init() {
-	config.SetProviderService(new(UserProvider))
-	config.SetProviderService(new(UserProviderTriple))
-	// ------for hessian2------
-	hessian.RegisterPOJO(&User{})
-	hessian.RegisterPOJO(&UserResponse{})
-}
diff --git a/compatibility/generic/default/go-server/pkg/user.go b/compatibility/generic/default/go-server/pkg/user.go
deleted file mode 100644
index 9128b71a..00000000
--- a/compatibility/generic/default/go-server/pkg/user.go
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"time"
-)
-
-var userMap = map[string]*User{
-	"001": {"001", "other-zhangsan", 23, time.Date(1998, 1, 2, 3, 4, 5, 0, time.Local)},
-	"002": {"002", "other-lisi", 25, time.Date(1996, 1, 2, 3, 4, 5, 0, time.Local)},
-	"003": {"003", "other-lily", 28, time.Date(1993, 1, 2, 3, 4, 5, 0, time.Local)},
-	"004": {"004", "other-lisa", 36, time.Date(1985, 1, 2, 3, 4, 5, 0, time.Local)},
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-func (u *User) JavaClassName() string {
-	return "org.apache.dubbo.samples.User"
-}
diff --git a/compatibility/generic/default/go-server/pkg/user_provider.go b/compatibility/generic/default/go-server/pkg/user_provider.go
deleted file mode 100644
index 03692e2a..00000000
--- a/compatibility/generic/default/go-server/pkg/user_provider.go
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	"strconv"
-	"time"
-)
-
-import (
-	"github.com/dubbogo/gost/log/logger"
-)
-
-type UserProvider struct {
-}
-
-func (u *UserProvider) GetUser1(_ context.Context, userID string) (*User, error) {
-	logger.Infof("req:%#v", userID)
-	rsp := User{userID, "Joe", 48, time.Now()}
-	logger.Infof("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProvider) GetUser2(_ context.Context, userID string, name string) (*User, error) {
-	logger.Infof("req:%#v, %#v", userID, name)
-	rsp := User{userID, name, 48, time.Now()}
-	logger.Infof("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProvider) GetUser3(_ context.Context, userCode int) (*User, error) {
-	logger.Infof("req:%#v", userCode)
-	rsp := User{strconv.Itoa(userCode), "Alex Stocks", 18, time.Now()}
-	logger.Infof("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProvider) GetUser4(_ context.Context, userCode int, name string) (*User, error) {
-	logger.Infof("req:%#v, %#v", userCode, name)
-	rsp := User{strconv.Itoa(userCode), name, 18, time.Now()}
-	logger.Infof("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProvider) GetOneUser(_ context.Context) (*User, error) {
-	return &User{
-		ID:   "1000",
-		Name: "xavierniu",
-		Age:  24,
-		Time: time.Now(),
-	}, nil
-}
-
-func (u *UserProvider) GetUsers(_ context.Context, userIdList []string) (*UserResponse, error) {
-	logger.Infof("req:%#v", userIdList)
-	var users []*User
-	for _, i := range userIdList {
-		users = append(users, userMap[i])
-	}
-	return &UserResponse{
-		Users: users,
-	}, nil
-}
-
-func (u *UserProvider) GetUsersMap(_ context.Context, userIdList []string) (map[string]*User, error) {
-	logger.Infof("req:%#v", userIdList)
-	var users = make(map[string]*User)
-	for _, i := range userIdList {
-		users[i] = userMap[i]
-	}
-	return users, nil
-}
-
-func (u *UserProvider) QueryUser(_ context.Context, user *User) (*User, error) {
-	logger.Infof("req1:%#v", user)
-	rsp := User{user.ID, user.Name, user.Age, time.Now()}
-	logger.Infof("rsp1:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProvider) QueryUsers(_ context.Context, users []*User) (*UserResponse, error) {
-	return &UserResponse{
-		Users: users,
-	}, nil
-}
-
-func (u *UserProvider) QueryAll(_ context.Context) (*UserResponse, error) {
-	users := []*User{
-		{
-			ID:   "001",
-			Name: "Joe",
-			Age:  18,
-			Time: time.Now(),
-		},
-		{
-			ID:   "002",
-			Name: "Wen",
-			Age:  20,
-			Time: time.Now(),
-		},
-	}
-
-	return &UserResponse{
-		Users: users,
-	}, nil
-}
-
-func (u *UserProvider) MethodMapper(_ context.Context) map[string]string {
-	return map[string]string{
-		"QueryUser":  "queryUser",
-		"QueryUsers": "queryUsers",
-		"QueryAll":   "queryAll",
-	}
-}
-
-func (u *UserProvider) Reference() string {
-	return "UserProvider"
-}
diff --git a/compatibility/generic/default/go-server/pkg/user_provider_triple.go b/compatibility/generic/default/go-server/pkg/user_provider_triple.go
deleted file mode 100644
index 0055e66c..00000000
--- a/compatibility/generic/default/go-server/pkg/user_provider_triple.go
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-import (
-	"context"
-	"strconv"
-	"time"
-)
-
-import (
-	"github.com/dubbogo/gost/log/logger"
-)
-
-type UserProviderTriple struct{}
-
-func (u *UserProviderTriple) GetUser1(_ context.Context, userID string) (*User, error) {
-	logger.Infof("req:%#v", userID)
-	rsp := User{userID, "Joe", 48, time.Now()}
-	logger.Infof("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProviderTriple) GetUser2(_ context.Context, userID string, name string) (*User, error) {
-	logger.Infof("req:%#v, %#v", userID, name)
-	rsp := User{userID, name, 48, time.Now()}
-	logger.Infof("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProviderTriple) GetUser3(_ context.Context, userCode int) (*User, error) {
-	logger.Infof("req:%#v", userCode)
-	rsp := User{strconv.Itoa(userCode), "Alex Stocks", 18, time.Now()}
-	logger.Infof("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProviderTriple) GetUser4(_ context.Context, userCode int, name string) (*User, error) {
-	logger.Infof("req:%#v, %#v", userCode, name)
-	rsp := User{strconv.Itoa(userCode), name, 18, time.Now()}
-	logger.Infof("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProviderTriple) GetOneUser(_ context.Context) (*User, error) {
-	return &User{
-		ID:   "1000",
-		Name: "xavierniu",
-		Age:  24,
-		Time: time.Now(),
-	}, nil
-}
-
-func (u *UserProviderTriple) GetUsers(_ context.Context, userIdList []string) (*UserResponse, error) {
-	logger.Infof("req:%#v", userIdList)
-	var users []*User
-	for _, i := range userIdList {
-		users = append(users, userMap[i])
-	}
-	return &UserResponse{
-		Users: users,
-	}, nil
-}
-
-func (u *UserProviderTriple) GetUsersMap(_ context.Context, userIdList []string) (map[string]*User, error) {
-	logger.Infof("req:%#v", userIdList)
-	var users = make(map[string]*User)
-	for _, i := range userIdList {
-		users[i] = userMap[i]
-	}
-	return users, nil
-}
-
-func (u *UserProviderTriple) QueryUser(_ context.Context, user *User) (*User, error) {
-	logger.Infof("req1:%#v", user)
-	rsp := User{user.ID, user.Name, user.Age, time.Now()}
-	logger.Infof("rsp1:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *UserProviderTriple) QueryUsers(_ context.Context, users []*User) (*UserResponse, error) {
-	return &UserResponse{
-		Users: users,
-	}, nil
-}
-
-func (u *UserProviderTriple) QueryAll(_ context.Context) (*UserResponse, error) {
-	users := []*User{
-		{
-			ID:   "001",
-			Name: "Joe",
-			Age:  18,
-			Time: time.Now(),
-		},
-		{
-			ID:   "002",
-			Name: "Wen",
-			Age:  20,
-			Time: time.Now(),
-		},
-	}
-
-	return &UserResponse{
-		Users: users,
-	}, nil
-}
-
-func (u *UserProviderTriple) MethodMapper(_ context.Context) map[string]string {
-	return map[string]string{
-		"QueryUser":  "queryUser",
-		"QueryUsers": "queryUsers",
-		"QueryAll":   "queryAll",
-	}
-}
-
-func (u *UserProviderTriple) Reference() string {
-	return "UserProviderTriple"
-}
diff --git a/compatibility/generic/default/go-server/pkg/user_response.go b/compatibility/generic/default/go-server/pkg/user_response.go
deleted file mode 100644
index 3d7a3c90..00000000
--- a/compatibility/generic/default/go-server/pkg/user_response.go
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pkg
-
-type UserResponse struct {
-	Users []*User
-}
-
-func (u *UserResponse) JavaClassName() string {
-	return "org.apache.dubbo.samples.UserResponse"
-}
diff --git a/compatibility/generic/default/java-client/pom.xml b/compatibility/generic/default/java-client/pom.xml
deleted file mode 100644
index e033267c..00000000
--- a/compatibility/generic/default/java-client/pom.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<?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>org.apache.dubbo</groupId>
-    <version>1.0-SNAPSHOT</version>
-    <artifactId>generic-dubbo-java-client</artifactId>
-
-    <properties>
-        <source.level>1.8</source.level>
-        <target.level>1.8</target.level>
-        <dubbo.version>3.0.12</dubbo.version>
-        <junit.version>4.13.1</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.16.3</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-dependencies-zookeeper</artifactId>
-            <version>${dubbo.version}</version>
-            <type>pom</type>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.apache.zookeeper</groupId>
-                    <artifactId>zookeeper</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.zookeeper</groupId>
-            <artifactId>zookeeper</artifactId>
-            <version>3.4.14</version>
-        </dependency>
-        <dependency>
-            <groupId>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.17.3: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/compatibility/generic/default/java-client/run.sh b/compatibility/generic/default/java-client/run.sh
deleted file mode 100755
index e3651a06..00000000
--- a/compatibility/generic/default/java-client/run.sh
+++ /dev/null
@@ -1 +0,0 @@
-mvn -q -e clean compile exec:java -Dexec.mainClass="org.apache.dubbo.samples.ApiConsumer"
\ No newline at end of file
diff --git a/compatibility/generic/default/java-client/src/main/java/org/apache/dubbo/samples/ApiConsumer.java b/compatibility/generic/default/java-client/src/main/java/org/apache/dubbo/samples/ApiConsumer.java
deleted file mode 100644
index 7b6c62eb..00000000
--- a/compatibility/generic/default/java-client/src/main/java/org/apache/dubbo/samples/ApiConsumer.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo.samples;
-
-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.rpc.service.GenericService;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.lang.Integer;
-
-public class ApiConsumer {
-    private static final Logger logger = LoggerFactory.getLogger("userLogger"); // Output to com.dubbogo.user-server.log
-
-    private static GenericService userProvider;
-    private static GenericService userProviderTriple;
-    private static GenericService genericService;
-
-    public static void main(String[] args) {
-        initUserProvider();
-        initUserProviderTriple();
-        
-        genericService = userProvider;
-        call();
-        
-        genericService = userProviderTriple;
-        call();
-    }
-
-    private static void initUserProvider() {
-        logger.info("\n\n\nstart to init config\n\n\n");
-        ApplicationConfig applicationConfig = new ApplicationConfig();
-        ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();
-        applicationConfig.setName("user-info-server");
-        reference.setApplication(applicationConfig);
-        RegistryConfig registryConfig = new RegistryConfig();
-        registryConfig.setAddress("zookeeper://127.0.0.1:2181");
-        reference.setRegistry(registryConfig);
-        reference.setGeneric(true);
-        reference.setInterface("org.apache.dubbo.samples.UserProvider");
-        userProvider = reference.get();
-    }
-
-    private static void initUserProviderTriple() {
-        logger.info("\n\n\nstart to init config\n\n\n");
-        ApplicationConfig applicationConfig = new ApplicationConfig();
-        ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();
-        applicationConfig.setName("user-info-server");
-        reference.setApplication(applicationConfig);
-        RegistryConfig registryConfig = new RegistryConfig();
-        registryConfig.setAddress("zookeeper://127.0.0.1:2181");
-        reference.setRegistry(registryConfig);
-        reference.setProtocol(CommonConstants.TRIPLE);
-        reference.setCheck(false);
-        reference.setGeneric(true);
-        reference.setInterface("org.apache.dubbo.samples.UserProviderTriple");
-        userProviderTriple = reference.get();
-    }
-    
-    public static void call() {
-        callGetUser();
-        callGetOneUser();
-        callGetUsers();
-        callGetUsersMap();
-        callQueryUser();
-        callQueryUsers();
-        callQueryAll();
-    }
-
-    private static void callGetUser() {
-        logger.info("\n\n\nCall GetUser");
-        logger.info("Start to generic invoke");
-        Object result;
-
-        result = genericService.$invoke("GetUser1", new String[]{"java.lang.String"}, new Object[]{"A003"});
-        logger.info("\n\n\n" + "GetUser1(String userId) " + "res: " + result + "\n\n\n");
-
-        result = genericService.$invoke("GetUser2", new String[]{"java.lang.String", "java.lang.String"}, new Object[]{"A003", "lily"});
-        logger.info("\n\n\n" + "GetUser2(String userId, String name) " + "res: " + result + "\n\n\n");
-
-        result = genericService.$invoke("GetUser3", new String[]{"int"}, new Object[]{1});
-        logger.info("\n\n\n" + "GetUser3(int userCode) " + "res: " + result + "\n\n\n");
-
-        result = genericService.$invoke("GetUser4", new String[]{"int", "java.lang.String"}, new Object[]{1, "zhangsan"});
-        logger.info("\n\n\n" + "GetUser4(int userCode, String name) " + "res: " + result + "\n\n\n");
-    }
-
-    private static void callGetOneUser() {
-        logger.info("\n\n\nCall GetOneUser");
-        logger.info("Start to generic invoke");
-
-        Object result = genericService.$invoke("GetOneUser", new String[]{}, new Object[]{});
-        logger.info("\n\n\n" + "GetOneUser() " + "res: " + result + "\n\n\n");
-    }
-
-    private static void callGetUsers() {
-        logger.info("\n\n\nCall GetUsers");
-        logger.info("Start to generic invoke");
-
-        List<String> userIdList = new ArrayList<String>();
-        userIdList.add("001");
-        userIdList.add("002");
-        userIdList.add("003");
-        userIdList.add("004");
-
-        Object result = genericService.$invoke("GetUsers", new String[]{"java.util.List"}, new Object[]{userIdList});
-        logger.info("\n\n\n" + "GetUsers(List<String> userIdList) " + "res: " + result + "\n\n\n");
-    }
-
-    private static void callGetUsersMap() {
-        logger.info("\n\n\nCall GetUsersMap");
-        logger.info("Start to generic invoke");
-        Object result;
-
-        List<String> userIdList = new ArrayList<String>();
-        userIdList.add("001");
-        userIdList.add("002");
-        userIdList.add("003");
-        userIdList.add("004");
-
-        result = genericService.$invoke("GetUsersMap", new String[]{"java.util.List"}, new Object[]{userIdList});
-        logger.info("\n\n\n" + "GetUserMap(List<String> userIdList) " + "res: " + result + "\n\n\n");
-    }
-
-    private static void callQueryUser() {
-        logger.info("\n\n\nCall QueryUser");
-        logger.info("Start to generic invoke");
-
-        User user = new User();
-        user.setName("panty");
-        user.setId("3213");
-        user.setAge(25);
-        Object result = genericService.$invoke("queryUser", new String[]{"org.apache.dubbo.samples.User"}, new Object[]{user});
-        logger.info("\n\n\n" + "queryUser(User user) " + "res: " + result + "\n\n\n");
-    }
-
-    private static void callQueryUsers() {
-        logger.info("\n\n\nCall QueryUsers");
-        logger.info("Start to generic invoke");
-
-        ArrayList<Map> userArr = new ArrayList<>();
-        Map<Object, Object> userMap1 = new HashMap<>();
-        userMap1.put("id", "3212");
-        userMap1.put("name", "XavierNiu");
-        userMap1.put("age", 24);
-        Map<Object, Object> userMap2 = new HashMap<>();
-        userMap2.put("id", "3213");
-        userMap2.put("name", "zhangsan");
-        userMap2.put("age", 21);
-        userArr.add(userMap1);
-        userArr.add(userMap2);
-
-        Object result = genericService.$invoke("queryUsers", new String[]{"java.util.ArrayList"}, new Object[]{userArr});
-        logger.info("\n\n\n" + "queryUsers(ArrayList<User> userList) " + "res: " + result + "\n\n\n");
-    }
-
-    private static void callQueryAll() {
-        logger.info("\n\n\nCall queryAll");
-        logger.info("Start to generic invoke");
-
-        Object result = genericService.$invoke("queryAll", new String[]{}, new Object[]{});
-        logger.info("\n\n\n" + "queryAll() " + "res: " + result + "\n\n\n");
-    }
-}
diff --git a/compatibility/generic/default/java-client/src/main/java/org/apache/dubbo/samples/User.java b/compatibility/generic/default/java-client/src/main/java/org/apache/dubbo/samples/User.java
deleted file mode 100644
index b98af585..00000000
--- a/compatibility/generic/default/java-client/src/main/java/org/apache/dubbo/samples/User.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo.samples;
-
-import java.util.Date;
-import java.io.Serializable;
-
-public class User implements Serializable {
-
-    private String id;
-
-    private String name;
-
-    private int age;
-
-    private Date time = new Date();
-
-
-    public User() {
-    }
-
-
-    public User(String id, String name, int age) {
-        this.id = id;
-        this.name = name;
-        this.age = age;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public int getAge() {
-        return age;
-    }
-
-    public void setAge(int age) {
-        this.age = age;
-    }
-
-    public Date getTime() {
-        return time;
-    }
-
-    public void setTime(Date time) {
-        this.time = time;
-    }
-
-
-}
diff --git a/compatibility/generic/default/java-client/src/main/resources/log4j.properties b/compatibility/generic/default/java-client/src/main/resources/log4j.properties
deleted file mode 100644
index 06bcb344..00000000
--- a/compatibility/generic/default/java-client/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-## Logger configure file for myproject
-log.dir=logs/
-datestamp=yyyy-MM-dd/HH:mm:ss.SSS
-
-log4j.rootLogger=DEBUG, file, console
-
-log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.file.threshold=DEBUG
-log4j.appender.file.File=${log.dir}/log4j.log
-log4j.appender.file.DatePattern=-yyyyMMddHH
-log4j.appender.file.ImmediateFlush=true
-log4j.appender.file.Append=true
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{${datestamp}} %5p: %l - %m%n
-
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.Threshold=DEBUG
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{${datestamp}} %5p: %l - %m%n
diff --git a/compatibility/generic/default/java-server/pom.xml b/compatibility/generic/default/java-server/pom.xml
deleted file mode 100644
index 5d1a213b..00000000
--- a/compatibility/generic/default/java-server/pom.xml
+++ /dev/null
@@ -1,164 +0,0 @@
-<?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>org.apache.dubbo</groupId>
-    <version>1.0-SNAPSHOT</version>
-    <artifactId>generic-dubbo-java-server</artifactId>
-
-    <properties>
-        <source.level>1.8</source.level>
-        <target.level>1.8</target.level>
-        <dubbo.version>3.0.12</dubbo.version>
-        <junit.version>4.13.1</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.16.3</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-dependencies-zookeeper</artifactId>
-            <version>${dubbo.version}</version>
-            <type>pom</type>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.apache.zookeeper</groupId>
-                    <artifactId>zookeeper</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.zookeeper</groupId>
-            <artifactId>zookeeper</artifactId>
-            <version>3.4.14</version>
-        </dependency>
-        <dependency>
-            <groupId>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>
-        <defaultGoal>package</defaultGoal>
-        <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.17.3: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/compatibility/generic/default/java-server/run.sh b/compatibility/generic/default/java-server/run.sh
deleted file mode 100755
index b96d7d84..00000000
--- a/compatibility/generic/default/java-server/run.sh
+++ /dev/null
@@ -1 +0,0 @@
-mvn -q -e clean compile exec:java -Dexec.mainClass="org.apache.dubbo.samples.ApiProvider"
\ No newline at end of file
diff --git a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/ApiProvider.java b/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/ApiProvider.java
deleted file mode 100644
index bc5a916e..00000000
--- a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/ApiProvider.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-
-package org.apache.dubbo.samples;
-
-import org.apache.dubbo.common.constants.CommonConstants;
-import org.apache.dubbo.config.*;
-
-import java.util.concurrent.CountDownLatch;
-
-public class ApiProvider {
-    public static void main(String[] args) throws InterruptedException {
-        exportUserProvider();
-        exportUserProviderTriple();
-        System.out.println("dubbo service started");
-        new CountDownLatch(1).await();
-    }
-    
-    public static void exportUserProvider() {
-        ServiceConfig<UserProvider> service = new ServiceConfig<UserProvider>();
-        service.setInterface(UserProvider.class);
-        service.setRef(new UserProviderImpl());
-        service.setProtocol(new ProtocolConfig(CommonConstants.DUBBO, 20000));
-        service.setApplication(new ApplicationConfig("user-info-server"));
-        service.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
-        service.export();
-    }
-
-    public static void exportUserProviderTriple() {
-        ServiceConfig<UserProviderTriple> service = new ServiceConfig<UserProviderTriple>();
-        service.setInterface(UserProviderTriple.class);
-        service.setRef(new UserProviderTripleImpl());
-        service.setProtocol(new ProtocolConfig(CommonConstants.TRIPLE, 50051));
-        service.setSerialization("hessian2");
-        service.setApplication(new ApplicationConfig("user-info-server"));
-        service.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
-        service.export();
-    }
-}
diff --git a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/Gender.java b/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/Gender.java
deleted file mode 100644
index a0383fba..00000000
--- a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/Gender.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo.samples;
-
-public enum Gender {
-    MAN,
-    WOMAN
-}
diff --git a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/Response.java b/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/Response.java
deleted file mode 100644
index 8d2cf801..00000000
--- a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/Response.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo.samples;
-
-import java.io.Serializable;
-
-public final class Response<T> implements Serializable {
-    private static final long serialVersionUID = 3727205004706510648L;
-    public static final Integer OK = 200;
-    public static final Integer ERR = 500;
-    private Integer Status;
-    private String Err;
-    private T Data;
-
-    public Response() {
-    }
-
-    public static <T> Response<T> ok() {
-        Response r = new Response();
-        r.Status = OK;
-        return r;
-    }
-
-    public static <T> Response<T> ok(Object Data) {
-        Response r = new Response();
-        r.Status = OK;
-        r.Data = Data;
-        return r;
-    }
-
-    public static <T> Response<T> notOk(String Err) {
-        Response r = new Response();
-        r.Status = ERR;
-        r.Err = Err;
-        return r;
-    }
-
-    public static <T> Response<T> notOk(Integer Status, String Err) {
-        Response r = new Response();
-        r.Status = Status;
-        r.Err = Err;
-        return r;
-    }
-
-//    public Boolean isSuccess() {
-//        return Objects.equals(this.Status, OK);
-//    }
-
-    public Integer getStatus() {
-        return this.Status;
-    }
-
-    public void setStatus(Integer Status) {
-        this.Status = Status;
-    }
-
-    public String getErr() {
-        return this.Err;
-    }
-
-    public void setErr(String Err) {
-        this.Err = Err;
-    }
-
-    public T getData() {
-        return this.Data;
-    }
-
-    public void setData(T Data) {
-        this.Status = OK;
-        this.Data = Data;
-    }
-
-    public String toString() {
-        return "Response{Status=" + this.Status + ", Err='" + this.Err + '\'' + ", Data=" + this.Data + '}';
-    }
-}
\ No newline at end of file
diff --git a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/User.java b/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/User.java
deleted file mode 100644
index 4b2f179e..00000000
--- a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/User.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo.samples;
-
-import java.io.Serializable;
-import java.util.Date;
-
-public class User implements Serializable {
-
-    private String id;
-
-    private String name;
-
-    private int age;
-
-    private Date time = new Date();
-
-    private Gender sex = Gender.MAN;
-
-    public User() {
-    }
-
-    public User(String id, String name, int age) {
-        this.id = id;
-        this.name = name;
-        this.age = age;
-    }
-
-    public User(String id, String name, int age, Date time, Gender sex) {
-        this.id = id;
-        this.name = name;
-        this.age = age;
-        this.time = time;
-        this.sex = sex;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public int getAge() {
-        return age;
-    }
-
-    public void setAge(int age) {
-        this.age = age;
-    }
-
-    public Date getTime() {
-        return time;
-    }
-
-    public void setTime(Date time) {
-        this.time = time;
-    }
-
-    public Gender getSex() {
-        return sex;
-    }
-
-    public void setSex(Gender sex) {
-        this.sex = sex;
-    }
-
-    public String toString() {
-        return "User{id:" + id + ", name:" + name + ", age:" + age + ", time:" + time + ", gender:" + sex + "}";
-    }
-}
diff --git a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/UserProvider.java b/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/UserProvider.java
deleted file mode 100644
index d3df82ac..00000000
--- a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/UserProvider.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo.samples;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-//import org.apache.dubbo.rpc.filter.GenericFilter;
-
-public interface UserProvider {
-
-    boolean isLimit(Gender gender, String name);
-
-    User GetUser1(String userId); // the first alpha is Upper case to compatible with golang.
-
-    User GetUser2(String userId, String name);
-
-    User GetUser3(int userCode);
-
-    User GetUser4(int userCode, String name);
-
-    User GetOneUser();
-
-    List<User> GetUsers(List<String> userIdList);
-
-    Map<String, User> GetUsersMap(List<String> userIdList);
-
-    User queryUser(User user);
-
-    List<User> queryUsers(ArrayList<User> userObjectList);
-
-    Map<String, User> queryAll();
-
-    User GetErr(String userId) throws Exception;
-
-    int Calc(int a, int b);
-
-    Response<Integer> Sum(int a, int b);
-}
diff --git a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/UserProviderImpl.java b/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/UserProviderImpl.java
deleted file mode 100644
index 6c2f5a4c..00000000
--- a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/UserProviderImpl.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo.samples;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.*;
-
-public class UserProviderImpl implements UserProvider {
-    // private static final Logger logger = LoggerFactory.getLogger(getClass()); // Only output to dubbo's log(logs/server.log)
-    private static final Logger LOG = LoggerFactory.getLogger("userLogger"); // Output to com.dubbogo.user-server.log
-    private Map<String, User> userMap = new HashMap<String, User>();
-
-    UserProviderImpl() {
-        userMap.put("001", new User("001", "other-zhangsan", 18, new Date(1998, 1, 2, 3, 4, 5), Gender.MAN));
-        userMap.put("002", new User("002", "other-lisi", 20, new Date(1996, 1, 2, 3, 4, 5), Gender.MAN));
-        userMap.put("003", new User("003", "other-lily", 23, new Date(1993, 1, 2, 3, 4, 5), Gender.WOMAN));
-        userMap.put("004", new User("004", "other-lisa", 32, new Date(1985, 1, 2, 3, 4, 5), Gender.WOMAN));
-    }
-
-    public boolean isLimit(Gender gender, String name) {
-        LOG.info(String.format("input gender=%sand name=%s", gender, name));
-        return Gender.MAN == gender;
-    }
-
-    public User GetUser1(String userId) {
-        LOG.info("input userId = " + userId);
-        return new User(userId, "Joe", 48);
-    }
-
-    public User GetUser2(String userId, String name) {
-        LOG.info(String.format("input userId=%s and name=%s", userId, name));
-        return new User(userId, name, 48);
-    }
-
-    public User GetUser3(int userCode) {
-        LOG.info("input userCode = " + userCode);
-        return new User(String.valueOf(userCode), "Alex Stocks", 18);
-    }
-
-    public User GetUser4(int userCode, String name) {
-        LOG.info(String.format("input userCode=%s and name=%s", userCode, name));
-        return new User(String.valueOf(userCode), name, 18);
-    }
-
-    public User GetOneUser() {
-        return new User("1000", "xavierniu", 24);
-    }
-
-    public List<User> GetUsers(List<String> userIdList) {
-        Iterator it = userIdList.iterator();
-        List<User> userList = new ArrayList<User>();
-        LOG.warn("@userIdList size:" + userIdList.size());
-
-        while (it.hasNext()) {
-            String id = (String) (it.next());
-            LOG.info("GetUsers(@uid:" + id + ")");
-            if (userMap.containsKey(id)) {
-                userList.add(userMap.get(id));
-                LOG.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
-            }
-        }
-
-        return userList;
-    }
-
-    public Map<String, User> GetUsersMap(List<String> userIdList) {
-        Iterator it = userIdList.iterator();
-        Map<String, User> map = new HashMap<String, User>();
-        LOG.warn("@userIdList size:" + userIdList.size());
-
-        while (it.hasNext()) {
-            String id = (String) (it.next());
-            LOG.info("GetUsers(@uid:" + id + ")");
-            if (userMap.containsKey(id)) {
-                map.put(id, userMap.get(id));
-                LOG.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
-            }
-        }
-
-        return map;
-    }
-
-    public User queryUser(User user) {
-        LOG.info("input com.dubbogo.user = " + user);
-        return new User(user.getId(), "get:" + user.getName(), user.getAge() + 18);
-    }
-
-    public List<User> queryUsers(ArrayList<User> userObjectList) {
-        LOG.info("input com.dubbogo.userList = " + userObjectList);
-        List<User> userList = new ArrayList<User>();
-        for (User user : userObjectList) {
-            userList.add(new User(user.getId(), "get:" + user.getName(), user.getAge() + 18));
-        }
-
-        return userList;
-    }
-
-    public Map<String, User> queryAll() {
-        LOG.info("input");
-        Map<String, User> map = new HashMap<String, User>();
-        map.put("001", new User("001", "Joe", 18));
-        map.put("002", new User("002", "Wen", 20));
-
-        return map;
-    }
-
-    public User GetErr(String userId) throws Exception {
-        throw new Exception("exception");
-    }
-
-    public int Calc(int a, int b) {
-        return a + b + 100;
-    }
-
-    public Response<Integer> Sum(int a, int b) {
-        return Response.ok(a + b);
-    }
-}
diff --git a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/UserProviderTriple.java b/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/UserProviderTriple.java
deleted file mode 100644
index 7db95b7e..00000000
--- a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/UserProviderTriple.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-
-package org.apache.dubbo.samples;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Created by liuyuecai on 2021/11/23.
- */
-public interface UserProviderTriple {
-
-    boolean isLimit(Gender gender, String name);
-
-    User GetUser1(String userId); // the first alpha is Upper case to compatible with golang.
-
-    User GetUser2(String userId, String name);
-
-    User GetUser3(int userCode);
-
-    User GetUser4(int userCode, String name);
-
-    User GetOneUser();
-
-    List<User> GetUsers(List<String> userIdList);
-
-    Map<String, User> GetUsersMap(List<String> userIdList);
-
-    User queryUser(User user);
-
-    List<User> queryUsers(ArrayList<User> userObjectList);
-
-    Map<String, User> queryAll();
-
-    User GetErr(String userId) throws Exception;
-
-    int Calc(int a, int b);
-
-    Response<Integer> Sum(int a, int b);
-}
diff --git a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/UserProviderTripleImpl.java b/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/UserProviderTripleImpl.java
deleted file mode 100644
index 8be1908c..00000000
--- a/compatibility/generic/default/java-server/src/main/java/org/apache/dubbo/samples/UserProviderTripleImpl.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo.samples;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.*;
-
-public class UserProviderTripleImpl implements UserProviderTriple {
-    // private static final Logger logger = LoggerFactory.getLogger(getClass()); // Only output to dubbo's log(logs/server.log)
-    private static final Logger LOG = LoggerFactory.getLogger("userLogger"); // Output to com.dubbogo.user-server.log
-    private Map<String, User> userMap = new HashMap<String, User>();
-
-    UserProviderTripleImpl() {
-        userMap.put("001", new User("001", "other-zhangsan", 18, new Date(1998, 1, 2, 3, 4, 5), Gender.MAN));
-        userMap.put("002", new User("002", "other-lisi", 20, new Date(1996, 1, 2, 3, 4, 5), Gender.MAN));
-        userMap.put("003", new User("003", "other-lily", 23, new Date(1993, 1, 2, 3, 4, 5), Gender.WOMAN));
-        userMap.put("004", new User("004", "other-lisa", 32, new Date(1985, 1, 2, 3, 4, 5), Gender.WOMAN));
-    }
-
-    public boolean isLimit(Gender gender, String name) {
-        LOG.info(String.format("input gender=%sand name=%s", gender, name));
-        return Gender.MAN == gender;
-    }
-
-    public User GetUser1(String userId) {
-        LOG.info("input userId = " + userId);
-        return new User(userId, "Joe", 48);
-    }
-
-    public User GetUser2(String userId, String name) {
-        LOG.info(String.format("input userId=%s and name=%s", userId, name));
-        return new User(userId, name, 48);
-    }
-
-    public User GetUser3(int userCode) {
-        LOG.info("input userCode = " + userCode);
-        return new User(String.valueOf(userCode), "Alex Stocks", 18);
-    }
-
-    public User GetUser4(int userCode, String name) {
-        LOG.info(String.format("input userCode=%s and name=%s", userCode, name));
-        return new User(String.valueOf(userCode), name, 18);
-    }
-
-    public User GetOneUser() {
-        return new User("1000", "xavierniu", 24);
-    }
-
-    public List<User> GetUsers(List<String> userIdList) {
-        Iterator it = userIdList.iterator();
-        List<User> userList = new ArrayList<User>();
-        LOG.warn("@userIdList size:" + userIdList.size());
-
-        while (it.hasNext()) {
-            String id = (String) (it.next());
-            LOG.info("GetUsers(@uid:" + id + ")");
-            if (userMap.containsKey(id)) {
-                userList.add(userMap.get(id));
-                LOG.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
-            }
-        }
-
-        return userList;
-    }
-
-    public Map<String, User> GetUsersMap(List<String> userIdList) {
-        Iterator it = userIdList.iterator();
-        Map<String, User> map = new HashMap<String, User>();
-        LOG.warn("@userIdList size:" + userIdList.size());
-
-        while (it.hasNext()) {
-            String id = (String) (it.next());
-            LOG.info("GetUsers(@uid:" + id + ")");
-            if (userMap.containsKey(id)) {
-                map.put(id, userMap.get(id));
-                LOG.info("id:" + id + ", com.dubbogo.user:" + userMap.get(id));
-            }
-        }
-
-        return map;
-    }
-
-    public User queryUser(User user) {
-        LOG.info("input com.dubbogo.user = " + user);
-        return new User(user.getId(), "get:" + user.getName(), user.getAge() + 18);
-    }
-
-    public List<User> queryUsers(ArrayList<User> userObjectList) {
-        LOG.info("input com.dubbogo.userList = " + userObjectList);
-        List<User> userList = new ArrayList<User>();
-        for (User user : userObjectList) {
-            userList.add(new User(user.getId(), "get:" + user.getName(), user.getAge() + 18));
-        }
-
-        return userList;
-    }
-
-    public Map<String, User> queryAll() {
-        LOG.info("input");
-        Map<String, User> map = new HashMap<String, User>();
-        map.put("001", new User("001", "Joe", 18));
-        map.put("002", new User("002", "Wen", 20));
-
-        return map;
-    }
-
-    public User GetErr(String userId) throws Exception {
-        throw new Exception("exception");
-    }
-
-    public int Calc(int a, int b) {
-        return a + b + 100;
-    }
-
-    public Response<Integer> Sum(int a, int b) {
-        return Response.ok(a + b);
-    }
-}
diff --git a/compatibility/generic/default/java-server/src/main/resources/log4j.properties b/compatibility/generic/default/java-server/src/main/resources/log4j.properties
deleted file mode 100644
index 806e33db..00000000
--- a/compatibility/generic/default/java-server/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-## Logger configure file for myproject
-log.dir=logs/
-datestamp=yyyy-MM-dd/HH:mm:ss.SSS
-
-log4j.rootLogger=DEBUG, file, console
-
-log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.file.threshold=DEBUG
-log4j.appender.file.File=${log.dir}/log4j.log
-log4j.appender.file.DatePattern=-yyyyMMddHH
-log4j.appender.file.ImmediateFlush=true
-log4j.appender.file.Append=true
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{${datestamp}} %5p: %l - %m%n
-
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.Threshold=DEBUG
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{${datestamp}} %5p: %l - %m%n
-
diff --git a/compatibility/polaris/router/README-zh.md b/compatibility/polaris/router/README-zh.md
deleted file mode 100644
index be48668d..00000000
--- a/compatibility/polaris/router/README-zh.md
+++ /dev/null
@@ -1,121 +0,0 @@
-# Dubbo Go & Polaris Router Example
-
-[English](README.md) | 中文
-
-## 使用服务路由功能
-
-在 dubbogo 中快速体验北极星的服务路由能力
-
-## 北极星服务端安装
-
-[北极星服务端单机版本安装文档](https://polarismesh.cn/docs/%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%AE%89%E8%A3%85/%E5%8D%95%E6%9C%BA%E7%89%88%E5%AE%89%E8%A3%85/)
-
-[北极星服务端集群版本安装文档](https://polarismesh.cn/docs/%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%AE%89%E8%A3%85/%E9%9B%86%E7%BE%A4%E7%89%88%E5%AE%89%E8%A3%85/)
-
-## 如何使用
-
-[北极星服务路由使用文档](https://polarismesh.cn/docs/%E5%8C%97%E6%9E%81%E6%98%9F%E6%98%AF%E4%BB%80%E4%B9%88/%E5%8A%9F%E8%83%BD%E7%89%B9%E6%80%A7/%E6%B5%81%E9%87%8F%E7%AE%A1%E7%90%86/#%E5%8A%A8%E6%80%81%E8%B7%AF%E7%94%B1)
-
-### dubbogo.yaml 配置文件
-
-在使用 PolarisMesh 的服务路由能力时,需要先启用 PolarisMesh 在 dubbogo 中的注册发现功能。
-
-```yaml
-dubbo:
-  registries:
-    polarisMesh:
-      protocol: polaris
-      address: ${北极星服务端IP}:8091
-      namespace: ${北极星命名空间信息}
-      token: ${北极星资源鉴权 token}   # 如果北极星服务端开启了针对客户端的鉴权,则需要配置该参数
-  provider:
-    services:
-      UserProvider:
-        interface: org.apache.dubbo.UserProvider.Test
-```
-
-### 如何配置服务路由参数
-
-dubbogo 中的 PolarisMesh PriorityRouter 扩展点实现,能够根据用户配置的服务路由规则,自动的从当前 RPC 调用上下文以及请求信息中识别出需要参与服务路由的请求标签信息
-
-![](images/dubbogo-route-rule-prod.png)
-![](images/dubbogo-route-rule-pre.png)
-![](images/dubbogo-route-rule-dev.png)
-
-- 请求匹配规则为 **请求参数(QUERY)**
-  - 标签来源: RPC 调用中方法的入参,即 Invoaction.Arguments()
-  - 标签键规则
-    - 方法仅有一个入参: param.$.${fieldName}, **param.** 为固定前缀,后面的表达式为标准的 JSONPath expressions,[参考文档](https://goessner.net/articles/JsonPath/)
-    - 方法有多个参数: param[${index}].$.${fieldName}, **param[${index}].** 为固定前缀,${index} 代表是方法入参中的第几个参数,下标起始位置从 0 开始;后面的表达式为标准的 JSONPath expressions,[参考文档](https://goessner.net/articles/JsonPath/)
-- 请求匹配规则为 **请求头(HEADER)**: 
-  - 标签来源: RPC 调用的额外标签信息,即 Invoaction.Attachments()
-
-### 运行服务提供者
-
-分别进入 server-prod、server-pre、server-dev 的 cmd 目录,执行以下命令
-
-```
- export DUBBO_GO_CONFIG_PATH="../conf/dubbogo.yaml"
- go run .
-```
-
-当看到以下日志时即表示 server 端启动成功
-
-```log
-INFO    dubbo/dubbo_protocol.go:84      [DUBBO Protocol] Export service: 
-```
-
-
-### 运行服务调用者
-
-进入 go-client 的 cmd 目录,执行以下命令
-
-
-```
-export DUBBO_GO_CONFIG_PATH="../conf/dubbogo.yml"
-export uid=user-1
-go run .
-```
-
-当看到以下日志时即表示 go-client 成功发现 go-server 并发起了 RPC 调用
-
-```log
-INFO    cmd/main.go:75  response: &{A001 Alex Stocks 18 2022-11-19 12:52:38.092 +0800 CST}
-```
-
-分别执行以下命令
-
-```bash
-export uid=
-go run .
-
-export uid=user-1
-go run .
-
-export uid=user-2
-```
-
-当看到以下日志时即表示在 PolarisMesh 配置的路由策略已生效
-
-```log
-# export uid=
-2022-11-26T13:39:31.637+0800    INFO    cmd/main.go:78  response: &{A001 [Prod] Alex Stocks 18 2022-11-26 13:39:31.637 +0800 CST}
-2022-11-26T13:39:31.842+0800    INFO    cmd/main.go:78  response: &{A001 [Prod] Alex Stocks 18 2022-11-26 13:39:31.841 +0800 CST}
-2022-11-26T13:39:32.043+0800    INFO    cmd/main.go:78  response: &{A001 [Prod] Alex Stocks 18 2022-11-26 13:39:32.043 +0800 CST}
-2022-11-26T13:39:32.247+0800    INFO    cmd/main.go:78  response: &{A001 [Prod] Alex Stocks 18 2022-11-26 13:39:32.247 +0800 CST}
-2022-11-26T13:39:32.452+0800    INFO    cmd/main.go:78  response: &{A001 [Prod] Alex Stocks 18 2022-11-26 13:39:32.452 +0800 CST}
-
-# export uid=user-1
-2022-11-26T13:39:51.053+0800    INFO    cmd/main.go:78  response: &{A001 [Pre] Alex Stocks 18 2022-11-26 13:39:51.053 +0800 CST}
-2022-11-26T13:39:51.257+0800    INFO    cmd/main.go:78  response: &{A001 [Pre] Alex Stocks 18 2022-11-26 13:39:51.257 +0800 CST}
-2022-11-26T13:39:51.459+0800    INFO    cmd/main.go:78  response: &{A001 [Pre] Alex Stocks 18 2022-11-26 13:39:51.459 +0800 CST}
-2022-11-26T13:39:51.662+0800    INFO    cmd/main.go:78  response: &{A001 [Pre] Alex Stocks 18 2022-11-26 13:39:51.662 +0800 CST}
-2022-11-26T13:39:51.866+0800    INFO    cmd/main.go:78  response: &{A001 [Pre] Alex Stocks 18 2022-11-26 13:39:51.866 +0800 CST}
-
-# export uid=user-2
-2022-11-26T13:42:39.351+0800    INFO    cmd/main.go:78  response: &{A001 [Dev] Alex Stocks 18 2022-11-26 13:42:39.351 +0800 CST}
-2022-11-26T13:42:39.555+0800    INFO    cmd/main.go:78  response: &{A001 [Dev] Alex Stocks 18 2022-11-26 13:42:39.555 +0800 CST}
-2022-11-26T13:42:39.760+0800    INFO    cmd/main.go:78  response: &{A001 [Dev] Alex Stocks 18 2022-11-26 13:42:39.76 +0800 CST}
-2022-11-26T13:42:39.962+0800    INFO    cmd/main.go:78  response: &{A001 [Dev] Alex Stocks 18 2022-11-26 13:42:39.961 +0800 CST}
-2022-11-26T13:42:40.165+0800    INFO    cmd/main.go:78  response: &{A001 [Dev] Alex Stocks 18 2022-11-26 13:42:40.165 +0800 CST}
-```
diff --git a/compatibility/polaris/router/README.md b/compatibility/polaris/router/README.md
deleted file mode 100644
index a80804d8..00000000
--- a/compatibility/polaris/router/README.md
+++ /dev/null
@@ -1,121 +0,0 @@
-# Dubbo Go & Polaris Router Example
-
-English | [中文](README-zh.md)
-
-## Using the service routing function
-
-Quickly experience Polaris' service routing capabilities in dubbogo
-
-## Polaris server installation
-
-[Polaris Server Standalone Version Installation Documentation](https://polarismesh.cn/docs/%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%AE%89%E8%A3%85/%E5%8D%95%E6%9C%BA%E7%89%88%E5%AE%89%E8%A3%85/)
-
-[Polaris Server Cluster Version Installation Documentation](https://polarismesh.cn/docs/%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%AE%89%E8%A3%85/%E9%9B%86%E7%BE%A4%E7%89%88%E5%AE%89%E8%A3%85/)
-
-## how to use
-
-[Polaris Service Routing Usage Document](https://polarismesh.cn/docs/%E5%8C%97%E6%9E%81%E6%98%9F%E6%98%AF%E4%BB%80%E4%B9%88/%E5%8A%9F%E8%83%BD%E7%89%B9%E6%80%A7/%E6%B5%81%E9%87%8F%E7%AE%A1%E7%90%86/#%E5%8A%A8%E6%80%81%E8%B7%AF%E7%94%B1)
-
-### dubbogo.yaml configuration file
-
-When using PolarisMesh's service route capability, you need to enable PolarisMesh's registration discovery function in dubbogo firstly.
-
-````yaml
-dubbo:
-  registries:
-    polarisMesh:
-      protocol: polaris
-      address: ${Polaris server IP}:8091
-      namespace: ${Polaris namespace information}
-      token: ${Polaris resource authentication token} # If the Polaris server has enabled authentication for the client, you need to configure this parameter
-  provider:
-    services:
-      UserProvider:
-        interface: org.apache.dubbo.UserProvider.Test
-````
-
-### How to configure service routing parameters
-
-The implementation of the PolarisMesh PriorityRouter extension point in dubbogo can automatically identify the request label information that needs to participate in service routing from the current RPC call context and request information according to the service route rules configured by the user.
-
-![](images/dubbogo-route-rule-prod.png)
-![](images/dubbogo-route-rule-pre.png)
-![](images/dubbogo-route-rule-dev.png)
-
-- The request matching rule is **Request parameter(QUERY)**
-  - Tag source: the input parameter of the method in the RPC call, namely Invoaction.Arguments()
-  - Tag key rules
-    - The method has only one input parameter: param.$.${fieldName}, **param.** is a fixed prefix, the following expressions are standard JSONPath expressions, [reference document](https://goessner.net/ articles/JsonPath/)
-    - The method has multiple parameters: param[${index}].$.${fieldName}, **param[${index}].** is a fixed prefix, ${index} represents the first parameter in the method parameter Several parameters, the starting position of the subscript starts from 0; the following expressions are standard JSONPath expressions, [reference document](https://goessner.net/articles/JsonPath/)
-- The request matching rule is **request header (HEADER)**:
-  - Tag source: Additional tag information for RPC calls, i.e. Invoaction.Attachments()
-
-### Running the service provider
-
-Enter the cmd directory of server-prod, server-pre, and server-dev respectively, and execute the following commands
-
-````
- export DUBBO_GO_CONFIG_PATH="../conf/dubbogo.yaml"
- go run .
-````
-
-When you see the following log, it means that the server side started successfully
-
-````log
-INFO dubbo/dubbo_protocol.go:84 [DUBBO Protocol] Export service:
-````
-
-
-### Running the service caller
-
-Enter the cmd directory of go-client and execute the following command
-
-
-````
-export DUBBO_GO_CONFIG_PATH="../conf/dubbogo.yml"
-export uid=user-1
-go run .
-````
-
-When you see the following log, it means that go-client successfully discovered go-server and made an RPC call
-
-````log
-INFO cmd/main.go:75 response: &{A001 Alex Stocks 18 2022-11-19 12:52:38.092 +0800 CST}
-````
-
-Execute the following commands respectively
-
-```bash
-export uid=
-go run .
-
-export uid=user-1
-go run .
-
-export uid=user-2
-````
-
-When you see the following log, it means that the routing policy configured in PolarisMesh has taken effect
-
-```log
-# export uid=
-2022-11-26T13:39:31.637+0800    INFO    cmd/main.go:78  response: &{A001 [Prod] Alex Stocks 18 2022-11-26 13:39:31.637 +0800 CST}
-2022-11-26T13:39:31.842+0800    INFO    cmd/main.go:78  response: &{A001 [Prod] Alex Stocks 18 2022-11-26 13:39:31.841 +0800 CST}
-2022-11-26T13:39:32.043+0800    INFO    cmd/main.go:78  response: &{A001 [Prod] Alex Stocks 18 2022-11-26 13:39:32.043 +0800 CST}
-2022-11-26T13:39:32.247+0800    INFO    cmd/main.go:78  response: &{A001 [Prod] Alex Stocks 18 2022-11-26 13:39:32.247 +0800 CST}
-2022-11-26T13:39:32.452+0800    INFO    cmd/main.go:78  response: &{A001 [Prod] Alex Stocks 18 2022-11-26 13:39:32.452 +0800 CST}
-
-# export uid=user-1
-2022-11-26T13:39:51.053+0800    INFO    cmd/main.go:78  response: &{A001 [Pre] Alex Stocks 18 2022-11-26 13:39:51.053 +0800 CST}
-2022-11-26T13:39:51.257+0800    INFO    cmd/main.go:78  response: &{A001 [Pre] Alex Stocks 18 2022-11-26 13:39:51.257 +0800 CST}
-2022-11-26T13:39:51.459+0800    INFO    cmd/main.go:78  response: &{A001 [Pre] Alex Stocks 18 2022-11-26 13:39:51.459 +0800 CST}
-2022-11-26T13:39:51.662+0800    INFO    cmd/main.go:78  response: &{A001 [Pre] Alex Stocks 18 2022-11-26 13:39:51.662 +0800 CST}
-2022-11-26T13:39:51.866+0800    INFO    cmd/main.go:78  response: &{A001 [Pre] Alex Stocks 18 2022-11-26 13:39:51.866 +0800 CST}
-
-# export uid=user-2
-2022-11-26T13:42:39.351+0800    INFO    cmd/main.go:78  response: &{A001 [Dev] Alex Stocks 18 2022-11-26 13:42:39.351 +0800 CST}
-2022-11-26T13:42:39.555+0800    INFO    cmd/main.go:78  response: &{A001 [Dev] Alex Stocks 18 2022-11-26 13:42:39.555 +0800 CST}
-2022-11-26T13:42:39.760+0800    INFO    cmd/main.go:78  response: &{A001 [Dev] Alex Stocks 18 2022-11-26 13:42:39.76 +0800 CST}
-2022-11-26T13:42:39.962+0800    INFO    cmd/main.go:78  response: &{A001 [Dev] Alex Stocks 18 2022-11-26 13:42:39.961 +0800 CST}
-2022-11-26T13:42:40.165+0800    INFO    cmd/main.go:78  response: &{A001 [Dev] Alex Stocks 18 2022-11-26 13:42:40.165 +0800 CST}
-```
diff --git a/compatibility/polaris/router/go-client/conf/dubbogo.yaml b/compatibility/polaris/router/go-client/conf/dubbogo.yaml
deleted file mode 100644
index b41630c6..00000000
--- a/compatibility/polaris/router/go-client/conf/dubbogo.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-dubbo:
-  application:
-    name: myApp # metadata: application=myApp; name=myApp
-    module: opensource #metadata: module=opensource
-    group: myAppGroup # no metadata record
-    organization: dubbo # metadata: organization=dubbo
-    owner: laurence # metadata: owner=laurence
-    version: myversion # metadata: app.version=myversion
-    environment: pro # metadata: environment=pro
-  registries:
-    polarisMesh:
-      protocol: polaris
-      address: 127.0.0.1:8091
-      namespace: dubbogo
-      registry-type: interface
-  consumer:
-    references:
-      UserProvider:
-        protocol: dubbo
-        interface: org.apache.dubbo.UserProvider.Test
-      UserProviderWithCustomGroupAndVersion:
-        protocol: dubbo
-        interface: org.apache.dubbo.UserProvider.Test2
-        version: myInterfaceVersion # dubbo interface version must be same with server
diff --git a/compatibility/polaris/router/go-server/server-dev/cmd/server.go b/compatibility/polaris/router/go-server/server-dev/cmd/server.go
deleted file mode 100644
index 71eab8ac..00000000
--- a/compatibility/polaris/router/go-server/server-dev/cmd/server.go
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package main
-
-import (
-	"context"
-	"fmt"
-	"os"
-	"os/signal"
-	"syscall"
-	"time"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/tps/strategy"
-	_ "dubbo.apache.org/dubbo-go/v3/imports"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log/logger"
-)
-
-var (
-	survivalTimeout = int(3e9)
-)
-
-func init() {
-	config.SetProviderService(&UserProvider{})
-	config.SetProviderService(&UserProviderWithCustomGroupAndVersion{})
-	// ------for hessian2------
-	hessian.RegisterPOJO(&User{})
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-}
-
-func (u *UserProvider) GetUser(ctx context.Context, req *User) (*User, error) {
-	logger.Infof("req:%#v", req)
-	rsp := User{"A001", "[Dev] Alex Stocks", 18, time.Now()}
-	logger.Infof("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
-
-type UserProviderWithCustomGroupAndVersion struct {
-}
-
-func (u *UserProviderWithCustomGroupAndVersion) GetUser(ctx context.Context, req *User) (*User, error) {
-	logger.Infof("req:%#v", req)
-	rsp := User{"A001", "[Dev] Alex Stocks", 18, time.Now()}
-	logger.Infof("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-// need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
-func main() {
-	if err := config.Load(); err != nil {
-		panic(err)
-	}
-
-	initSignal()
-}
-
-func initSignal() {
-	signals := make(chan os.Signal, 1)
-	// It is not possible to block SIGKILL or syscall.SIGSTOP
-	signal.Notify(signals, os.Interrupt, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM)
-	for {
-		sig := <-signals
-		logger.Infof("get signal %s", sig.String())
-		switch sig {
-		case syscall.SIGHUP:
-			// reload()
-		default:
-			time.AfterFunc(time.Duration(survivalTimeout), func() {
-				logger.Warnf("app exit now by force...")
-				os.Exit(1)
-			})
-
-			// The program exits normally or timeout forcibly exits.
-			fmt.Println("provider app exit now...")
-			return
-		}
-	}
-}
diff --git a/compatibility/polaris/router/go-server/server-dev/conf/dubbogo.yaml b/compatibility/polaris/router/go-server/server-dev/conf/dubbogo.yaml
deleted file mode 100644
index 557ea4c4..00000000
--- a/compatibility/polaris/router/go-server/server-dev/conf/dubbogo.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-dubbo:
-  application:
-    name: myApp # metadata: application=myApp; name=myApp
-    module: opensource #metadata: module=opensource
-    group: myAppGroup # no metadata record
-    organization: dubbo # metadata: organization=dubbo
-    owner: laurence # metadata: owner=laurence
-    version: myversion # metadata: app.version=myversion
-    environment: dev # metadata: environment=pro
-  registries:
-    polarisMesh:
-      protocol: polaris
-      address: 127.0.0.1:8091
-      namespace: dubbogo
-      registry-type: interface
-  protocols:
-    dubbo:
-      name: dubbo
-      port: 20000
-  provider:
-    services:
-      UserProvider:
-        interface: org.apache.dubbo.UserProvider.Test
-        tps.limiter: polaris-limit # the Limiter that judge if the TPS overs the threshold, such as method-service or default
-      UserProviderWithCustomGroupAndVersion:
-        interface: org.apache.dubbo.UserProvider.Test2
-        version: myInterfaceVersion # dubbo interface version must be same with client
-        group: myInterfaceGroup # dubbo interface group must be same with client
diff --git a/compatibility/polaris/router/go-server/server-pre/cmd/server.go b/compatibility/polaris/router/go-server/server-pre/cmd/server.go
deleted file mode 100644
index 46ef833e..00000000
--- a/compatibility/polaris/router/go-server/server-pre/cmd/server.go
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package main
-
-import (
-	"context"
-	"fmt"
-	"os"
-	"os/signal"
-	"syscall"
-	"time"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/tps/strategy"
-	_ "dubbo.apache.org/dubbo-go/v3/imports"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log/logger"
-)
-
-var (
-	survivalTimeout = int(3e9)
-)
-
-func init() {
-	config.SetProviderService(&UserProvider{})
-	config.SetProviderService(&UserProviderWithCustomGroupAndVersion{})
-	// ------for hessian2------
-	hessian.RegisterPOJO(&User{})
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-}
-
-func (u *UserProvider) GetUser(ctx context.Context, req *User) (*User, error) {
-	logger.Infof("req:%#v", req)
-	rsp := User{"A001", "[Pre] Alex Stocks", 18, time.Now()}
-	logger.Infof("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
-
-type UserProviderWithCustomGroupAndVersion struct {
-}
-
-func (u *UserProviderWithCustomGroupAndVersion) GetUser(ctx context.Context, req *User) (*User, error) {
-	logger.Infof("req:%#v", req)
-	rsp := User{"A001", "[Pre] Alex Stocks", 18, time.Now()}
-	logger.Infof("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-// need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
-func main() {
-	if err := config.Load(); err != nil {
-		panic(err)
-	}
-
-	initSignal()
-}
-
-func initSignal() {
-	signals := make(chan os.Signal, 1)
-	// It is not possible to block SIGKILL or syscall.SIGSTOP
-	signal.Notify(signals, os.Interrupt, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM)
-	for {
-		sig := <-signals
-		logger.Infof("get signal %s", sig.String())
-		switch sig {
-		case syscall.SIGHUP:
-			// reload()
-		default:
-			time.AfterFunc(time.Duration(survivalTimeout), func() {
-				logger.Warnf("app exit now by force...")
-				os.Exit(1)
-			})
-
-			// The program exits normally or timeout forcibly exits.
-			fmt.Println("provider app exit now...")
-			return
-		}
-	}
-}
diff --git a/compatibility/polaris/router/go-server/server-pre/conf/dubbogo.yaml b/compatibility/polaris/router/go-server/server-pre/conf/dubbogo.yaml
deleted file mode 100644
index 1ef24dfc..00000000
--- a/compatibility/polaris/router/go-server/server-pre/conf/dubbogo.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-dubbo:
-  application:
-    name: myApp # metadata: application=myApp; name=myApp
-    module: opensource #metadata: module=opensource
-    group: myAppGroup # no metadata record
-    organization: dubbo # metadata: organization=dubbo
-    owner: laurence # metadata: owner=laurence
-    version: myversion # metadata: app.version=myversion
-    environment: pre # metadata: environment=pro
-  registries:
-    polarisMesh:
-      protocol: polaris
-      address: 127.0.0.1:8091
-      namespace: dubbogo
-      registry-type: interface
-  protocols:
-    dubbo:
-      name: dubbo
-      port: 21000
-  provider:
-    services:
-      UserProvider:
-        interface: org.apache.dubbo.UserProvider.Test
-        tps.limiter: polaris-limit # the Limiter that judge if the TPS overs the threshold, such as method-service or default
-      UserProviderWithCustomGroupAndVersion:
-        interface: org.apache.dubbo.UserProvider.Test2
-        version: myInterfaceVersion # dubbo interface version must be same with client
-        group: myInterfaceGroup # dubbo interface group must be same with client
diff --git a/compatibility/polaris/router/go-server/server-prod/cmd/server.go b/compatibility/polaris/router/go-server/server-prod/cmd/server.go
deleted file mode 100644
index 56dc89a0..00000000
--- a/compatibility/polaris/router/go-server/server-prod/cmd/server.go
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package main
-
-import (
-	"context"
-	"fmt"
-	"os"
-	"os/signal"
-	"syscall"
-	"time"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/tps/strategy"
-	_ "dubbo.apache.org/dubbo-go/v3/imports"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
-
-	"github.com/dubbogo/gost/log/logger"
-)
-
-var (
-	survivalTimeout = int(3e9)
-)
-
-func init() {
-	config.SetProviderService(&UserProvider{})
-	config.SetProviderService(&UserProviderWithCustomGroupAndVersion{})
-	// ------for hessian2------
-	hessian.RegisterPOJO(&User{})
-}
-
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
-
-type UserProvider struct {
-}
-
-func (u *UserProvider) GetUser(ctx context.Context, req *User) (*User, error) {
-	logger.Infof("req:%#v", req)
-	rsp := User{"A001", "[Prod] Alex Stocks", 18, time.Now()}
-	logger.Infof("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-func (u *User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
-
-type UserProviderWithCustomGroupAndVersion struct {
-}
-
-func (u *UserProviderWithCustomGroupAndVersion) GetUser(ctx context.Context, req *User) (*User, error) {
-	logger.Infof("req:%#v", req)
-	rsp := User{"A001", "[Prod] Alex Stocks", 18, time.Now()}
-	logger.Infof("rsp:%#v", rsp)
-	return &rsp, nil
-}
-
-// need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
-func main() {
-	if err := config.Load(); err != nil {
-		panic(err)
-	}
-
-	initSignal()
-}
-
-func initSignal() {
-	signals := make(chan os.Signal, 1)
-	// It is not possible to block SIGKILL or syscall.SIGSTOP
-	signal.Notify(signals, os.Interrupt, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM)
-	for {
-		sig := <-signals
-		logger.Infof("get signal %s", sig.String())
-		switch sig {
-		case syscall.SIGHUP:
-			// reload()
-		default:
-			time.AfterFunc(time.Duration(survivalTimeout), func() {
-				logger.Warnf("app exit now by force...")
-				os.Exit(1)
-			})
-
-			// The program exits normally or timeout forcibly exits.
-			fmt.Println("provider app exit now...")
-			return
-		}
-	}
-}
diff --git a/compatibility/polaris/router/go-server/server-prod/conf/dubbogo.yaml b/compatibility/polaris/router/go-server/server-prod/conf/dubbogo.yaml
deleted file mode 100644
index cd623867..00000000
--- a/compatibility/polaris/router/go-server/server-prod/conf/dubbogo.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-dubbo:
-  application:
-    name: myApp # metadata: application=myApp; name=myApp
-    module: opensource #metadata: module=opensource
-    group: myAppGroup # no metadata record
-    organization: dubbo # metadata: organization=dubbo
-    owner: laurence # metadata: owner=laurence
-    version: myversion # metadata: app.version=myversion
-    environment: prod # metadata: environment=pro
-  registries:
-    polarisMesh:
-      protocol: polaris
-      address: 127.0.0.1:8091
-      namespace: dubbogo
-      registry-type: interface
-  protocols:
-    dubbo:
-      name: dubbo
-      port: 22000
-  provider:
-    services:
-      UserProvider:
-        interface: org.apache.dubbo.UserProvider.Test
-        tps.limiter: polaris-limit # the Limiter that judge if the TPS overs the threshold, such as method-service or default
-      UserProviderWithCustomGroupAndVersion:
-        interface: org.apache.dubbo.UserProvider.Test2
-        version: myInterfaceVersion # dubbo interface version must be same with client
-        group: myInterfaceGroup # dubbo interface group must be same with client
diff --git a/compatibility/polaris/router/images/dubbogo-route-rule-dev.png b/compatibility/polaris/router/images/dubbogo-route-rule-dev.png
deleted file mode 100644
index b61ed0eb..00000000
Binary files a/compatibility/polaris/router/images/dubbogo-route-rule-dev.png and /dev/null differ
diff --git a/compatibility/polaris/router/images/dubbogo-route-rule-pre.png b/compatibility/polaris/router/images/dubbogo-route-rule-pre.png
deleted file mode 100644
index 61eb8977..00000000
Binary files a/compatibility/polaris/router/images/dubbogo-route-rule-pre.png and /dev/null differ
diff --git a/compatibility/polaris/router/images/dubbogo-route-rule-prod.png b/compatibility/polaris/router/images/dubbogo-route-rule-prod.png
deleted file mode 100644
index 0fd28f07..00000000
Binary files a/compatibility/polaris/router/images/dubbogo-route-rule-prod.png and /dev/null differ
diff --git a/router/polaris/README.md b/router/polaris/README.md
new file mode 100644
index 00000000..f367bd60
--- /dev/null
+++ b/router/polaris/README.md
@@ -0,0 +1,91 @@
+# Dubbo Go & Polaris Router Example
+
+English | [中文](README_zh.md)
+
+## Using the service routing function
+
+Quickly experience Polaris' service routing capabilities in dubbogo
+
+## Polaris server installation
+
+[Polaris Server Standalone Version Installation Documentation](https://polarismesh.cn/docs/%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%AE%89%E8%A3%85/%E5%8D%95%E6%9C%BA%E7%89%88%E5%AE%89%E8%A3%85/)
+
+[Polaris Server Cluster Version Installation Documentation](https://polarismesh.cn/docs/%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%AE%89%E8%A3%85/%E9%9B%86%E7%BE%A4%E7%89%88%E5%AE%89%E8%A3%85/)
+
+## How to use
+
+[Polaris Service Routing Usage Document](https://polarismesh.cn/docs/%E5%8C%97%E6%9E%81%E6%98%9F%E6%98%AF%E4%BB%80%E4%B9%88/%E5%8A%9F%E8%83%BD%E7%89%B9%E6%80%A7/%E6%B5%81%E9%87%8F%E7%AE%A1%E7%90%86/#%E5%8A%A8%E6%80%81%E8%B7%AF%E7%94%B1)
+
+### How to configure service routing parameters
+
+The implementation of the PolarisMesh PriorityRouter extension point in dubbogo can automatically identify the request label information that needs to participate in service routing from the current RPC call context and request information according to the service route rules configured by the user.
+
+![](images/dubbogo-route-rule.png)
+
+### Running the service provider
+
+Enter the cmd directory of server-prod, server-pre, and server-dev respectively, and execute the following commands:
+
+```bash
+# Dev server (port 20000)
+cd go-server/server-dev/cmd
+go run .
+
+# Pre server (port 21000)
+cd go-server/server-pre/cmd
+go run .
+
+# Prod server (port 22000)
+cd go-server/server-prod/cmd
+go run .
+```
+
+When you see the following log, it means that the server side started successfully:
+
+```
+INFO ... dubbo server started
+```
+
+### Running the service caller
+
+Enter the cmd directory of go-client and execute the following commands:
+
+```bash
+cd go-client/cmd
+
+# No uid (routes to prod)
+export uid=
+go run .
+
+# uid=user-1 (routes to pre)
+export uid=user-1
+go run .
+
+# uid=user-2 (routes to dev)
+export uid=user-2
+go run .
+```
+
+When you see the following log, it means that go-client successfully discovered go-server and made an RPC call:
+
+```
+INFO ... uid=, response: user:"[Prod] Alex Stocks"
+```
+
+### Expected output
+
+When routing is working correctly, you will see:
+
+```
+# export uid=
+uid=, response: user:"[Prod] Alex Stocks"
+uid=, response: user:"[Prod] Alex Stocks"
+
+# export uid=user-1
+uid=user-1, response: user:"[Pre] Alex Stocks"
+uid=user-1, response: user:"[Pre] Alex Stocks"
+
+# export uid=user-2
+uid=user-2, response: user:"[Dev] Alex Stocks"
+uid=user-2, response: user:"[Dev] Alex Stocks"
+```
diff --git a/router/polaris/README_zh.md b/router/polaris/README_zh.md
new file mode 100644
index 00000000..3287026a
--- /dev/null
+++ b/router/polaris/README_zh.md
@@ -0,0 +1,91 @@
+# Dubbo Go & Polaris Router Example
+
+[English](README.md) | 中文
+
+## 使用服务路由功能
+
+在 dubbogo 中快速体验北极星的服务路由能力
+
+## 北极星服务端安装
+
+[北极星服务端单机版本安装文档](https://polarismesh.cn/docs/%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%AE%89%E8%A3%85/%E5%8D%95%E6%9C%BA%E7%89%88%E5%AE%89%E8%A3%85/)
+
+[北极星服务端集群版本安装文档](https://polarismesh.cn/docs/%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%AE%89%E8%A3%85/%E9%9B%86%E7%BE%A4%E7%89%88%E5%AE%89%E8%A3%85/)
+
+## 如何使用
+
+[北极星服务路由使用文档](https://polarismesh.cn/docs/%E5%8C%97%E6%9E%81%E6%98%9F%E6%98%AF%E4%BB%80%E4%B9%88/%E5%8A%9F%E8%83%BD%E7%89%B9%E6%80%A7/%E6%B5%81%E9%87%8F%E7%AE%A1%E7%90%86/#%E5%8A%A8%E6%80%81%E8%B7%AF%E7%94%B1)
+
+### 如何配置服务路由参数
+
+dubbogo 中的 PolarisMesh PriorityRouter 扩展点实现,能够根据用户配置的服务路由规则,自动的从当前 RPC 调用上下文以及请求信息中识别出需要参与服务路由的请求标签信息。
+
+![](images/dubbogo-route-rule.png)
+
+### 运行服务提供者
+
+分别进入 server-prod、server-pre、server-dev 的 cmd 目录,执行以下命令:
+
+```bash
+# Dev 服务器 (端口 20000)
+cd go-server/server-dev/cmd
+go run .
+
+# Pre 服务器 (端口 21000)
+cd go-server/server-pre/cmd
+go run .
+
+# Prod 服务器 (端口 22000)
+cd go-server/server-prod/cmd
+go run .
+```
+
+当看到以下日志时即表示 server 端启动成功:
+
+```
+INFO ... dubbo server started
+```
+
+### 运行服务调用者
+
+进入 go-client 的 cmd 目录,执行以下命令:
+
+```bash
+cd go-client/cmd
+
+# 无 uid (路由到 prod)
+export uid=
+go run .
+
+# uid=user-1 (路由到 pre)
+export uid=user-1
+go run .
+
+# uid=user-2 (路由到 dev)
+export uid=user-2
+go run .
+```
+
+当看到以下日志时即表示 go-client 成功发现 go-server 并发起了 RPC 调用:
+
+```
+INFO ... uid=, response: user:"[Prod] Alex Stocks"
+```
+
+### 预期输出
+
+当路由正确工作时,您将看到:
+
+```
+# export uid=
+uid=, response: user:"[Prod] Alex Stocks"
+uid=, response: user:"[Prod] Alex Stocks"
+
+# export uid=user-1
+uid=user-1, response: user:"[Pre] Alex Stocks"
+uid=user-1, response: user:"[Pre] Alex Stocks"
+
+# export uid=user-2
+uid=user-2, response: user:"[Dev] Alex Stocks"
+uid=user-2, response: user:"[Dev] Alex Stocks"
+```
diff --git a/compatibility/polaris/router/go-client/cmd/main.go b/router/polaris/go-client/cmd/client.go
similarity index 54%
rename from compatibility/polaris/router/go-client/cmd/main.go
rename to router/polaris/go-client/cmd/client.go
index 1e4f6b53..811fac86 100644
--- a/compatibility/polaris/router/go-client/cmd/main.go
+++ b/router/polaris/go-client/cmd/client.go
@@ -24,58 +24,61 @@ import (
 )
 
 import (
+	"dubbo.apache.org/dubbo-go/v3"
 	"dubbo.apache.org/dubbo-go/v3/common/constant"
-	"dubbo.apache.org/dubbo-go/v3/config"
 	_ "dubbo.apache.org/dubbo-go/v3/imports"
-
-	hessian "github.com/apache/dubbo-go-hessian2"
+	"dubbo.apache.org/dubbo-go/v3/registry"
 
 	"github.com/dubbogo/gost/log/logger"
 )
 
-type UserProviderWithCustomGroupAndVersion struct {
-	GetUser func(ctx context.Context, req *User) (rsp *User, err error)
-}
+import (
+	user "github.com/apache/dubbo-go-samples/router/polaris/proto"
+)
 
-type UserProvider struct {
-	GetUser func(ctx context.Context, req *User) (rsp *User, err error)
-}
+func main() {
+	polarisAddr := "127.0.0.1:8091"
 
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
-}
+	ins, err := dubbo.NewInstance(
+		dubbo.WithName("myApp"),
+		dubbo.WithRegistry(
+			registry.WithPolaris(),
+			registry.WithAddress(polarisAddr),
+			registry.WithNamespace("dubbogo"),
+			registry.WithRegisterInterface(),
+		),
+	)
+	if err != nil {
+		logger.Errorf("new dubbo instance failed: %v", err)
+		panic(err)
+	}
 
-func (u *User) JavaClassName() string {
-	return "org.apache.dubbo.User"
-}
+	cli, err := ins.NewClient()
+	if err != nil {
+		logger.Errorf("new client failed: %v", err)
+		panic(err)
+	}
 
-func main() {
-	var userProvider = &UserProvider{}
-	var userProviderWithCustomRegistryGroupAndVersion = &UserProviderWithCustomGroupAndVersion{}
-	config.SetConsumerService(userProvider)
-	config.SetConsumerService(userProviderWithCustomRegistryGroupAndVersion)
-	hessian.RegisterPOJO(&User{})
-	err := config.Load()
+	svc, err := user.NewUserService(cli)
 	if err != nil {
+		logger.Errorf("create user service failed: %v", err)
 		panic(err)
 	}
 
 	logger.Infof("\n\n\nstart to test dubbo")
 
 	uid := os.Getenv("uid")
-	atta := make(map[string]interface{})
-	atta["uid"] = uid
-	reqContext := context.WithValue(context.Background(), constant.DubboCtxKey("attachment"), atta)
 
 	for i := 0; i < 5; i++ {
 		time.Sleep(200 * time.Millisecond)
-		user, err := userProvider.GetUser(reqContext, &User{Name: "Alex001"})
+		req := &user.User{Name: "Alex001"}
+		ctx := context.WithValue(context.Background(), constant.AttachmentKey, map[string]interface{}{
+			"uid": uid,
+		})
+		resp, err := svc.GetUser(ctx, req)
 		if err != nil {
 			panic(err)
 		}
-		logger.Infof("response: %v\n", user)
+		logger.Infof("uid=%s, response: %v\n", uid, resp)
 	}
 }
diff --git a/router/polaris/go-server/server-dev/cmd/server.go b/router/polaris/go-server/server-dev/cmd/server.go
new file mode 100644
index 00000000..0c73a641
--- /dev/null
+++ b/router/polaris/go-server/server-dev/cmd/server.go
@@ -0,0 +1,92 @@
+/*
+ * 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"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+	"dubbo.apache.org/dubbo-go/v3/protocol"
+	"dubbo.apache.org/dubbo-go/v3/registry"
+
+	"github.com/dubbogo/gost/log/logger"
+)
+
+import (
+	user "github.com/apache/dubbo-go-samples/router/polaris/proto"
+)
+
+type UserServiceHandler struct {
+}
+
+func (s *UserServiceHandler) GetUser(ctx context.Context, req *user.User) (*user.GetUserResponse, error) {
+	logger.Infof("req:%#v", req)
+	resp := &user.GetUserResponse{
+		User: &user.User{
+			Id:   "A001",
+			Name: "[Dev] User",
+			Age:  18,
+			Time: time.Now().Unix(),
+		},
+	}
+	logger.Infof("resp:%#v", resp)
+	return resp, nil
+}
+
+func main() {
+	polarisAddr := "127.0.0.1:8091"
+
+	ins, err := dubbo.NewInstance(
+		dubbo.WithName("myApp"),
+		dubbo.WithEnvironment("dev"),
+		dubbo.WithRegistry(
+			registry.WithPolaris(),
+			registry.WithAddress(polarisAddr),
+			registry.WithNamespace("dubbogo"),
+			registry.WithRegisterInterface(),
+		),
+		dubbo.WithProtocol(
+			protocol.WithTriple(),
+			protocol.WithPort(20000),
+		),
+	)
+	if err != nil {
+		logger.Errorf("new dubbo instance failed: %v", err)
+		panic(err)
+	}
+
+	srv, err := ins.NewServer()
+	if err != nil {
+		logger.Errorf("new server failed: %v", err)
+		panic(err)
+	}
+
+	if err := user.RegisterUserServiceHandler(srv, &UserServiceHandler{}); err != nil {
+		logger.Errorf("register user service handler failed: %v", err)
+		panic(err)
+	}
+
+	if err := srv.Serve(); err != nil {
+		logger.Errorf("server serve failed: %v", err)
+		panic(err)
+	}
+}
diff --git a/router/polaris/go-server/server-pre/cmd/server.go b/router/polaris/go-server/server-pre/cmd/server.go
new file mode 100644
index 00000000..01f7bc3b
--- /dev/null
+++ b/router/polaris/go-server/server-pre/cmd/server.go
@@ -0,0 +1,92 @@
+/*
+ * 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"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+	"dubbo.apache.org/dubbo-go/v3/protocol"
+	"dubbo.apache.org/dubbo-go/v3/registry"
+
+	"github.com/dubbogo/gost/log/logger"
+)
+
+import (
+	user "github.com/apache/dubbo-go-samples/router/polaris/proto"
+)
+
+type UserServiceHandler struct {
+}
+
+func (s *UserServiceHandler) GetUser(ctx context.Context, req *user.User) (*user.GetUserResponse, error) {
+	logger.Infof("req:%#v", req)
+	resp := &user.GetUserResponse{
+		User: &user.User{
+			Id:   "A001",
+			Name: "[Pre] User",
+			Age:  18,
+			Time: time.Now().Unix(),
+		},
+	}
+	logger.Infof("resp:%#v", resp)
+	return resp, nil
+}
+
+func main() {
+	polarisAddr := "127.0.0.1:8091"
+
+	ins, err := dubbo.NewInstance(
+		dubbo.WithName("myApp"),
+		dubbo.WithEnvironment("pre"),
+		dubbo.WithRegistry(
+			registry.WithPolaris(),
+			registry.WithAddress(polarisAddr),
+			registry.WithNamespace("dubbogo"),
+			registry.WithRegisterInterface(),
+		),
+		dubbo.WithProtocol(
+			protocol.WithTriple(),
+			protocol.WithPort(21000),
+		),
+	)
+	if err != nil {
+		logger.Errorf("new dubbo instance failed: %v", err)
+		panic(err)
+	}
+
+	srv, err := ins.NewServer()
+	if err != nil {
+		logger.Errorf("new server failed: %v", err)
+		panic(err)
+	}
+
+	if err := user.RegisterUserServiceHandler(srv, &UserServiceHandler{}); err != nil {
+		logger.Errorf("register user service handler failed: %v", err)
+		panic(err)
+	}
+
+	if err := srv.Serve(); err != nil {
+		logger.Errorf("server serve failed: %v", err)
+		panic(err)
+	}
+}
diff --git a/router/polaris/go-server/server-prod/cmd/server.go b/router/polaris/go-server/server-prod/cmd/server.go
new file mode 100644
index 00000000..3cf22beb
--- /dev/null
+++ b/router/polaris/go-server/server-prod/cmd/server.go
@@ -0,0 +1,92 @@
+/*
+ * 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"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+	"dubbo.apache.org/dubbo-go/v3/protocol"
+	"dubbo.apache.org/dubbo-go/v3/registry"
+
+	"github.com/dubbogo/gost/log/logger"
+)
+
+import (
+	user "github.com/apache/dubbo-go-samples/router/polaris/proto"
+)
+
+type UserServiceHandler struct {
+}
+
+func (s *UserServiceHandler) GetUser(ctx context.Context, req *user.User) (*user.GetUserResponse, error) {
+	logger.Infof("req:%#v", req)
+	resp := &user.GetUserResponse{
+		User: &user.User{
+			Id:   "A001",
+			Name: "[Prod] User",
+			Age:  18,
+			Time: time.Now().Unix(),
+		},
+	}
+	logger.Infof("resp:%#v", resp)
+	return resp, nil
+}
+
+func main() {
+	polarisAddr := "127.0.0.1:8091"
+
+	ins, err := dubbo.NewInstance(
+		dubbo.WithName("myApp"),
+		dubbo.WithEnvironment("prod"),
+		dubbo.WithRegistry(
+			registry.WithPolaris(),
+			registry.WithAddress(polarisAddr),
+			registry.WithNamespace("dubbogo"),
+			registry.WithRegisterInterface(),
+		),
+		dubbo.WithProtocol(
+			protocol.WithTriple(),
+			protocol.WithPort(22000),
+		),
+	)
+	if err != nil {
+		logger.Errorf("new dubbo instance failed: %v", err)
+		panic(err)
+	}
+
+	srv, err := ins.NewServer()
+	if err != nil {
+		logger.Errorf("new server failed: %v", err)
+		panic(err)
+	}
+
+	if err := user.RegisterUserServiceHandler(srv, &UserServiceHandler{}); err != nil {
+		logger.Errorf("register user service handler failed: %v", err)
+		panic(err)
+	}
+
+	if err := srv.Serve(); err != nil {
+		logger.Errorf("server serve failed: %v", err)
+		panic(err)
+	}
+}
diff --git a/router/polaris/image/dubbogo-route-rule.png b/router/polaris/image/dubbogo-route-rule.png
new file mode 100644
index 00000000..f9364677
Binary files /dev/null and b/router/polaris/image/dubbogo-route-rule.png differ
diff --git a/router/polaris/proto/user.pb.go b/router/polaris/proto/user.pb.go
new file mode 100644
index 00000000..af6b0d01
--- /dev/null
+++ b/router/polaris/proto/user.pb.go
@@ -0,0 +1,241 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.31.0
+// 	protoc        v3.21.12
+// source: user.proto
+
+package user
+
+import (
+	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)
+)
+
+type User struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id   string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	Age  int32  `protobuf:"varint,3,opt,name=age,proto3" json:"age,omitempty"`
+	Time int64  `protobuf:"varint,4,opt,name=time,proto3" json:"time,omitempty"`
+}
+
+func (x *User) Reset() {
+	*x = User{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_user_proto_msgTypes[0]
+		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_user_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 User.ProtoReflect.Descriptor instead.
+func (*User) Descriptor() ([]byte, []int) {
+	return file_user_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *User) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *User) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *User) GetAge() int32 {
+	if x != nil {
+		return x.Age
+	}
+	return 0
+}
+
+func (x *User) GetTime() int64 {
+	if x != nil {
+		return x.Time
+	}
+	return 0
+}
+
+type GetUserResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	User *User `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"`
+}
+
+func (x *GetUserResponse) Reset() {
+	*x = GetUserResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_user_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetUserResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetUserResponse) ProtoMessage() {}
+
+func (x *GetUserResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_user_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 GetUserResponse.ProtoReflect.Descriptor instead.
+func (*GetUserResponse) Descriptor() ([]byte, []int) {
+	return file_user_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GetUserResponse) GetUser() *User {
+	if x != nil {
+		return x.User
+	}
+	return nil
+}
+
+var File_user_proto protoreflect.FileDescriptor
+
+var file_user_proto_rawDesc = []byte{
+	0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x75, 0x73,
+	0x65, 0x72, 0x22, 0x50, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
+	0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10,
+	0x0a, 0x03, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x61, 0x67, 0x65,
+	0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04,
+	0x74, 0x69, 0x6d, 0x65, 0x22, 0x31, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65,
+	0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x32, 0x3d, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x53,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65,
+	0x72, 0x12, 0x0a, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x1a, 0x15, 0x2e,
+	0x75, 0x73, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3e, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
+	0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75, 0x62, 0x62,
+	0x6f, 0x2d, 0x67, 0x6f, 0x2d, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x72, 0x6f, 0x75,
+	0x74, 0x65, 0x72, 0x2f, 0x70, 0x6f, 0x6c, 0x61, 0x72, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x3b, 0x75, 0x73, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_user_proto_rawDescOnce sync.Once
+	file_user_proto_rawDescData = file_user_proto_rawDesc
+)
+
+func file_user_proto_rawDescGZIP() []byte {
+	file_user_proto_rawDescOnce.Do(func() {
+		file_user_proto_rawDescData = protoimpl.X.CompressGZIP(file_user_proto_rawDescData)
+	})
+	return file_user_proto_rawDescData
+}
+
+var file_user_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_user_proto_goTypes = []interface{}{
+	(*User)(nil),            // 0: user.User
+	(*GetUserResponse)(nil), // 1: user.GetUserResponse
+}
+var file_user_proto_depIdxs = []int32{
+	0, // 0: user.GetUserResponse.user:type_name -> user.User
+	0, // 1: user.UserService.GetUser:input_type -> user.User
+	1, // 2: user.UserService.GetUser:output_type -> user.GetUserResponse
+	2, // [2:3] is the sub-list for method output_type
+	1, // [1:2] is the sub-list for method input_type
+	1, // [1:1] is the sub-list for extension type_name
+	1, // [1:1] is the sub-list for extension extendee
+	0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_user_proto_init() }
+func file_user_proto_init() {
+	if File_user_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_user_proto_msgTypes[0].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
+			}
+		}
+		file_user_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetUserResponse); 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_user_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   2,
+			NumExtensions: 0,
+			NumServices:   1,
+		},
+		GoTypes:           file_user_proto_goTypes,
+		DependencyIndexes: file_user_proto_depIdxs,
+		MessageInfos:      file_user_proto_msgTypes,
+	}.Build()
+	File_user_proto = out.File
+	file_user_proto_rawDesc = nil
+	file_user_proto_goTypes = nil
+	file_user_proto_depIdxs = nil
+}
diff --git a/compatibility/generic/default/go-client/pkg/user.go b/router/polaris/proto/user.proto
similarity index 71%
rename from compatibility/generic/default/go-client/pkg/user.go
rename to router/polaris/proto/user.proto
index b7ed2dc8..7f22a7af 100644
--- a/compatibility/generic/default/go-client/pkg/user.go
+++ b/router/polaris/proto/user.proto
@@ -15,19 +15,23 @@
  * limitations under the License.
  */
 
-package pkg
+syntax = "proto3";
 
-import (
-	"time"
-)
+package user;
 
-type User struct {
-	ID   string
-	Name string
-	Age  int32
-	Time time.Time
+option go_package = "github.com/apache/dubbo-go-samples/router/polaris/proto;user";
+
+message User {
+  string id = 1;
+  string name = 2;
+  int32 age = 3;
+  int64 time = 4;
+}
+
+message GetUserResponse {
+  User user = 1;
 }
 
-func (u *User) JavaClassName() string {
-	return "org.apache.dubbo.samples.User"
+service UserService {
+  rpc GetUser(User) returns (GetUserResponse) {}
 }
diff --git a/router/polaris/proto/user.triple.go b/router/polaris/proto/user.triple.go
new file mode 100644
index 00000000..4ffcc20e
--- /dev/null
+++ b/router/polaris/proto/user.triple.go
@@ -0,0 +1,122 @@
+// Code generated by protoc-gen-triple. DO NOT EDIT.
+//
+// Source: user.proto
+package user
+
+import (
+	"context"
+)
+
+import (
+	"dubbo.apache.org/dubbo-go/v3"
+	"dubbo.apache.org/dubbo-go/v3/client"
+	"dubbo.apache.org/dubbo-go/v3/common"
+	"dubbo.apache.org/dubbo-go/v3/common/constant"
+	"dubbo.apache.org/dubbo-go/v3/protocol/triple/triple_protocol"
+	"dubbo.apache.org/dubbo-go/v3/server"
+)
+
+// This is a compile-time assertion to ensure that this generated file and the Triple package
+// are compatible. If you get a compiler error that this constant is not defined, this code was
+// generated with a version of Triple newer than the one compiled into your binary. You can fix the
+// problem by either regenerating this code with an older version of Triple or updating the Triple
+// version compiled into your binary.
+const _ = triple_protocol.IsAtLeastVersion0_1_0
+
+const (
+	// UserServiceName is the fully-qualified name of the UserService service.
+	UserServiceName = "user.UserService"
+)
+
+// These constants are the fully-qualified names of the RPCs defined in this package. They're
+// exposed at runtime as procedure and as the final two segments of the HTTP route.
+//
+// Note that these are different from the fully-qualified method names used by
+// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to
+// reflection-formatted method names, remove the leading slash and convert the remaining slash to a
+// period.
+const (
+	// UserServiceGetUserProcedure is the fully-qualified name of the UserService's GetUser RPC.
+	UserServiceGetUserProcedure = "/user.UserService/GetUser"
+)
+
+var (
+	_ UserService = (*UserServiceImpl)(nil)
+)
+
+// UserService is a client for the user.UserService service.
+type UserService interface {
+	GetUser(ctx context.Context, req *User, opts ...client.CallOption) (*GetUserResponse, error)
+}
+
+// NewUserService constructs a client for the user.UserService service.
+func NewUserService(cli *client.Client, opts ...client.ReferenceOption) (UserService, error) {
+	conn, err := cli.DialWithInfo("user.UserService", &UserService_ClientInfo, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return &UserServiceImpl{
+		conn: conn,
+	}, nil
+}
+
+func SetConsumerUserService(srv common.RPCService) {
+	dubbo.SetConsumerServiceWithInfo(srv, &UserService_ClientInfo)
+}
+
+// UserServiceImpl implements UserService.
+type UserServiceImpl struct {
+	conn *client.Connection
+}
+
+func (c *UserServiceImpl) GetUser(ctx context.Context, req *User, opts ...client.CallOption) (*GetUserResponse, error) {
+	resp := new(GetUserResponse)
+	if err := c.conn.CallUnary(ctx, []interface{}{req}, resp, "GetUser", opts...); err != nil {
+		return nil, err
+	}
+	return resp, nil
+}
+
+var UserService_ClientInfo = client.ClientInfo{
+	InterfaceName: "user.UserService",
+	MethodNames:   []string{"GetUser"},
+	ConnectionInjectFunc: func(dubboCliRaw interface{}, conn *client.Connection) {
+		dubboCli := dubboCliRaw.(*UserServiceImpl)
+		dubboCli.conn = conn
+	},
+}
+
+// UserServiceHandler is an implementation of the user.UserService service.
+type UserServiceHandler interface {
+	GetUser(context.Context, *User) (*GetUserResponse, error)
+}
+
+func RegisterUserServiceHandler(srv *server.Server, hdlr UserServiceHandler, opts ...server.ServiceOption) error {
+	return srv.Register(hdlr, &UserService_ServiceInfo, opts...)
+}
+
+func SetProviderUserService(srv common.RPCService) {
+	dubbo.SetProviderServiceWithInfo(srv, &UserService_ServiceInfo)
+}
+
+var UserService_ServiceInfo = server.ServiceInfo{
+	InterfaceName: "user.UserService",
+	ServiceType:   (*UserServiceHandler)(nil),
+	Methods: []server.MethodInfo{
+		{
+			Name: "GetUser",
+			Type: constant.CallUnary,
+			ReqInitFunc: func() interface{} {
+				return new(User)
+			},
+			MethodFunc: func(ctx context.Context, args []interface{}, handler interface{}) (interface{}, error) {
+				req := args[0].(*User)
+				res, err := handler.(UserServiceHandler).GetUser(ctx, req)
+				if err != nil {
+					return nil, err
+				}
+				return triple_protocol.NewResponse(res), nil
+			},
+		},
+	},
+}