diff --git a/api/mesh/v1alpha1/metadata.pb.go b/api/mesh/v1alpha1/metadata.pb.go
index 5f34659..6a074f7 100644
--- a/api/mesh/v1alpha1/metadata.pb.go
+++ b/api/mesh/v1alpha1/metadata.pb.go
@@ -1,26 +1,19 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
 // 	protoc-gen-go v1.28.1
-// 	protoc        v3.20.0
+// 	protoc        v4.22.2
 // source: api/mesh/v1alpha1/metadata.proto
 
 package v1alpha1
 
 import (
+	_ "github.com/apache/dubbo-kubernetes/api/mesh"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
 	reflect "reflect"
 	sync "sync"
 )
 
-import (
-	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-
-	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-)
-
-import (
-	_ "github.com/apache/dubbo-kubernetes/api/mesh"
-)
-
 const (
 	// Verify that this generated code is sufficiently up-to-date.
 	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
@@ -144,8 +137,9 @@
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	ApplicationName string `protobuf:"bytes,1,opt,name=applicationName,proto3" json:"applicationName,omitempty"`
-	Revision        string `protobuf:"bytes,2,opt,name=revision,proto3" json:"revision,omitempty"`
+	Nonce           string `protobuf:"bytes,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
+	ApplicationName string `protobuf:"bytes,2,opt,name=applicationName,proto3" json:"applicationName,omitempty"`
+	Revision        string `protobuf:"bytes,3,opt,name=revision,proto3" json:"revision,omitempty"`
 }
 
 func (x *MetadataSyncRequest) Reset() {
@@ -180,6 +174,13 @@
 	return file_api_mesh_v1alpha1_metadata_proto_rawDescGZIP(), []int{2}
 }
 
+func (x *MetadataSyncRequest) GetNonce() string {
+	if x != nil {
+		return x.Nonce
+	}
+	return ""
+}
+
 func (x *MetadataSyncRequest) GetApplicationName() string {
 	if x != nil {
 		return x.ApplicationName
@@ -199,9 +200,9 @@
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Nonce    string      `protobuf:"bytes,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
-	Revision int64       `protobuf:"varint,2,opt,name=revision,proto3" json:"revision,omitempty"`
-	Mappings []*MetaData `protobuf:"bytes,3,rep,name=mappings,proto3" json:"mappings,omitempty"`
+	Nonce     string      `protobuf:"bytes,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
+	Revision  int64       `protobuf:"varint,2,opt,name=revision,proto3" json:"revision,omitempty"`
+	MetaDatum []*MetaData `protobuf:"bytes,3,rep,name=metaDatum,proto3" json:"metaDatum,omitempty"`
 }
 
 func (x *MetadataSyncResponse) Reset() {
@@ -250,9 +251,9 @@
 	return 0
 }
 
-func (x *MetadataSyncResponse) GetMappings() []*MetaData {
+func (x *MetadataSyncResponse) GetMetaDatum() []*MetaData {
 	if x != nil {
-		return x.Mappings
+		return x.MetaDatum
 	}
 	return nil
 }
@@ -436,78 +437,80 @@
 	0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75,
 	0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
 	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22,
-	0x5b, 0x0a, 0x13, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
-	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65,
-	0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x83, 0x01, 0x0a,
-	0x14, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72,
-	0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72,
-	0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x08, 0x6d, 0x61, 0x70, 0x70, 0x69,
-	0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x75, 0x62, 0x62,
-	0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
-	0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e,
-	0x67, 0x73, 0x22, 0xcd, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12,
-	0x10, 0x0a, 0x03, 0x61, 0x70, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70,
-	0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a,
-	0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x2b, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61,
-	0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53,
-	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65,
-	0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x5d, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c,
-	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f,
-	0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53,
-	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
-	0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x6b, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x12, 0x0a, 0x10, 0x4d,
-	0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa,
-	0x8c, 0x89, 0xa6, 0x01, 0x0a, 0x12, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0xaa,
-	0x8c, 0x89, 0xa6, 0x01, 0x06, 0x22, 0x04, 0x6d, 0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01,
-	0x04, 0x52, 0x02, 0x10, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0c, 0x3a, 0x0a, 0x0a, 0x08, 0x6d,
-	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0d, 0x3a, 0x0b, 0x12,
-	0x09, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02,
-	0x68, 0x01, 0x22, 0x96, 0x02, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e,
-	0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07,
-	0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76,
-	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
-	0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
-	0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x06,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x70, 0x61,
-	0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x64, 0x75, 0x62,
-	0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
-	0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x61, 0x72,
-	0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73,
-	0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
+	0x71, 0x0a, 0x13, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f,
+	0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
+	0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
+	0x6f, 0x6e, 0x22, 0x85, 0x01, 0x0a, 0x14, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53,
+	0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e,
+	0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63,
+	0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a,
+	0x09, 0x6d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x1d, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
+	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52,
+	0x09, 0x6d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x75, 0x6d, 0x22, 0xcd, 0x02, 0x0a, 0x08, 0x4d,
+	0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x70, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76,
+	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76,
+	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e,
+	0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65,
+	0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45,
+	0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x5d,
+	0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
 	0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
-	0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x32, 0xeb, 0x01, 0x0a, 0x0f,
-	0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
-	0x6f, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69, 0x73,
-	0x74, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68,
-	0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61,
-	0x74, 0x61, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76,
-	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61,
-	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x12, 0x67, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63,
-	0x12, 0x28, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
-	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53,
-	0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x75, 0x62,
-	0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
-	0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74,
-	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64,
-	0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f,
-	0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
-	0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x20, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
+	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e,
+	0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x6b, 0xaa,
+	0x8c, 0x89, 0xa6, 0x01, 0x12, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52,
+	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0a, 0x12, 0x08, 0x4d,
+	0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x06, 0x22, 0x04, 0x6d,
+	0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, 0x02, 0x10, 0x01, 0xaa, 0x8c, 0x89,
+	0xa6, 0x01, 0x0c, 0x3a, 0x0a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xaa,
+	0x8c, 0x89, 0xa6, 0x01, 0x0d, 0x3a, 0x0b, 0x12, 0x09, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+	0x61, 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x68, 0x01, 0x22, 0x96, 0x02, 0x0a, 0x0b, 0x53,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
+	0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14,
+	0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67,
+	0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a,
+	0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f,
+	0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12,
+	0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61,
+	0x74, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
+	0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61,
+	0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
+	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
+	0x02, 0x38, 0x01, 0x32, 0xeb, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64,
+	0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x64, 0x75,
+	0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
+	0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+	0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x75, 0x62, 0x62,
+	0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
+	0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x61,
+	0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x28, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f,
+	0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d,
+	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
+	0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+	0x61, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30,
+	0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
+	0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62,
+	0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68,
+	0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x33,
 }
 
 var (
@@ -535,7 +538,7 @@
 }
 var file_api_mesh_v1alpha1_metadata_proto_depIdxs = []int32{
 	4, // 0: dubbo.mesh.v1alpha1.MetaDataRegisterRequest.metadata:type_name -> dubbo.mesh.v1alpha1.MetaData
-	4, // 1: dubbo.mesh.v1alpha1.MetadataSyncResponse.mappings:type_name -> dubbo.mesh.v1alpha1.MetaData
+	4, // 1: dubbo.mesh.v1alpha1.MetadataSyncResponse.metaDatum:type_name -> dubbo.mesh.v1alpha1.MetaData
 	6, // 2: dubbo.mesh.v1alpha1.MetaData.services:type_name -> dubbo.mesh.v1alpha1.MetaData.ServicesEntry
 	7, // 3: dubbo.mesh.v1alpha1.ServiceInfo.params:type_name -> dubbo.mesh.v1alpha1.ServiceInfo.ParamsEntry
 	5, // 4: dubbo.mesh.v1alpha1.MetaData.ServicesEntry.value:type_name -> dubbo.mesh.v1alpha1.ServiceInfo
diff --git a/api/mesh/v1alpha1/metadata.proto b/api/mesh/v1alpha1/metadata.proto
index d00d36f..ad6fd43 100644
--- a/api/mesh/v1alpha1/metadata.proto
+++ b/api/mesh/v1alpha1/metadata.proto
@@ -25,14 +25,15 @@
 
 // 可以根据应用名和版本号进行获取
 message MetadataSyncRequest {
-  string applicationName = 1;
-  string revision = 2;
+  string nonce = 1;
+  string applicationName = 2;
+  string revision = 3;
 }
 
 message MetadataSyncResponse {
   string nonce = 1;
   int64 revision = 2;
-  repeated MetaData mappings = 3;
+  repeated MetaData metaDatum = 3;
 }
 
 message MetaData {
diff --git a/api/mesh/v1alpha1/metadata_grpc.pb.go b/api/mesh/v1alpha1/metadata_grpc.pb.go
index a1303f6..0a216e9 100644
--- a/api/mesh/v1alpha1/metadata_grpc.pb.go
+++ b/api/mesh/v1alpha1/metadata_grpc.pb.go
@@ -1,12 +1,13 @@
 // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.2.0
+// - protoc             v4.22.2
+// source: api/mesh/v1alpha1/metadata.proto
 
 package v1alpha1
 
 import (
 	context "context"
-)
-
-import (
 	grpc "google.golang.org/grpc"
 	codes "google.golang.org/grpc/codes"
 	status "google.golang.org/grpc/status"
diff --git a/app/dubbo-cp/cmd/run.go b/app/dubbo-cp/cmd/run.go
index f168898..d4eb467 100644
--- a/app/dubbo-cp/cmd/run.go
+++ b/app/dubbo-cp/cmd/run.go
@@ -19,6 +19,8 @@
 
 import (
 	"fmt"
+	"github.com/apache/dubbo-kubernetes/pkg/config/core"
+	"github.com/apache/dubbo-kubernetes/pkg/test"
 	"time"
 )
 
@@ -31,7 +33,6 @@
 	"github.com/apache/dubbo-kubernetes/pkg/bufman"
 	"github.com/apache/dubbo-kubernetes/pkg/config"
 	dubbo_cp "github.com/apache/dubbo-kubernetes/pkg/config/app/dubbo-cp"
-	"github.com/apache/dubbo-kubernetes/pkg/config/core"
 	"github.com/apache/dubbo-kubernetes/pkg/core/bootstrap"
 	dubbo_cmd "github.com/apache/dubbo-kubernetes/pkg/core/cmd"
 	dds_global "github.com/apache/dubbo-kubernetes/pkg/dds/global"
@@ -42,7 +43,6 @@
 	"github.com/apache/dubbo-kubernetes/pkg/dubbo"
 	"github.com/apache/dubbo-kubernetes/pkg/hds"
 	"github.com/apache/dubbo-kubernetes/pkg/intercp"
-	"github.com/apache/dubbo-kubernetes/pkg/test"
 	"github.com/apache/dubbo-kubernetes/pkg/util/os"
 	dubbo_version "github.com/apache/dubbo-kubernetes/pkg/version"
 	"github.com/apache/dubbo-kubernetes/pkg/xds"
@@ -100,13 +100,6 @@
 					"minimim-open-files", minOpenFileLimit)
 			}
 
-			if rt.GetMode() == core.Test {
-				if err := test.Setup(rt); err != nil {
-					runLog.Error(err, "unable to set up test")
-					return err
-				}
-			}
-
 			if err := admin.Setup(rt); err != nil {
 				runLog.Error(err, "unable to set up admin")
 				return err
@@ -151,6 +144,13 @@
 				return err
 			}
 
+			if rt.GetMode() == core.Test {
+				if err := test.Setup(rt); err != nil {
+					runLog.Error(err, "unable to set up test")
+					return err
+				}
+			}
+
 			runLog.Info("starting Control Plane", "version", dubbo_version.Build.Version)
 			if err := rt.Start(gracefulCtx.Done()); err != nil {
 				runLog.Error(err, "problem running Control Plane")
diff --git a/conf/dubbo-cp.yaml b/conf/dubbo-cp.yaml
index d61487c..7345448 100644
--- a/conf/dubbo-cp.yaml
+++ b/conf/dubbo-cp.yaml
@@ -15,7 +15,14 @@
 
 # 可选 k8s half universal
 deploy_mode: k8s
-mode: test
+# mode: test
+mode: zone
+multizone:
+  zone:
+    globalAddress: grpc://127.0.0.1:5685
+  global:
+    dds:
+      grpcPort: 5685
 runtime:
   kubernetes:
     admissionServer:
diff --git a/pkg/admin/component.go b/pkg/admin/component.go
index abc9757..aefad4b 100644
--- a/pkg/admin/component.go
+++ b/pkg/admin/component.go
@@ -26,7 +26,8 @@
 var adminServerLog = core.Log.WithName("admin")
 
 func Setup(rt core_runtime.Runtime) error {
-	adminServer := server.NewAdminServer(*rt.Config().Admin).InitHTTPRouter()
+	adminServer := server.NewAdminServer(*rt.Config().Admin).
+		InitHTTPRouter()
 	if err := rt.Add(adminServer); err != nil {
 		adminServerLog.Error(err, "fail to start the admin server")
 		return err
diff --git a/pkg/config/app/dubbo-cp/config.go b/pkg/config/app/dubbo-cp/config.go
index 840a521..f42d02f 100644
--- a/pkg/config/app/dubbo-cp/config.go
+++ b/pkg/config/app/dubbo-cp/config.go
@@ -123,6 +123,14 @@
 	DelayFullResync bool `json:"delayFullResync" envconfig:"DUBBO_EXPERIMENTAL_KDS_EVENT_BASED_WATCHDOG_DELAY_FULL_RESYNC"`
 }
 
+func DefaultEventBasedWatchdog() DDSEventBasedWatchdog {
+	return DDSEventBasedWatchdog{
+		FlushInterval:      config_types.Duration{Duration: 5 * time.Second},
+		FullResyncInterval: config_types.Duration{Duration: 1 * time.Minute},
+		DelayFullResync:    false,
+	}
+}
+
 func (c Config) IsFederatedZoneCP() bool {
 	return c.Mode == core.Zone && c.Multizone.Zone.GlobalAddress != "" && c.Multizone.Zone.Name != ""
 }
@@ -151,22 +159,23 @@
 
 var DefaultConfig = func() Config {
 	return Config{
-		BootstrapServer: bootstrap.DefaultBootstrapServerConfig(),
-		DeployMode:      core.UniversalMode,
-		Mode:            core.Zone,
-		XdsServer:       xds.DefaultXdsServerConfig(),
-		Store:           store.DefaultStoreConfig(),
-		Runtime:         runtime.DefaultRuntimeConfig(),
-		Bufman:          bufman.DefaultBufmanConfig(),
-		General:         DefaultGeneralConfig(),
-		Defaults:        DefaultDefaultsConfig(),
-		Multizone:       multizone.DefaultMultizoneConfig(),
-		Diagnostics:     diagnostics.DefaultDiagnosticsConfig(),
-		DpServer:        dp_server.DefaultDpServerConfig(),
-		Admin:           admin.DefaultAdminConfig(),
-		InterCp:         intercp.DefaultInterCpConfig(),
-		DubboConfig:     dubbo.DefaultServiceNameMappingConfig(),
-		EventBus:        eventbus.Default(),
+		BootstrapServer:       bootstrap.DefaultBootstrapServerConfig(),
+		DeployMode:            core.UniversalMode,
+		Mode:                  core.Zone,
+		XdsServer:             xds.DefaultXdsServerConfig(),
+		Store:                 store.DefaultStoreConfig(),
+		Runtime:               runtime.DefaultRuntimeConfig(),
+		Bufman:                bufman.DefaultBufmanConfig(),
+		General:               DefaultGeneralConfig(),
+		Defaults:              DefaultDefaultsConfig(),
+		Multizone:             multizone.DefaultMultizoneConfig(),
+		Diagnostics:           diagnostics.DefaultDiagnosticsConfig(),
+		DpServer:              dp_server.DefaultDpServerConfig(),
+		Admin:                 admin.DefaultAdminConfig(),
+		InterCp:               intercp.DefaultInterCpConfig(),
+		DubboConfig:           dubbo.DefaultServiceNameMappingConfig(),
+		EventBus:              eventbus.Default(),
+		DDSEventBasedWatchdog: DefaultEventBasedWatchdog(),
 	}
 }
 
diff --git a/pkg/config/multizone/multicluster.go b/pkg/config/multizone/multicluster.go
index 1ed14eb..57b243a 100644
--- a/pkg/config/multizone/multicluster.go
+++ b/pkg/config/multizone/multicluster.go
@@ -53,8 +53,16 @@
 func DefaultGlobalConfig() *GlobalConfig {
 	return &GlobalConfig{
 		DDS: &DdsServerConfig{
-			GrpcPort:        5685,
-			RefreshInterval: config_types.Duration{Duration: 1 * time.Second},
+			GrpcPort:                 5685,
+			RefreshInterval:          config_types.Duration{Duration: 1 * time.Second},
+			ZoneInsightFlushInterval: config_types.Duration{Duration: 10 * time.Second},
+			TlsEnabled:               false,
+			MaxMsgSize:               10 * 1024 * 1024,
+			MsgSendTimeout:           config_types.Duration{Duration: 60 * time.Second},
+			TlsMinVersion:            "TLSv1_2",
+			TlsCipherSuites:          []string{},
+			NackBackoff:              config_types.Duration{Duration: 5 * time.Second},
+			DisableSOTW:              false,
 		},
 	}
 }
@@ -89,6 +97,12 @@
 		GlobalAddress:                "",
 		Name:                         "default",
 		DisableOriginLabelValidation: false,
+		DDS: &DdsClientConfig{
+			RefreshInterval: config_types.Duration{Duration: 1 * time.Second},
+			MaxMsgSize:      10 * 1024 * 1024,
+			MsgSendTimeout:  config_types.Duration{Duration: 60 * time.Second},
+			NackBackoff:     config_types.Duration{Duration: 5 * time.Second},
+		},
 	}
 }
 
diff --git a/pkg/core/managers/apis/dataplane/dataplane_manager.go b/pkg/core/managers/apis/dataplane/dataplane_manager.go
index 2f4a56b..f3feb71 100644
--- a/pkg/core/managers/apis/dataplane/dataplane_manager.go
+++ b/pkg/core/managers/apis/dataplane/dataplane_manager.go
@@ -31,7 +31,6 @@
 	mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
 	config_core "github.com/apache/dubbo-kubernetes/pkg/config/core"
 	"github.com/apache/dubbo-kubernetes/pkg/core"
-	"github.com/apache/dubbo-kubernetes/pkg/core/logger"
 	core_mesh "github.com/apache/dubbo-kubernetes/pkg/core/resources/apis/mesh"
 	core_manager "github.com/apache/dubbo-kubernetes/pkg/core/resources/manager"
 	core_model "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
@@ -69,11 +68,7 @@
 	if err != nil {
 		return err
 	}
-	options := core_store.NewGetOptions(opts...)
-	if options.Labels[mesh_proto.Application] == "" || options.Labels[mesh_proto.Revision] == "" {
-		logger.Sugar().Error("需要携带application和revision才能查询")
-		return nil
-	}
+
 	if err := m.store.Get(ctx, dataplane, opts...); err != nil {
 		return err
 	}
diff --git a/pkg/dds/global/components.go b/pkg/dds/global/components.go
index 60f7d87..d568e4b 100644
--- a/pkg/dds/global/components.go
+++ b/pkg/dds/global/components.go
@@ -142,7 +142,7 @@
 			return err
 		}
 	}
-	return rt.Add(component.NewResilientComponent(ddsDeltaGlobalLog.WithName("dds-mux-client"), mux.NewServer(
+	return rt.Add(mux.NewServer(
 		rt.DDSContext().GlobalServerFilters,
 		rt.DDSContext().ServerStreamInterceptors,
 		rt.DDSContext().ServerUnaryInterceptor,
@@ -166,7 +166,7 @@
 			rt.Extensions(),
 			rt.EventBus(),
 		),
-	)))
+	))
 }
 
 func createZoneIfAbsent(ctx context.Context, log logr.Logger, name string, resManager core_manager.ResourceManager) error {
diff --git a/pkg/dds/mux/client.go b/pkg/dds/mux/client.go
index 5e12d4c..4723ce5 100644
--- a/pkg/dds/mux/client.go
+++ b/pkg/dds/mux/client.go
@@ -143,7 +143,7 @@
 func (c *client) startGlobalToZoneSync(ctx context.Context, log logr.Logger, conn *grpc.ClientConn, errorCh chan error) {
 	kdsClient := mesh_proto.NewDDSSyncServiceClient(conn)
 	log = log.WithValues("rpc", "global-to-zone")
-	log.Info("initializing Kuma Discovery Service (KDS) stream for global to zone sync of resources with delta xDS")
+	log.Info("initializing Dubbo Discovery Service (DDS) stream for global to zone sync of resources with delta xDS")
 	stream, err := kdsClient.GlobalToZoneSync(ctx)
 	if err != nil {
 		errorCh <- err
@@ -157,7 +157,7 @@
 func (c *client) startZoneToGlobalSync(ctx context.Context, log logr.Logger, conn *grpc.ClientConn, errorCh chan error) {
 	kdsClient := mesh_proto.NewDDSSyncServiceClient(conn)
 	log = log.WithValues("rpc", "zone-to-global")
-	log.Info("initializing Kuma Discovery Service (KDS) stream for zone to global sync of resources with delta xDS")
+	log.Info("initializing Dubbo Discovery Service (DDS) stream for zone to global sync of resources with delta xDS")
 	stream, err := kdsClient.ZoneToGlobalSync(ctx)
 	if err != nil {
 		errorCh <- err
diff --git a/pkg/dubbo/client/stream.go b/pkg/dubbo/client/stream.go
index 96d4117..f200b47 100644
--- a/pkg/dubbo/client/stream.go
+++ b/pkg/dubbo/client/stream.go
@@ -25,78 +25,136 @@
 	"github.com/google/uuid"
 
 	"github.com/pkg/errors"
+
+	"google.golang.org/grpc"
+
+	"google.golang.org/protobuf/proto"
 )
 
 import (
 	mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
 	core_mesh "github.com/apache/dubbo-kubernetes/pkg/core/resources/apis/mesh"
+	core_model "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
 )
 
-var _ MappingSyncStream = &stream{}
+var _ DubboSyncStream = &stream{}
 
 type stream struct {
-	streamClient mesh_proto.ServiceNameMappingService_MappingSyncServer
+	streamClient grpc.ServerStream
 
-	// subscribedInterfaceNames records request's interfaceName in Mapping Request from data plane.
+	// subscribedInterfaceNames records request's interfaceName in MappingSync Request from data plane.
 	subscribedInterfaceNames map[string]struct{}
-	lastNonce                string
-	mu                       sync.RWMutex
+	// subscribedApplicationNames records request's applicationName in MetaDataSync Request from data plane.
+	subscribedApplicationNames map[string]struct{}
+
+	mappingLastNonce  string
+	metadataLastNonce string
+	mu                sync.RWMutex
 }
 
-func NewMappingSyncStream(streamClient mesh_proto.ServiceNameMappingService_MappingSyncServer) MappingSyncStream {
+func NewDubboSyncStream(streamClient grpc.ServerStream) DubboSyncStream {
 	return &stream{
 		streamClient: streamClient,
 
-		subscribedInterfaceNames: make(map[string]struct{}),
+		subscribedInterfaceNames:   make(map[string]struct{}),
+		subscribedApplicationNames: make(map[string]struct{}),
 	}
 }
 
-type MappingSyncStream interface {
-	Recv() (*mesh_proto.MappingSyncRequest, error)
-	Send(mappingList *core_mesh.MappingResourceList, revision int64) error
+type DubboSyncStream interface {
+	Recv() (proto.Message, error)
+	Send(resourceList core_model.ResourceList, revision int64) error
 	SubscribedInterfaceNames() []string
+	SubscribedApplicationNames() []string
 }
 
-func (s *stream) Recv() (*mesh_proto.MappingSyncRequest, error) {
-	request, err := s.streamClient.Recv()
-	if err != nil {
-		return nil, err
+func (s *stream) Recv() (proto.Message, error) {
+	switch s.streamClient.(type) {
+	case mesh_proto.ServiceNameMappingService_MappingSyncServer:
+		request := &mesh_proto.MappingSyncRequest{}
+		err := s.streamClient.RecvMsg(request)
+		if err != nil {
+			return nil, err
+		}
+		if s.mappingLastNonce != "" && s.mappingLastNonce != request.GetNonce() {
+			return nil, errors.New("mapping sync request's nonce is different to last nonce")
+		}
+
+		// subscribe Mapping
+		s.mu.Lock()
+		interfaceName := request.GetInterfaceName()
+		s.subscribedInterfaceNames[interfaceName] = struct{}{}
+		s.mu.Lock()
+
+		return request, nil
+	case mesh_proto.MetadataService_MetadataSyncServer:
+		request := &mesh_proto.MetadataSyncRequest{}
+		err := s.streamClient.RecvMsg(request)
+		if err != nil {
+			return nil, err
+		}
+		if s.metadataLastNonce != "" && s.metadataLastNonce != request.GetNonce() {
+			return nil, errors.New("metadata sync request's nonce is different to last nonce")
+		}
+
+		// subscribe MetaData
+		s.mu.Lock()
+		appName := request.GetApplicationName()
+		s.subscribedApplicationNames[appName] = struct{}{}
+		s.mu.Lock()
+
+		return request, nil
+	default:
+		return nil, errors.New("unknown type request")
 	}
-
-	if s.lastNonce != "" && s.lastNonce != request.GetNonce() {
-		return nil, errors.New("request's nonce is different to last nonce")
-	}
-
-	// subscribe Mapping
-	s.mu.Lock()
-	interfaceName := request.GetInterfaceName()
-	s.subscribedInterfaceNames[interfaceName] = struct{}{}
-	s.mu.Lock()
-
-	return request, nil
 }
 
-func (s *stream) Send(mappingList *core_mesh.MappingResourceList, revision int64) error {
+func (s *stream) Send(resourceList core_model.ResourceList, revision int64) error {
 	s.mu.RLock()
 	defer s.mu.RUnlock()
 
 	nonce := uuid.NewString()
-	mappings := make([]*mesh_proto.Mapping, 0, len(mappingList.Items))
-	for _, item := range mappingList.Items {
-		mappings = append(mappings, &mesh_proto.Mapping{
-			Zone:             item.Spec.Zone,
-			InterfaceName:    item.Spec.InterfaceName,
-			ApplicationNames: item.Spec.ApplicationNames,
-		})
-	}
 
-	s.lastNonce = nonce
-	response := &mesh_proto.MappingSyncResponse{
-		Nonce:    nonce,
-		Revision: revision,
-		Mappings: mappings,
+	switch resourceList.(type) {
+	case *core_mesh.MappingResourceList:
+		mappingList := resourceList.(*core_mesh.MappingResourceList)
+		mappings := make([]*mesh_proto.Mapping, 0, len(mappingList.Items))
+		for _, item := range mappingList.Items {
+			mappings = append(mappings, &mesh_proto.Mapping{
+				Zone:             item.Spec.Zone,
+				InterfaceName:    item.Spec.InterfaceName,
+				ApplicationNames: item.Spec.ApplicationNames,
+			})
+		}
+
+		s.mappingLastNonce = nonce
+		response := &mesh_proto.MappingSyncResponse{
+			Nonce:    nonce,
+			Revision: revision,
+			Mappings: mappings,
+		}
+		return s.streamClient.SendMsg(response)
+	case *core_mesh.MetaDataResourceList:
+		metadataList := resourceList.(*core_mesh.MetaDataResourceList)
+		metaDatum := make([]*mesh_proto.MetaData, 0, len(metadataList.Items))
+		for _, item := range metadataList.Items {
+			metaDatum = append(metaDatum, &mesh_proto.MetaData{
+				App:      item.Spec.GetApp(),
+				Revision: item.Spec.Revision,
+				Services: item.Spec.GetServices(),
+			})
+		}
+
+		s.metadataLastNonce = nonce
+		response := &mesh_proto.MetadataSyncResponse{
+			Nonce:     nonce,
+			Revision:  revision,
+			MetaDatum: metaDatum,
+		}
+		return s.streamClient.SendMsg(response)
+	default:
+		return errors.New("unknown type request")
 	}
-	return s.streamClient.Send(response)
 }
 
 func (s *stream) SubscribedInterfaceNames() []string {
@@ -110,3 +168,14 @@
 
 	return result
 }
+func (s *stream) SubscribedApplicationNames() []string {
+	s.mu.RLock()
+	defer s.mu.RUnlock()
+
+	result := make([]string, 0, len(s.subscribedApplicationNames))
+	for appName := range s.subscribedApplicationNames {
+		result = append(result, appName)
+	}
+
+	return result
+}
diff --git a/pkg/dubbo/client/sync_client.go b/pkg/dubbo/client/sync_client.go
index 1641912..bad8d72 100644
--- a/pkg/dubbo/client/sync_client.go
+++ b/pkg/dubbo/client/sync_client.go
@@ -29,29 +29,30 @@
 
 import (
 	mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
-	core_mesh "github.com/apache/dubbo-kubernetes/pkg/core/resources/apis/mesh"
+	core_model "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
 )
 
 type Callbacks struct {
-	OnRequestReceived func(request *mesh_proto.MappingSyncRequest) error
+	OnMappingSyncRequestReceived  func(request *mesh_proto.MappingSyncRequest) error
+	OnMetadataSyncRequestReceived func(request *mesh_proto.MetadataSyncRequest) error
 }
 
-// MappingSyncClient Handle MappingSyncRequest from client
-type MappingSyncClient interface {
+// DubboSyncClient Handle Dubbo Sync Request from client
+type DubboSyncClient interface {
 	ClientID() string
 	HandleReceive() error
-	Send(mappingList *core_mesh.MappingResourceList, revision int64) error
+	Send(resourceList core_model.ResourceList, revision int64) error
 }
 
-type mappingSyncClient struct {
+type dubboSyncClient struct {
 	log        logr.Logger
 	id         string
-	syncStream MappingSyncStream
+	syncStream DubboSyncStream
 	callbacks  *Callbacks
 }
 
-func NewMappingSyncClient(log logr.Logger, id string, syncStream MappingSyncStream, cb *Callbacks) MappingSyncClient {
-	return &mappingSyncClient{
+func NewDubboSyncClient(log logr.Logger, id string, syncStream DubboSyncStream, cb *Callbacks) DubboSyncClient {
+	return &dubboSyncClient{
 		log:        log,
 		id:         id,
 		syncStream: syncStream,
@@ -59,11 +60,11 @@
 	}
 }
 
-func (s *mappingSyncClient) ClientID() string {
+func (s *dubboSyncClient) ClientID() string {
 	return s.id
 }
 
-func (s *mappingSyncClient) HandleReceive() error {
+func (s *dubboSyncClient) HandleReceive() error {
 	for {
 		received, err := s.syncStream.Recv()
 		if err != nil {
@@ -80,16 +81,22 @@
 		}
 
 		// callbacks
-		err = s.callbacks.OnRequestReceived(received)
-		if err != nil {
-			s.log.Error(err, "error in OnRequestReceived")
-		} else {
-			s.log.Info("OnRequestReceived successed")
+		switch received.(type) {
+		case *mesh_proto.MappingSyncRequest:
+			err = s.callbacks.OnMappingSyncRequestReceived(received.(*mesh_proto.MappingSyncRequest))
+			if err != nil {
+				s.log.Error(err, "error in OnMappingSyncRequestReceived")
+			} else {
+				s.log.Info("OnMappingSyncRequestReceived successed")
+			}
+		case *mesh_proto.MetadataSyncRequest:
+			panic("unimplemented")
+		default:
+			return errors.New("unknown type request")
 		}
-
 	}
 }
 
-func (s *mappingSyncClient) Send(mappingList *core_mesh.MappingResourceList, revision int64) error {
-	return s.syncStream.Send(mappingList, revision)
+func (s *dubboSyncClient) Send(resourceList core_model.ResourceList, revision int64) error {
+	return s.syncStream.Send(resourceList, revision)
 }
diff --git a/pkg/dubbo/components.go b/pkg/dubbo/components.go
index c61d61f..0fc70f9 100644
--- a/pkg/dubbo/components.go
+++ b/pkg/dubbo/components.go
@@ -63,6 +63,7 @@
 	// register MetadataService
 	metadata := dubbo_metadata.NewMetadataServe(
 		rt.AppContext(),
+		cfg,
 		dubboPusher,
 		rt.ResourceManager(),
 		rt.Transactions(),
diff --git a/pkg/dubbo/metadata/register_request.go b/pkg/dubbo/metadata/register_request.go
index 5dff680..df12e06 100644
--- a/pkg/dubbo/metadata/register_request.go
+++ b/pkg/dubbo/metadata/register_request.go
@@ -17,4 +17,37 @@
 
 package metadata
 
-type RegisterRequest struct{}
+import "fmt"
+
+import (
+	mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
+	core_model "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
+)
+
+type RegisterRequest struct {
+	ConfigsUpdated map[core_model.ResourceKey]*mesh_proto.MetaData
+}
+
+func (q *RegisterRequest) merge(req *RegisterRequest) *RegisterRequest {
+	if q == nil {
+		return req
+	}
+	for key, metaData := range req.ConfigsUpdated {
+		q.ConfigsUpdated[key] = metaData
+	}
+
+	return q
+}
+
+func configsUpdated(req *RegisterRequest) string {
+	configs := ""
+	for key := range req.ConfigsUpdated {
+		configs += key.Name + "." + key.Mesh
+		break
+	}
+	if len(req.ConfigsUpdated) > 1 {
+		more := fmt.Sprintf(" and %d more configs", len(req.ConfigsUpdated)-1)
+		configs += more
+	}
+	return configs
+}
diff --git a/pkg/dubbo/metadata/server.go b/pkg/dubbo/metadata/server.go
index 94d47d6..762a56d 100644
--- a/pkg/dubbo/metadata/server.go
+++ b/pkg/dubbo/metadata/server.go
@@ -19,13 +19,30 @@
 
 import (
 	"context"
+	"io"
+	"strings"
+	"time"
+)
+
+import (
+	"github.com/google/uuid"
+
+	"github.com/pkg/errors"
+
+	"google.golang.org/grpc/codes"
+
+	"google.golang.org/grpc/status"
 )
 
 import (
 	mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
+	"github.com/apache/dubbo-kubernetes/pkg/config/dubbo"
 	"github.com/apache/dubbo-kubernetes/pkg/core"
+	core_mesh "github.com/apache/dubbo-kubernetes/pkg/core/resources/apis/mesh"
 	"github.com/apache/dubbo-kubernetes/pkg/core/resources/manager"
+	core_model "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
 	core_store "github.com/apache/dubbo-kubernetes/pkg/core/resources/store"
+	"github.com/apache/dubbo-kubernetes/pkg/dubbo/client"
 	"github.com/apache/dubbo-kubernetes/pkg/dubbo/pusher"
 )
 
@@ -36,6 +53,7 @@
 type MetadataServer struct {
 	mesh_proto.MetadataServiceServer
 
+	config dubbo.DubboConfig
 	queue  chan *RegisterRequest
 	pusher pusher.Pusher
 
@@ -44,22 +62,28 @@
 	transactions    core_store.Transactions
 }
 
-func (s *MetadataServer) Start(stop <-chan struct{}) error {
+func (m *MetadataServer) Start(stop <-chan struct{}) error {
+	// we start debounce to prevent too many MetadataRegisterRequests, we aggregate metadata register information
+	go m.debounce(stop, m.register)
+
 	return nil
 }
 
-func (s *MetadataServer) NeedLeaderElection() bool {
+func (m *MetadataServer) NeedLeaderElection() bool {
 	return false
 }
 
 func NewMetadataServe(
 	ctx context.Context,
+	config dubbo.DubboConfig,
 	pusher pusher.Pusher,
 	resourceManager manager.ResourceManager,
 	transactions core_store.Transactions,
 ) *MetadataServer {
 	return &MetadataServer{
+		config:          config,
 		pusher:          pusher,
+		queue:           make(chan *RegisterRequest, queueSize),
 		ctx:             ctx,
 		resourceManager: resourceManager,
 		transactions:    transactions,
@@ -67,14 +91,285 @@
 }
 
 func (m *MetadataServer) MetadataRegister(ctx context.Context, req *mesh_proto.MetaDataRegisterRequest) (*mesh_proto.MetaDataRegisterResponse, error) {
+	mesh := core_model.DefaultMesh // todo: mesh
+	podName := req.GetPodName()
+	metadata := req.GetMetadata()
+	if metadata == nil {
+		return &mesh_proto.MetaDataRegisterResponse{
+			Success: false,
+			Message: "Metadata is nil",
+		}, nil
+	}
+
+	// MetaData name = podName.revision
+	name := podName + "." + metadata.Revision
+	registerReq := &RegisterRequest{ConfigsUpdated: map[core_model.ResourceKey]*mesh_proto.MetaData{}}
+	key := core_model.ResourceKey{
+		Mesh: mesh,
+		Name: name,
+	}
+	registerReq.ConfigsUpdated[key] = metadata
+
+	// push into queue to debounce, register Metadata Resource
+	m.queue <- registerReq
+
 	return &mesh_proto.MetaDataRegisterResponse{
-		Success: false,
+		Success: true,
 		Message: "success",
 	}, nil
 }
 
-func (m MetadataServer) MetadataSync(stream mesh_proto.MetadataService_MetadataSyncServer) error {
-	return nil
+func (m *MetadataServer) MetadataSync(stream mesh_proto.MetadataService_MetadataSyncServer) error {
+	mesh := core_model.DefaultMesh // todo: mesh
+	errChan := make(chan error)
+
+	clientID := uuid.NewString()
+	metadataSyncStream := client.NewDubboSyncStream(stream)
+	// DubboSyncClient is to handle MetaSyncRequest from data plane
+	metadataSyncClient := client.NewDubboSyncClient(
+		log.WithName("client"),
+		clientID,
+		metadataSyncStream,
+		&client.Callbacks{
+			OnMetadataSyncRequestReceived: func(request *mesh_proto.MetadataSyncRequest) error {
+				// when received request, invoke callback
+				m.pusher.InvokeCallback(
+					core_mesh.MetaDataType,
+					clientID,
+					request,
+					func(rawRequest interface{}, resourceList core_model.ResourceList) core_model.ResourceList {
+						req := rawRequest.(*mesh_proto.MetadataSyncRequest)
+						metadataList := resourceList.(*core_mesh.MetaDataResourceList)
+
+						// only response the target MetaData Resource by application name or revision
+						respMetadataList := &core_mesh.MetaDataResourceList{}
+						for _, item := range metadataList.Items {
+							// MetaData.Name = AppName.Revision, so we need to check MedaData.Name has prefix of AppName
+							if item.Spec != nil && strings.HasPrefix(item.Spec.App, req.ApplicationName) {
+								if req.Revision != "" {
+									// revision is not empty, response the Metadata with application name and target revision
+									if req.Revision == item.Spec.Revision {
+										_ = respMetadataList.AddItem(item)
+									}
+								} else {
+									// revision is empty, response the Metadata with target application name
+									_ = respMetadataList.AddItem(item)
+								}
+							}
+						}
+
+						return respMetadataList
+					},
+				)
+				return nil
+			},
+		})
+	go func() {
+		// Handle requests from client
+		err := metadataSyncClient.HandleReceive()
+		if errors.Is(err, io.EOF) {
+			log.Info("DubboSyncClient finished gracefully")
+			errChan <- nil
+			return
+		}
+
+		log.Error(err, "DubboSyncClient finished with an error")
+		errChan <- errors.Wrap(err, "DubboSyncClient finished with an error")
+	}()
+
+	m.pusher.AddCallback(
+		core_mesh.MetaDataType,
+		metadataSyncClient.ClientID(),
+		func(items pusher.PushedItems) {
+			resourceList := items.ResourceList()
+			revision := items.Revision()
+			metadataList, ok := resourceList.(*core_mesh.MetaDataResourceList)
+			if !ok {
+				return
+			}
+
+			err := metadataSyncClient.Send(metadataList, revision)
+			if err != nil {
+				if errors.Is(err, io.EOF) {
+					log.Info("DubboSyncClient finished gracefully")
+					errChan <- nil
+					return
+				}
+
+				log.Error(err, "send metadata sync response failed", "metadataList", metadataList, "revision", revision)
+				errChan <- errors.Wrap(err, "DubboSyncClient send with an error")
+			}
+		},
+		func(resourceList core_model.ResourceList) core_model.ResourceList {
+			if resourceList.GetItemType() != core_mesh.MetaDataType {
+				return nil
+			}
+
+			// only send Metadata which client subscribed
+			newResourceList := &core_mesh.MeshResourceList{}
+			for _, resource := range resourceList.GetItems() {
+				expected := false
+				metaData := resource.(*core_mesh.MetaDataResource)
+				for _, applicationName := range metadataSyncStream.SubscribedApplicationNames() {
+					// MetaData.Name = AppName.Revision, so we need to check MedaData.Name has prefix of AppName
+					if strings.HasPrefix(metaData.Spec.GetApp(), applicationName) && mesh == resource.GetMeta().GetMesh() {
+						expected = true
+						break
+					}
+				}
+
+				if expected {
+					// find
+					_ = newResourceList.AddItem(resource)
+				}
+			}
+
+			return newResourceList
+		},
+	)
+
+	// in the end, remove callback of this client
+	defer m.pusher.RemoveCallback(core_mesh.MetaDataType, metadataSyncClient.ClientID())
+
+	for {
+		select {
+		case err := <-errChan:
+			if err == nil {
+				log.Info("MetadataSync finished gracefully")
+				return nil
+			}
+
+			log.Error(err, "MetadataSync finished with an error")
+			return status.Error(codes.Internal, err.Error())
+		}
+	}
 }
 
-func (s *MetadataServer) debounce(stopCh <-chan struct{}, pushFn func(m *RegisterRequest)) {}
+func (m *MetadataServer) debounce(stopCh <-chan struct{}, pushFn func(m *RegisterRequest)) {
+	ch := m.queue
+	var timeChan <-chan time.Time
+	var startDebounce time.Time
+	var lastConfigUpdateTime time.Time
+
+	pushCounter := 0
+	debouncedEvents := 0
+
+	var req *RegisterRequest
+
+	free := true
+	freeCh := make(chan struct{}, 1)
+
+	push := func(req *RegisterRequest) {
+		pushFn(req)
+		freeCh <- struct{}{}
+	}
+
+	pushWorker := func() {
+		eventDelay := time.Since(startDebounce)
+		quietTime := time.Since(lastConfigUpdateTime)
+		if eventDelay >= m.config.Debounce.Max || quietTime >= m.config.Debounce.After {
+			if req != nil {
+				pushCounter++
+
+				if req.ConfigsUpdated != nil {
+					log.Info("debounce stable[%d] %d for config %s: %v since last change, %v since last push",
+						pushCounter, debouncedEvents, configsUpdated(req),
+						quietTime, eventDelay)
+				}
+				free = false
+				go push(req)
+				req = nil
+				debouncedEvents = 0
+			}
+		} else {
+			timeChan = time.After(m.config.Debounce.After - quietTime)
+		}
+	}
+
+	for {
+		select {
+		case <-freeCh:
+			free = true
+			pushWorker()
+		case r := <-ch:
+			if !m.config.Debounce.Enable {
+				go push(r)
+				req = nil
+				continue
+			}
+
+			lastConfigUpdateTime = time.Now()
+			if debouncedEvents == 0 {
+				timeChan = time.After(200 * time.Millisecond)
+				startDebounce = lastConfigUpdateTime
+			}
+			debouncedEvents++
+
+			req = req.merge(r)
+		case <-timeChan:
+			if free {
+				pushWorker()
+			}
+		case <-stopCh:
+			return
+		}
+	}
+}
+
+func (m *MetadataServer) register(req *RegisterRequest) {
+	for key, metadata := range req.ConfigsUpdated {
+		for i := 0; i < 3; i++ {
+			if err := m.tryRegister(key, metadata); err != nil {
+				log.Error(err, "register failed", "key", key)
+			} else {
+				break
+			}
+		}
+	}
+}
+
+func (m *MetadataServer) tryRegister(key core_model.ResourceKey, newMetadata *mesh_proto.MetaData) error {
+	err := core_store.InTx(m.ctx, m.transactions, func(ctx context.Context) error {
+
+		// get Metadata Resource first,
+		// if Metadata is not found, create it,
+		// else update it.
+		metadata := core_mesh.NewMetaDataResource()
+		err := m.resourceManager.Get(m.ctx, metadata, core_store.GetBy(key))
+		if err != nil && !core_store.IsResourceNotFound(err) {
+			log.Error(err, "get Metadata Resource")
+			return err
+		}
+
+		if core_store.IsResourceNotFound(err) {
+			// create if not found
+			metadata.Spec = newMetadata
+			err = m.resourceManager.Create(m.ctx, metadata, core_store.CreateBy(key), core_store.CreatedAt(time.Now()))
+			if err != nil {
+				log.Error(err, "create Metadata Resource failed")
+				return err
+			}
+
+			log.Info("create Metadata Resource success", "key", key, "metadata", newMetadata)
+			return nil
+		} else {
+			// if found, update it
+			metadata.Spec = newMetadata
+
+			err = m.resourceManager.Update(m.ctx, metadata, core_store.ModifiedAt(time.Now()))
+			if err != nil {
+				log.Error(err, "update Metadata Resource failed")
+				return err
+			}
+
+			log.Info("update Metadata Resource success", "key", key, "metadata", newMetadata)
+			return nil
+		}
+	})
+	if err != nil {
+		log.Error(err, "transactions failed")
+		return err
+	}
+
+	return nil
+}
diff --git a/pkg/dubbo/pusher/interface.go b/pkg/dubbo/pusher/interface.go
index 1b1a6b2..01427b2 100644
--- a/pkg/dubbo/pusher/interface.go
+++ b/pkg/dubbo/pusher/interface.go
@@ -32,5 +32,5 @@
 	RemoveCallback(resourceType core_model.ResourceType, id string)
 	// InvokeCallback invoke a target callback
 	// for example, for a push request from client, invoke this function to push resource.
-	InvokeCallback(resourceType core_model.ResourceType, id string)
+	InvokeCallback(resourceType core_model.ResourceType, id string, request interface{}, requestFilter ResourceRequestFilter)
 }
diff --git a/pkg/dubbo/pusher/pusher.go b/pkg/dubbo/pusher/pusher.go
index f3aa079..9604dc2 100644
--- a/pkg/dubbo/pusher/pusher.go
+++ b/pkg/dubbo/pusher/pusher.go
@@ -54,8 +54,10 @@
 	resourceChangedEventListeners map[core_model.ResourceType]events.Listener
 	eventsChannel                 chan *changedEvent
 	requestChannel                chan struct {
-		resourceType core_model.ResourceType
-		id           string
+		request       interface{}
+		requestFilter ResourceRequestFilter
+		resourceType  core_model.ResourceType
+		id            string
 	}
 
 	resourceChangedCallbacks *ResourceChangedCallbacks
@@ -76,8 +78,10 @@
 		resourceChangedEventListeners: make(map[core_model.ResourceType]events.Listener),
 		eventsChannel:                 make(chan *changedEvent, eventsChannelSize),
 		requestChannel: make(chan struct {
-			resourceType core_model.ResourceType
-			id           string
+			request       interface{}
+			requestFilter ResourceRequestFilter
+			resourceType  core_model.ResourceType
+			id            string
 		}, requestChannelSize),
 
 		resourceChangedCallbacks: NewResourceChangedCallbacks(),
@@ -190,8 +194,13 @@
 				continue
 			}
 
+			resourceList := lastedPushed
+			if req.requestFilter != nil {
+				resourceList = req.requestFilter(req.request, lastedPushed)
+			}
+
 			cb.Invoke(PushedItems{
-				resourceList: lastedPushed,
+				resourceList: resourceList,
 				revision:     revision,
 			})
 		case <-fullResyncTicker.C:
@@ -226,9 +235,16 @@
 	p.resourceChangedCallbacks.RemoveCallBack(resourceType, id)
 }
 
-func (p *pusher) InvokeCallback(resourceType core_model.ResourceType, id string) {
+func (p *pusher) InvokeCallback(resourceType core_model.ResourceType, id string, request interface{}, requestFilter ResourceRequestFilter) {
 	p.requestChannel <- struct {
-		resourceType core_model.ResourceType
-		id           string
-	}{resourceType: resourceType, id: id}
+		request       interface{}
+		requestFilter ResourceRequestFilter
+		resourceType  core_model.ResourceType
+		id            string
+	}{
+		request:       request,
+		requestFilter: requestFilter,
+		resourceType:  resourceType,
+		id:            id,
+	}
 }
diff --git a/pkg/dubbo/pusher/resource_changed_callbacks.go b/pkg/dubbo/pusher/resource_changed_callbacks.go
index a185ebd..caf0675 100644
--- a/pkg/dubbo/pusher/resource_changed_callbacks.go
+++ b/pkg/dubbo/pusher/resource_changed_callbacks.go
@@ -28,6 +28,7 @@
 type (
 	ResourceChangedCallbackFn  func(items PushedItems)
 	ResourceChangedEventFilter func(resourceList core_model.ResourceList) core_model.ResourceList
+	ResourceRequestFilter      func(request interface{}, resourceList core_model.ResourceList) core_model.ResourceList
 )
 
 type ResourceChangedCallback struct {
diff --git a/pkg/dubbo/servicemapping/server.go b/pkg/dubbo/servicemapping/server.go
index addd354..bc802f3 100644
--- a/pkg/dubbo/servicemapping/server.go
+++ b/pkg/dubbo/servicemapping/server.go
@@ -126,16 +126,34 @@
 	errChan := make(chan error)
 
 	clientID := uuid.NewString()
-	mappingSyncStream := client.NewMappingSyncStream(stream)
-	// MappingSyncClient is to handle MappingSyncRequest from data plane
-	mappingSyncClient := client.NewMappingSyncClient(
+	mappingSyncStream := client.NewDubboSyncStream(stream)
+	// DubboSyncClient is to handle MappingSyncRequest from data plane
+	mappingSyncClient := client.NewDubboSyncClient(
 		log.WithName("client"),
 		clientID,
 		mappingSyncStream,
 		&client.Callbacks{
-			OnRequestReceived: func(request *mesh_proto.MappingSyncRequest) error {
+			OnMappingSyncRequestReceived: func(request *mesh_proto.MappingSyncRequest) error {
 				// when received request, invoke callback
-				s.pusher.InvokeCallback(core_mesh.MappingType, clientID)
+				s.pusher.InvokeCallback(
+					core_mesh.MappingType,
+					clientID,
+					request,
+					func(rawRequest interface{}, resourceList core_model.ResourceList) core_model.ResourceList {
+						req := rawRequest.(*mesh_proto.MappingSyncRequest)
+						mappingList := resourceList.(*core_mesh.MappingResourceList)
+
+						// only response the target Mapping Resource by interface name
+						respMappingList := &core_mesh.MappingResourceList{}
+						for _, item := range mappingList.Items {
+							if item.Spec != nil && req.InterfaceName == item.Spec.InterfaceName {
+								_ = respMappingList.AddItem(item)
+							}
+						}
+
+						return respMappingList
+					},
+				)
 				return nil
 			},
 		})
@@ -143,13 +161,13 @@
 		// Handle requests from client
 		err := mappingSyncClient.HandleReceive()
 		if errors.Is(err, io.EOF) {
-			log.Info("MappingSyncClient finished gracefully")
+			log.Info("DubboSyncClient finished gracefully")
 			errChan <- nil
 			return
 		}
 
-		log.Error(err, "MappingSyncClient finished with an error")
-		errChan <- errors.Wrap(err, "MappingSyncClient finished with an error")
+		log.Error(err, "DubboSyncClient finished with an error")
+		errChan <- errors.Wrap(err, "DubboSyncClient finished with an error")
 	}()
 
 	s.pusher.AddCallback(
@@ -166,13 +184,13 @@
 			err := mappingSyncClient.Send(mappingList, revision)
 			if err != nil {
 				if errors.Is(err, io.EOF) {
-					log.Info("MappingSyncClient finished gracefully")
+					log.Info("DubboSyncClient finished gracefully")
 					errChan <- nil
 					return
 				}
 
 				log.Error(err, "send mapping sync response failed", "mappingList", mappingList, "revision", revision)
-				errChan <- errors.Wrap(err, "MappingSyncClient send with an error")
+				errChan <- errors.Wrap(err, "DubboSyncClient send with an error")
 			}
 		},
 		func(resourceList core_model.ResourceList) core_model.ResourceList {
diff --git a/pkg/plugins/resources/k8s/store.go b/pkg/plugins/resources/k8s/store.go
index 4d09b54..c6c8e0a 100644
--- a/pkg/plugins/resources/k8s/store.go
+++ b/pkg/plugins/resources/k8s/store.go
@@ -19,6 +19,7 @@
 
 import (
 	"context"
+	"github.com/apache/dubbo-kubernetes/pkg/core/logger"
 	"strings"
 	"time"
 )
@@ -99,7 +100,9 @@
 
 	if err := s.Client.Create(ctx, obj); err != nil {
 		if kube_apierrs.IsAlreadyExists(err) {
-			return store.ErrorResourceAlreadyExists(r.Descriptor().Name, opts.Name, opts.Mesh)
+			// 如果资源已经存在了就直接返回空即可
+			logger.Sugar().Warn("资源已经存在了")
+			return nil
 		}
 		return errors.Wrap(err, "failed to create k8s resource")
 	}
diff --git a/pkg/plugins/resources/traditional/store.go b/pkg/plugins/resources/traditional/store.go
index 56cae11..721d87e 100644
--- a/pkg/plugins/resources/traditional/store.go
+++ b/pkg/plugins/resources/traditional/store.go
@@ -20,6 +20,7 @@
 import (
 	"context"
 	"fmt"
+	"github.com/dubbogo/go-zookeeper/zk"
 	"sync"
 )
 
@@ -47,7 +48,6 @@
 	core_model "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
 	"github.com/apache/dubbo-kubernetes/pkg/core/resources/store"
 	"github.com/apache/dubbo-kubernetes/pkg/events"
-	"github.com/apache/dubbo-kubernetes/pkg/plugins/util/ccache"
 )
 
 const (
@@ -555,9 +555,7 @@
 
 	switch resource.Descriptor().Name {
 	case mesh.DataplaneType:
-		app := opts.Labels[mesh_proto.Application]
-		revision := opts.Labels[mesh_proto.Revision]
-		key := ccache.GetDataplaneKey(app, revision)
+		key := opts.Name
 		value, ok := c.dCache.Load(key)
 		if !ok {
 			return nil
@@ -649,8 +647,12 @@
 		key := opts.Name
 		set, err := c.metadataReport.GetServiceAppMapping(key, mappingGroup, nil)
 		if err != nil {
+			if errors.Is(err, zk.ErrNoNode) {
+				return nil
+			}
 			return err
 		}
+
 		meta := &resourceMetaObject{
 			Name: opts.Name,
 			Mesh: opts.Mesh,
@@ -669,9 +671,9 @@
 			Mesh: opts.Mesh,
 		})
 	case mesh.MetaDataType:
-		labels := opts.Labels
-		revision := labels[mesh_proto.Revision]
-		app := labels[mesh_proto.Application]
+		name := opts.Name
+		// 拆分name得到revision和app
+		app, revision := splitAppAndRevision(name)
 		if revision == "" {
 			children, err := c.regClient.GetChildren(getMetadataPath(app))
 			if err != nil {
diff --git a/pkg/plugins/resources/traditional/path_util.go b/pkg/plugins/resources/traditional/utils.go
similarity index 90%
rename from pkg/plugins/resources/traditional/path_util.go
rename to pkg/plugins/resources/traditional/utils.go
index 4f9cb08..999d240 100644
--- a/pkg/plugins/resources/traditional/path_util.go
+++ b/pkg/plugins/resources/traditional/utils.go
@@ -19,6 +19,7 @@
 
 import (
 	"fmt"
+	"strings"
 )
 
 func GenerateCpGroupPath(resourceName string, name string) string {
@@ -66,3 +67,10 @@
 	}
 	return rootDir
 }
+
+func splitAppAndRevision(name string) (app string, revision string) {
+	split := strings.Split(name, "-")
+	n := len(split)
+	app = strings.Replace(name, "-"+split[n-1], "", -1)
+	return app, split[n-1]
+}
diff --git a/pkg/plugins/resources/traditional/utils_test.go b/pkg/plugins/resources/traditional/utils_test.go
new file mode 100644
index 0000000..c5593ca
--- /dev/null
+++ b/pkg/plugins/resources/traditional/utils_test.go
@@ -0,0 +1,28 @@
+/*
+ * 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 traditional
+
+import "testing"
+
+func TestSplitAppAndRevision(t *testing.T) {
+	name := "dubbo-springboot-demo-lixinyang-bdc0958191bba7a0f050a32709ee1111"
+	app, revision := splitAppAndRevision(name)
+	if app != "dubbo-springboot-demo-lixinyang" && revision != "bdc0958191bba7a0f050a32709ee1111" {
+		t.Error("解析错误")
+	}
+}
diff --git a/pkg/plugins/runtime/k8s/controllers/pod_controller.go b/pkg/plugins/runtime/k8s/controllers/pod_controller.go
index 66407f6..a838de1 100644
--- a/pkg/plugins/runtime/k8s/controllers/pod_controller.go
+++ b/pkg/plugins/runtime/k8s/controllers/pod_controller.go
@@ -117,6 +117,14 @@
 }
 
 func (r *PodReconciler) reconcileDataplane(ctx context.Context, pod *kube_core.Pod, log logr.Logger) error {
+	ns := kube_core.Namespace{}
+	if err := r.Client.Get(ctx, kube_types.NamespacedName{Name: pod.Namespace}, &ns); err != nil {
+		return errors.Wrap(err, "unable to get Namespace for Pod")
+	}
+	if ns.Status.Phase == kube_core.NamespaceTerminating {
+		r.Log.V(1).Info("namespace is terminating. Ignoring reconciliation")
+		return nil
+	}
 	dp := &mesh_k8s.Dataplane{
 		ObjectMeta: kube_meta.ObjectMeta{Name: pod.Name, Namespace: pod.Namespace},
 	}
@@ -131,11 +139,6 @@
 		return r.deleteObjectIfExist(ctx, dp, "pod was evicted", log)
 	}
 
-	ns := kube_core.Namespace{}
-	if err := r.Client.Get(ctx, kube_types.NamespacedName{Name: pod.Namespace}, &ns); err != nil {
-		return errors.Wrap(err, "unable to get Namespace for Pod")
-	}
-
 	services, err := r.findMatchingServices(ctx, pod)
 	if err != nil {
 		return err
diff --git a/pkg/test/component.go b/pkg/test/component.go
index d4317cc..466c6f5 100644
--- a/pkg/test/component.go
+++ b/pkg/test/component.go
@@ -19,65 +19,84 @@
 
 import (
 	mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
-	"github.com/apache/dubbo-kubernetes/pkg/config/core"
+	"github.com/apache/dubbo-kubernetes/pkg/core"
 	"github.com/apache/dubbo-kubernetes/pkg/core/resources/apis/mesh"
 	core_model "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
 	"github.com/apache/dubbo-kubernetes/pkg/core/resources/store"
 	core_runtime "github.com/apache/dubbo-kubernetes/pkg/core/runtime"
+	"strings"
+	"time"
 )
 
+var testServerLog = core.Log.WithName("test")
+
 func Setup(rt core_runtime.Runtime) error {
-	if rt.GetDeployMode() == core.KubernetesMode {
-		return nil
+	testServer := NewTestServer(rt)
+	if err := rt.Add(testServer); err != nil {
+		testServerLog.Error(err, "fail to start the test server")
 	}
+	return nil
+}
+
+type TestServer struct {
+	rt core_runtime.Runtime
+}
+
+func NewTestServer(rt core_runtime.Runtime) *TestServer {
+	return &TestServer{rt: rt}
+}
+
+func (t *TestServer) Start(stop <-chan struct{}) error {
 	// 测试mapping资源
-	if err := testMapping(rt); err != nil {
+	if err := testMapping(t.rt); err != nil {
 		return err
 	}
 	// 测试metadata资源
-	if err := testMetadata(rt); err != nil {
+	if err := testMetadata(t.rt); err != nil {
 		return err
 	}
+
+	time.Sleep(3 * time.Second)
 	// 测试dataplane资源
-	if err := testDataplane(rt); err != nil {
+	if err := testDataplane(t.rt); err != nil {
 		return err
 	}
+
 	return nil
 }
 
+func (a *TestServer) NeedLeaderElection() bool {
+	return false
+}
+
 // dataplane资源只有get, list接口, 其余均不支持
 func testDataplane(rt core_runtime.Runtime) error {
 	manager := rt.ResourceManager()
 	dataplaneResource := mesh.NewDataplaneResource()
-	// get
-	if err := manager.Get(rt.AppContext(), dataplaneResource, store.GetByApplication("dubbo-springboot-demo-provider"), store.GetByRevision("bdc0958191bba7a0f050a32709ee1262")); err != nil {
-		return err
-	}
 
 	// list
 	dataplaneList := &mesh.DataplaneResourceList{}
 	if err := manager.List(rt.AppContext(), dataplaneList); err != nil {
 		return err
 	}
+
+	if len(dataplaneList.Items) > 0 {
+		// get
+		if err := manager.Get(rt.AppContext(), dataplaneResource,
+			store.GetBy(core_model.ResourceKey{
+				Name: dataplaneList.Items[0].Meta.GetName(),
+				Mesh: "default",
+			})); err != nil {
+			return err
+		}
+	}
+
 	return nil
 }
 
 // metadata资源没有删除能力
 func testMetadata(rt core_runtime.Runtime) error {
 	manager := rt.ResourceManager()
-	metadata1 := mesh.NewMetaDataResource()
-	// get
-	if err := manager.Get(rt.AppContext(), metadata1, store.GetByApplication("dubbo-springboot-demo-provider")); err != nil {
-		return err
-	}
-
-	// list
-	metadataList := &mesh.MetaDataResourceList{}
-
-	if err := manager.List(rt.AppContext(), metadataList); err != nil {
-		return err
-	}
-
 	// create
 	metadata2 := mesh.NewMetaDataResource()
 	err := metadata2.SetSpec(&mesh_proto.MetaData{
@@ -92,12 +111,32 @@
 	if err != nil {
 		return err
 	}
-	if err := manager.Create(rt.AppContext(), metadata2); err != nil {
+	if err := manager.Create(rt.AppContext(), metadata2, store.CreateBy(core_model.ResourceKey{
+		Name: metadata2.Spec.App + "-" + metadata2.Spec.Revision,
+		Mesh: "default",
+	})); err != nil {
+		return err
+	}
+
+	metadata1 := mesh.NewMetaDataResource()
+	// get
+	if err := manager.Get(rt.AppContext(), metadata1, store.GetBy(core_model.ResourceKey{
+		Name: metadata2.Spec.App + "-" + metadata2.Spec.Revision,
+		Mesh: "default",
+	})); err != nil {
+		return err
+	}
+
+	// list
+	metadataList := &mesh.MetaDataResourceList{}
+
+	if err := manager.List(rt.AppContext(), metadataList); err != nil {
 		return err
 	}
 
 	// update
 	metadata3 := mesh.NewMetaDataResource()
+	metadata3.SetMeta(metadata1.GetMeta())
 	err = metadata3.SetSpec(&mesh_proto.MetaData{
 		App:      "dubbo-springboot-demo-lixinyang",
 		Revision: "bdc0958191bba7a0f050a32709ee1111",
@@ -119,14 +158,6 @@
 // mapping资源没有删除功能
 func testMapping(rt core_runtime.Runtime) error {
 	manager := rt.ResourceManager()
-	// mapping test
-	mapping1 := mesh.NewMappingResource()
-	// get
-	if err := manager.Get(rt.AppContext(), mapping1, store.GetBy(core_model.ResourceKey{
-		Name: "org.apache.dubbo.springboot.demo.DemoService",
-	})); err != nil {
-		return err
-	}
 
 	mapping2 := mesh.NewMappingResource()
 	err := mapping2.SetSpec(&mesh_proto.Mapping{
@@ -141,7 +172,20 @@
 	}
 
 	// create
-	if err := manager.Create(rt.AppContext(), mapping2); err != nil {
+	if err := manager.Create(rt.AppContext(), mapping2, store.CreateBy(core_model.ResourceKey{
+		Name: strings.ToLower(strings.ReplaceAll(mapping2.Spec.InterfaceName, ".", "-")),
+		Mesh: "default",
+	})); err != nil {
+		return err
+	}
+
+	// mapping test
+	mapping1 := mesh.NewMappingResource()
+	// get
+	if err := manager.Get(rt.AppContext(), mapping1, store.GetBy(core_model.ResourceKey{
+		Name: strings.ToLower(strings.ReplaceAll("org.apache.dubbo.springboot.demo.DemoService1", ".", "-")),
+		Mesh: "default",
+	})); err != nil {
 		return err
 	}
 
@@ -153,6 +197,7 @@
 	}
 
 	mapping3 := mesh.NewMappingResource()
+	mapping3.SetMeta(mapping1.GetMeta())
 	err = mapping3.SetSpec(&mesh_proto.Mapping{
 		Zone:          "zone2",
 		InterfaceName: "org.apache.dubbo.springboot.demo.DemoService1",
diff --git a/test/app/consumer/deployment.yaml b/test/app/consumer/deployment.yaml
index ec83ebf..0cf965c 100644
--- a/test/app/consumer/deployment.yaml
+++ b/test/app/consumer/deployment.yaml
@@ -19,7 +19,7 @@
   name: dubbo-samples-apiserver-consumer
   namespace: dubbo-system
 spec:
-  replicas: 1
+  replicas: 2
   selector:
     matchLabels:
       app: dubbo-samples-apiserver-consumer
