diff --git a/metadata/report/consul/report.go b/metadata/report/consul/report.go
index 690534220bac690569af014cc5401659bcb0f0ae..2d3d00d608ccd00d7b1bf8c3ca7d5d0d8edbbd91 100644
--- a/metadata/report/consul/report.go
+++ b/metadata/report/consul/report.go
@@ -34,9 +34,8 @@ var (
 )
 
 func init() {
-	mf := &consulMetadataReportFactory{}
 	extension.SetMetadataReportFactory("consul", func() factory.MetadataReportFactory {
-		return mf
+		return &consulMetadataReportFactory{}
 	})
 }
 
@@ -75,17 +74,17 @@ func (m *consulMetadataReport) RemoveServiceMetadata(metadataIdentifier *identif
 }
 
 // GetExportedURLs gets the urls.
-func (m *consulMetadataReport) GetExportedURLs(metadataIdentifier *identifier.ServiceMetadataIdentifier) []string {
+func (m *consulMetadataReport) GetExportedURLs(metadataIdentifier *identifier.ServiceMetadataIdentifier) ([]string, error) {
 	k := metadataIdentifier.GetIdentifierKey()
 	kv, _, err := m.client.KV().Get(k, nil)
 	if err != nil {
-		panic(err)
+		return emptyStrSlice, err
 	}
 
 	if kv == nil {
-		return emptyStrSlice
+		return emptyStrSlice, nil
 	}
-	return []string{string(kv.Value)}
+	return []string{string(kv.Value)}, nil
 }
 
 // SaveSubscribedData saves the urls.
@@ -96,31 +95,31 @@ func (m *consulMetadataReport) SaveSubscribedData(subscriberMetadataIdentifier *
 }
 
 // GetSubscribedURLs gets the urls.
-func (m *consulMetadataReport) GetSubscribedURLs(subscriberMetadataIdentifier *identifier.SubscriberMetadataIdentifier) []string {
+func (m *consulMetadataReport) GetSubscribedURLs(subscriberMetadataIdentifier *identifier.SubscriberMetadataIdentifier) ([]string, error) {
 	k := subscriberMetadataIdentifier.GetIdentifierKey()
 	kv, _, err := m.client.KV().Get(k, nil)
 	if err != nil {
-		panic(err)
+		return emptyStrSlice, err
 	}
 
 	if kv == nil {
-		return emptyStrSlice
+		return emptyStrSlice, nil
 	}
-	return []string{string(kv.Value)}
+	return []string{string(kv.Value)}, nil
 }
 
 // GetServiceDefinition gets the service definition.
-func (m *consulMetadataReport) GetServiceDefinition(metadataIdentifier *identifier.MetadataIdentifier) string {
+func (m *consulMetadataReport) GetServiceDefinition(metadataIdentifier *identifier.MetadataIdentifier) (string, error) {
 	k := metadataIdentifier.GetIdentifierKey()
 	kv, _, err := m.client.KV().Get(k, nil)
 	if err != nil {
-		panic(err)
+		return "", err
 	}
 
 	if kv == nil {
-		return ""
+		return "", nil
 	}
-	return string(kv.Value)
+	return string(kv.Value), nil
 }
 
 type consulMetadataReportFactory struct {
diff --git a/metadata/report/consul/report_test.go b/metadata/report/consul/report_test.go
index 7996421f7219faeecf90b3e5279c9e848e0b02cf..b982d7176572fc4a0fcadcc252865c8dddd46169 100644
--- a/metadata/report/consul/report_test.go
+++ b/metadata/report/consul/report_test.go
@@ -115,8 +115,9 @@ func (suite *consulMetadataReportTestSuite) testRemoveServiceMetadata() {
 
 func (suite *consulMetadataReportTestSuite) testGetExportedURLs() {
 	serviceMi := newServiceMetadataIdentifier("provider")
-	urls := suite.m.GetExportedURLs(serviceMi)
+	urls, err := suite.m.GetExportedURLs(serviceMi)
 	assert.Equal(suite.t, 1, len(urls))
+	assert.NoError(suite.t, err)
 }
 
 func (suite *consulMetadataReportTestSuite) testSaveSubscribedData(url common.URL) {
@@ -129,14 +130,16 @@ func (suite *consulMetadataReportTestSuite) testSaveSubscribedData(url common.UR
 
 func (suite *consulMetadataReportTestSuite) testGetSubscribedURLs() {
 	subscribeMi := newSubscribeMetadataIdentifier("provider")
-	urls := suite.m.GetSubscribedURLs(subscribeMi)
+	urls, err := suite.m.GetSubscribedURLs(subscribeMi)
 	assert.Equal(suite.t, 1, len(urls))
+	assert.NoError(suite.t, err)
 }
 
 func (suite *consulMetadataReportTestSuite) testGetServiceDefinition() {
 	providerMi := newMetadataIdentifier("provider")
-	providerMeta := suite.m.GetServiceDefinition(providerMi)
+	providerMeta, err := suite.m.GetServiceDefinition(providerMi)
 	assert.Equal(suite.t, "provider", providerMeta)
+	assert.NoError(suite.t, err)
 }
 
 func test1(t *testing.T) {
diff --git a/metadata/report/delegate/delegate_report.go b/metadata/report/delegate/delegate_report.go
index 08092a7ddcbd0363720f520407cf25e8ad33fff0..64103b259ac0107e5b30aa64a21d80e34850ed45 100644
--- a/metadata/report/delegate/delegate_report.go
+++ b/metadata/report/delegate/delegate_report.go
@@ -235,7 +235,7 @@ func (mr *MetadataReport) RemoveServiceMetadata(identifier *identifier.ServiceMe
 }
 
 // GetExportedURLs will delegate to call remote metadata's sdk to get exported urls
-func (mr *MetadataReport) GetExportedURLs(identifier *identifier.ServiceMetadataIdentifier) []string {
+func (mr *MetadataReport) GetExportedURLs(identifier *identifier.ServiceMetadataIdentifier) ([]string, error) {
 	report := instance.GetMetadataReportInstance()
 	return report.GetExportedURLs(identifier)
 }
@@ -260,13 +260,13 @@ func (mr *MetadataReport) SaveSubscribedData(identifier *identifier.SubscriberMe
 }
 
 // GetSubscribedURLs will delegate to call remote metadata's sdk to get subscribed urls
-func (MetadataReport) GetSubscribedURLs(identifier *identifier.SubscriberMetadataIdentifier) []string {
+func (MetadataReport) GetSubscribedURLs(identifier *identifier.SubscriberMetadataIdentifier) ([]string, error) {
 	report := instance.GetMetadataReportInstance()
 	return report.GetSubscribedURLs(identifier)
 }
 
 // GetServiceDefinition will delegate to call remote metadata's sdk to get service definitions
-func (MetadataReport) GetServiceDefinition(identifier *identifier.MetadataIdentifier) string {
+func (MetadataReport) GetServiceDefinition(identifier *identifier.MetadataIdentifier) (string, error) {
 	report := instance.GetMetadataReportInstance()
 	return report.GetServiceDefinition(identifier)
 }
diff --git a/metadata/report/nacos/report.go b/metadata/report/nacos/report.go
index 7db4c85d9a0f038dfd9e89492e72303c867379b2..988ea128388d6d81d2c110696e589ee4acabd8dd 100644
--- a/metadata/report/nacos/report.go
+++ b/metadata/report/nacos/report.go
@@ -38,9 +38,8 @@ import (
 )
 
 func init() {
-	mf := &nacosMetadataReportFactory{}
 	extension.SetMetadataReportFactory("nacos", func() factory.MetadataReportFactory {
-		return mf
+		return &nacosMetadataReportFactory{}
 	})
 }
 
@@ -86,7 +85,7 @@ func (n *nacosMetadataReport) RemoveServiceMetadata(metadataIdentifier *identifi
 }
 
 // GetExportedURLs gets the urls.
-func (n *nacosMetadataReport) GetExportedURLs(metadataIdentifier *identifier.ServiceMetadataIdentifier) []string {
+func (n *nacosMetadataReport) GetExportedURLs(metadataIdentifier *identifier.ServiceMetadataIdentifier) ([]string, error) {
 	return n.getConfigAsArray(vo.ConfigParam{
 		DataId: metadataIdentifier.GetIdentifierKey(),
 		Group:  metadataIdentifier.Group,
@@ -103,7 +102,7 @@ func (n *nacosMetadataReport) SaveSubscribedData(subscriberMetadataIdentifier *i
 }
 
 // GetSubscribedURLs gets the urls.
-func (n *nacosMetadataReport) GetSubscribedURLs(subscriberMetadataIdentifier *identifier.SubscriberMetadataIdentifier) []string {
+func (n *nacosMetadataReport) GetSubscribedURLs(subscriberMetadataIdentifier *identifier.SubscriberMetadataIdentifier) ([]string, error) {
 	return n.getConfigAsArray(vo.ConfigParam{
 		DataId: subscriberMetadataIdentifier.GetIdentifierKey(),
 		Group:  subscriberMetadataIdentifier.Group,
@@ -111,7 +110,7 @@ func (n *nacosMetadataReport) GetSubscribedURLs(subscriberMetadataIdentifier *id
 }
 
 // GetServiceDefinition gets the service definition.
-func (n *nacosMetadataReport) GetServiceDefinition(metadataIdentifier *identifier.MetadataIdentifier) string {
+func (n *nacosMetadataReport) GetServiceDefinition(metadataIdentifier *identifier.MetadataIdentifier) (string, error) {
 	return n.getConfig(vo.ConfigParam{
 		DataId: metadataIdentifier.GetIdentifierKey(),
 		Group:  metadataIdentifier.Group,
@@ -145,28 +144,34 @@ func (n *nacosMetadataReport) deleteMetadata(param vo.ConfigParam) error {
 
 // getConfigAsArray will read the config and then convert it as an one-element array
 // error or config not found, an empty list will be returned.
-func (n *nacosMetadataReport) getConfigAsArray(param vo.ConfigParam) []string {
-	cfg := n.getConfig(param)
+func (n *nacosMetadataReport) getConfigAsArray(param vo.ConfigParam) ([]string, error) {
 	res := make([]string, 0, 1)
+
+	cfg, err := n.getConfig(param)
+	if err != nil {
+		return res, err
+	}
 	if len(cfg) == 0 {
-		return res
+		return res, nil
 	}
+
 	decodeCfg, err := url.QueryUnescape(cfg)
 	if err != nil {
 		logger.Errorf("The config is invalid: %s", cfg)
-		return res
+		return res, err
 	}
 	res = append(res, decodeCfg)
-	return res
+	return res, nil
 }
 
 // getConfig will read the config
-func (n *nacosMetadataReport) getConfig(param vo.ConfigParam) string {
+func (n *nacosMetadataReport) getConfig(param vo.ConfigParam) (string, error) {
 	cfg, err := n.client.GetConfig(param)
 	if err != nil {
 		logger.Errorf("Finding the configuration failed: %v", param)
+		return "", err
 	}
-	return cfg
+	return cfg, nil
 }
 
 type nacosMetadataReportFactory struct {
diff --git a/metadata/report/nacos/report_test.go b/metadata/report/nacos/report_test.go
index 971c7bfe8f4ad240701118bae75c4711c53b7893..be01eb22f7e95966c3bf816fdf648629b64380a3 100644
--- a/metadata/report/nacos/report_test.go
+++ b/metadata/report/nacos/report_test.go
@@ -54,8 +54,9 @@ func TestNacosMetadataReport_CRUD(t *testing.T) {
 	err = rpt.SaveServiceMetadata(serviceMi, serviceUrl)
 	assert.Nil(t, err)
 
-	exportedUrls := rpt.GetExportedURLs(serviceMi)
+	exportedUrls, err := rpt.GetExportedURLs(serviceMi)
 	assert.Equal(t, 1, len(exportedUrls))
+	assert.Nil(t, err)
 
 	subMi := newSubscribeMetadataIdentifier()
 	urls := []string{serviceUrl.String()}
@@ -63,8 +64,9 @@ func TestNacosMetadataReport_CRUD(t *testing.T) {
 	err = rpt.SaveSubscribedData(subMi, string(bytes))
 	assert.Nil(t, err)
 
-	subscribeUrl := rpt.GetSubscribedURLs(subMi)
+	subscribeUrl, err := rpt.GetSubscribedURLs(subMi)
 	assert.Equal(t, 1, len(subscribeUrl))
+	assert.Nil(t, err)
 
 	err = rpt.RemoveServiceMetadata(serviceMi)
 	assert.Nil(t, err)
diff --git a/metadata/report/report.go b/metadata/report/report.go
index d5930dc1fddc616ae1e2d9faa19bc1f9cbf7c6bf..3ef8f5925e6c81c493c8d2ca67e1c5efa3717f55 100644
--- a/metadata/report/report.go
+++ b/metadata/report/report.go
@@ -28,8 +28,8 @@ type MetadataReport interface {
 	StoreConsumerMetadata(*identifier.MetadataIdentifier, string) error
 	SaveServiceMetadata(*identifier.ServiceMetadataIdentifier, common.URL) error
 	RemoveServiceMetadata(*identifier.ServiceMetadataIdentifier) error
-	GetExportedURLs(*identifier.ServiceMetadataIdentifier) []string
+	GetExportedURLs(*identifier.ServiceMetadataIdentifier) ([]string, error)
 	SaveSubscribedData(*identifier.SubscriberMetadataIdentifier, string) error
-	GetSubscribedURLs(*identifier.SubscriberMetadataIdentifier) []string
-	GetServiceDefinition(*identifier.MetadataIdentifier) string
+	GetSubscribedURLs(*identifier.SubscriberMetadataIdentifier) ([]string, error)
+	GetServiceDefinition(*identifier.MetadataIdentifier) (string, error)
 }
diff --git a/metadata/report/zookeeper/report.go b/metadata/report/zookeeper/report.go
index 955393f79c9b50f35e2d6d34a30129c5554e2219..58c4791c2b558e6562368a93bc88c9b743699659 100644
--- a/metadata/report/zookeeper/report.go
+++ b/metadata/report/zookeeper/report.go
@@ -37,9 +37,8 @@ var (
 )
 
 func init() {
-	mf := &zookeeperMetadataReportFactory{}
 	extension.SetMetadataReportFactory("zookeeper", func() factory.MetadataReportFactory {
-		return mf
+		return &zookeeperMetadataReportFactory{}
 	})
 }
 
@@ -75,17 +74,17 @@ func (m *zookeeperMetadataReport) RemoveServiceMetadata(metadataIdentifier *iden
 }
 
 // GetExportedURLs gets the urls.
-func (m *zookeeperMetadataReport) GetExportedURLs(metadataIdentifier *identifier.ServiceMetadataIdentifier) []string {
+func (m *zookeeperMetadataReport) GetExportedURLs(metadataIdentifier *identifier.ServiceMetadataIdentifier) ([]string, error) {
 	k := m.rootDir + metadataIdentifier.GetFilePathKey()
 	v, _, err := m.client.GetContent(k)
 	if err != nil {
-		panic(err)
+		return emptyStrSlice, err
 	}
 
 	if len(v) == 0 {
-		return emptyStrSlice
+		return emptyStrSlice, nil
 	}
-	return []string{string(v)}
+	return []string{string(v)}, nil
 }
 
 // SaveSubscribedData saves the urls.
@@ -95,27 +94,27 @@ func (m *zookeeperMetadataReport) SaveSubscribedData(subscriberMetadataIdentifie
 }
 
 // GetSubscribedURLs gets the urls.
-func (m *zookeeperMetadataReport) GetSubscribedURLs(subscriberMetadataIdentifier *identifier.SubscriberMetadataIdentifier) []string {
+func (m *zookeeperMetadataReport) GetSubscribedURLs(subscriberMetadataIdentifier *identifier.SubscriberMetadataIdentifier) ([]string, error) {
 	k := m.rootDir + subscriberMetadataIdentifier.GetFilePathKey()
 	v, _, err := m.client.GetContent(k)
 	if err != nil {
-		panic(err)
+		return emptyStrSlice, err
 	}
 
 	if len(v) == 0 {
-		return emptyStrSlice
+		return emptyStrSlice, nil
 	}
-	return []string{string(v)}
+	return []string{string(v)}, nil
 }
 
 // GetServiceDefinition gets the service definition.
-func (m *zookeeperMetadataReport) GetServiceDefinition(metadataIdentifier *identifier.MetadataIdentifier) string {
+func (m *zookeeperMetadataReport) GetServiceDefinition(metadataIdentifier *identifier.MetadataIdentifier) (string, error) {
 	k := m.rootDir + metadataIdentifier.GetFilePathKey()
 	v, _, err := m.client.GetContent(k)
 	if err != nil {
-		panic(err)
+		return "", err
 	}
-	return string(v)
+	return string(v), nil
 }
 
 type zookeeperMetadataReportFactory struct {
diff --git a/metadata/report/zookeeper/report_test.go b/metadata/report/zookeeper/report_test.go
index c83022bd34e9b8708e91680ce80b670af7c9c21f..5d25e3c496dec4d70f221d0f6d5b0dde08ca6304 100644
--- a/metadata/report/zookeeper/report_test.go
+++ b/metadata/report/zookeeper/report_test.go
@@ -115,8 +115,9 @@ func (suite *zookeeperMetadataReportTestSuite) testRemoveServiceMetadata() {
 
 func (suite *zookeeperMetadataReportTestSuite) testGetExportedURLs() {
 	serviceMi := newServiceMetadataIdentifier("provider")
-	urls := suite.m.GetExportedURLs(serviceMi)
+	urls, err := suite.m.GetExportedURLs(serviceMi)
 	assert.Equal(suite.t, 1, len(urls))
+	assert.NoError(suite.t, err)
 }
 
 func (suite *zookeeperMetadataReportTestSuite) testSaveSubscribedData(url common.URL) {
@@ -129,14 +130,16 @@ func (suite *zookeeperMetadataReportTestSuite) testSaveSubscribedData(url common
 
 func (suite *zookeeperMetadataReportTestSuite) testGetSubscribedURLs() {
 	subscribeMi := newSubscribeMetadataIdentifier("provider")
-	urls := suite.m.GetSubscribedURLs(subscribeMi)
+	urls, err := suite.m.GetSubscribedURLs(subscribeMi)
 	assert.Equal(suite.t, 1, len(urls))
+	assert.NoError(suite.t, err)
 }
 
 func (suite *zookeeperMetadataReportTestSuite) testGetServiceDefinition() {
 	providerMi := newMetadataIdentifier("provider")
-	providerMeta := suite.m.GetServiceDefinition(providerMi)
+	providerMeta, err := suite.m.GetServiceDefinition(providerMi)
 	assert.Equal(suite.t, "provider", providerMeta)
+	assert.NoError(suite.t, err)
 }
 
 func test1(t *testing.T) {