diff --git a/metadata/report/nacos/report.go b/metadata/report/nacos/report.go
index fd8182c..f889ad1 100644
--- a/metadata/report/nacos/report.go
+++ b/metadata/report/nacos/report.go
@@ -69,14 +69,24 @@
 
 // GetAppMetadata get metadata info from nacos
 func (n *nacosMetadataReport) GetAppMetadata(metadataIdentifier *identifier.SubscriberMetadataIdentifier) (*common.MetadataInfo, error) {
+	// compatible with java impl first
 	data, err := n.getConfig(vo.ConfigParam{
-		DataId: metadataIdentifier.GetIdentifierKey(),
-		Group:  n.group,
+		DataId: metadataIdentifier.Application,
+		Group:  metadataIdentifier.Revision,
 	})
 	if err != nil {
 		return nil, err
 	}
-
+	if data == "" {
+		// compatible with dubbo-go 3.1.x before
+		data, err = n.getConfig(vo.ConfigParam{
+			DataId: metadataIdentifier.GetIdentifierKey(),
+			Group:  n.group,
+		})
+		if err != nil {
+			return nil, err
+		}
+	}
 	var metadataInfo common.MetadataInfo
 	err = json.Unmarshal([]byte(data), &metadataInfo)
 	if err != nil {
@@ -91,7 +101,16 @@
 	if err != nil {
 		return err
 	}
-
+	// compatible with java impl
+	err = n.storeMetadata(vo.ConfigParam{
+		DataId:  metadataIdentifier.Application,
+		Group:   metadataIdentifier.Revision,
+		Content: string(data),
+	})
+	if err != nil {
+		return err
+	}
+	// compatible with dubbo-go 3.1.x before
 	return n.storeMetadata(vo.ConfigParam{
 		DataId:  metadataIdentifier.GetIdentifierKey(),
 		Group:   n.group,
diff --git a/metadata/report/nacos/report_test.go b/metadata/report/nacos/report_test.go
index 759a456..3d87eaa 100644
--- a/metadata/report/nacos/report_test.go
+++ b/metadata/report/nacos/report_test.go
@@ -212,7 +212,7 @@
 
 	ctrl := gomock.NewController(t)
 	mnc := NewMockIConfigClient(ctrl)
-	mnc.EXPECT().GetConfig(gomock.Any()).Return(string(data), nil)
+	mnc.EXPECT().GetConfig(gomock.Any()).MaxTimes(2).Return(string(data), nil)
 	nc := &nacosClient.NacosConfigClient{}
 	nc.SetClient(mnc)
 
@@ -253,7 +253,7 @@
 func Test_nacosMetadataReport_PublishAppMetadata(t *testing.T) {
 	ctrl := gomock.NewController(t)
 	mnc := NewMockIConfigClient(ctrl)
-	mnc.EXPECT().PublishConfig(gomock.Any()).Return(true, nil)
+	mnc.EXPECT().PublishConfig(gomock.Any()).Times(2).Return(true, nil)
 	nc := &nacosClient.NacosConfigClient{}
 	nc.SetClient(mnc)
 
