diff --git a/common/extension/metadata_report_factory.go b/common/extension/metadata_report_factory.go
index a28eb2e3c12ab8665cc8e0c1fa4001d6e9dd04d4..0ae0793bb4459767cb42fb1860fc484388aae1a3 100644
--- a/common/extension/metadata_report_factory.go
+++ b/common/extension/metadata_report_factory.go
@@ -22,7 +22,7 @@ import (
 )
 
 var (
-	metaDataReportFactories = make(map[string]func() metadata.MetadataReportFactory)
+	metaDataReportFactories = make(map[string]func() metadata.MetadataReportFactory, 8)
 )
 
 // SetMetadataReportFactory ...
@@ -30,7 +30,7 @@ func SetMetadataReportFactory(name string, v func() metadata.MetadataReportFacto
 	metaDataReportFactories[name] = v
 }
 
-// GetConfigCenterFactory ...
+// GetMetadataReportFactory ...
 func GetMetadataReportFactory(name string) metadata.MetadataReportFactory {
 	if metaDataReportFactories[name] == nil {
 		panic("metadata report for " + name + " is not existing, make sure you have import the package.")
diff --git a/config/consumer_config.go b/config/consumer_config.go
index e853fc1b11d45c4d08d393029f92ca6faa561904..3950f3ba0c8ddace1a674b3ce12ed205da90cb4e 100644
--- a/config/consumer_config.go
+++ b/config/consumer_config.go
@@ -45,8 +45,6 @@ type ConsumerConfig struct {
 	Filter     string `yaml:"filter" json:"filter,omitempty" property:"filter"`
 	// application
 	ApplicationConfig *ApplicationConfig `yaml:"application" json:"application,omitempty" property:"application"`
-	// metadata-report
-	MetadataReportConfig *MetadataReportConfig `yaml:"metadata_report" json:"metadata_report,omitempty" property:"metadata_report"`
 
 	// client
 	Connect_Timeout string `default:"100ms"  yaml:"connect_timeout" json:"connect_timeout,omitempty" property:"connect_timeout"`
@@ -130,10 +128,6 @@ func ConsumerInit(confConFile string) error {
 		}
 	}
 
-	//start the metadata report if config set
-	if err := startMetadataReport(); err != nil {
-		return perrors.WithMessagef(err, "Consumer start metadata report error ,error is {%#v}", err)
-	}
 	logger.Debugf("consumer config{%#v}\n", consumerConfig)
 	return nil
 }
diff --git a/config/metadata_report_config.go b/config/metadata_report_config.go
index bf1af51345856fec8bbc197e6e26fa1a535fd084..41fb6b4769e59784d8d18c3f82b956fd029d4ff7 100644
--- a/config/metadata_report_config.go
+++ b/config/metadata_report_config.go
@@ -51,21 +51,23 @@ func (c *MetadataReportConfig) Prefix() string {
 // UnmarshalYAML ...
 func (c *MetadataReportConfig) UnmarshalYAML(unmarshal func(interface{}) error) error {
 	if err := defaults.Set(c); err != nil {
-		return err
+		return perrors.WithStack(err)
 	}
 	type plain MetadataReportConfig
 	if err := unmarshal((*plain)(c)); err != nil {
-		return err
+		return perrors.WithStack(err)
 	}
 	return nil
 }
 
 // ToUrl ...
 func (c *MetadataReportConfig) ToUrl() (*common.URL, error) {
-	urlMap := url.Values{}
+	urlMap := make(url.Values)
 
-	for k, v := range c.Params {
-		urlMap.Set(k, v)
+	if c.Params != nil {
+		for k, v := range c.Params {
+			urlMap.Set(k, v)
+		}
 	}
 
 	url, err := common.NewURL(c.Address,
@@ -75,29 +77,34 @@ func (c *MetadataReportConfig) ToUrl() (*common.URL, error) {
 		common.WithLocation(c.Address),
 		common.WithProtocol(c.Protocol),
 	)
-	if err != nil {
+	if err != nil || len(url.Protocol) == 0 {
 		return nil, perrors.New("Invalid MetadataReportConfig.")
 	}
 	url.SetParam("metadata", url.Protocol)
 	return &url, nil
 }
 
+func (c *MetadataReportConfig) IsValid() bool {
+	return len(c.Protocol) != 0
+}
+
 // StartMetadataReport: The entry of metadata report start
-func startMetadataReport() error {
-	metadataConfig := consumerConfig.ApplicationConfig.MetadataType
-	if consumerConfig.MetadataReportConfig == nil {
+func startMetadataReport(metadataType string, metadataReportConfig *MetadataReportConfig) error {
+	if metadataReportConfig == nil || metadataReportConfig.IsValid() {
 		return nil
+	}
+
+	if metadataType == constant.METACONFIG_REMOTE {
+		return perrors.New("No MetadataConfig found, you must specify the remote Metadata Center address when 'metadata=remote' is enabled.")
+	} else if metadataType == constant.METACONFIG_REMOTE && len(metadataReportConfig.Address) == 0 {
+		return perrors.New("MetadataConfig address can not be empty.")
+	}
+
+	if url, err := metadataReportConfig.ToUrl(); err == nil {
+		instance.GetMetadataReportInstance(url)
 	} else {
-		if metadataConfig == constant.METACONFIG_REMOTE {
-			return perrors.New("No MetadataConfig found, you must specify the remote Metadata Center address when 'metadata=remote' is enabled.")
-		} else if metadataConfig == constant.METACONFIG_REMOTE && len(consumerConfig.MetadataReportConfig.Address) == 0 {
-			return perrors.New("MetadataConfig address can not be empty.")
-		}
-		if url, err := consumerConfig.MetadataReportConfig.ToUrl(); err == nil {
-			instance.GetMetadataReportInstance(url)
-		} else {
-			return perrors.New("MetadataConfig is invalid!")
-		}
+		return perrors.New("MetadataConfig is invalid!")
 	}
+
 	return nil
 }
diff --git a/config/provider_config.go b/config/provider_config.go
index 2265f5954a47e055828c0d58a2ef2579ab838008..ff836d7ddaa184069833ab4a95d708cb7fbad3d9 100644
--- a/config/provider_config.go
+++ b/config/provider_config.go
@@ -42,6 +42,8 @@ type ProviderConfig struct {
 	BaseConfig   `yaml:",inline"`
 	Filter       string `yaml:"filter" json:"filter,omitempty" property:"filter"`
 	ProxyFactory string `yaml:"proxy_factory" default:"default" json:"proxy_factory,omitempty" property:"proxy_factory"`
+	// metadata-report
+	MetadataReportConfig *MetadataReportConfig `yaml:"metadata_report" json:"metadata_report,omitempty" property:"metadata_report"`
 
 	ApplicationConfig *ApplicationConfig         `yaml:"application" json:"application,omitempty" property:"application"`
 	Registry          *RegistryConfig            `yaml:"registry" json:"registry,omitempty" property:"registry"`
@@ -104,8 +106,8 @@ func ProviderInit(confProFile string) error {
 		}
 	}
 	//start the metadata report if config set
-	if err := startMetadataReport(); err != nil {
-		return perrors.WithMessagef(err, "Provider start metadata report error ,error is {%#v}", err)
+	if err := startMetadataReport(providerConfig.ApplicationConfig.MetadataType, providerConfig.MetadataReportConfig); err != nil {
+		return perrors.WithMessagef(err, "Provider starts metadata report error, and the error is {%#v}", err)
 	}
 	logger.Debugf("provider config{%#v}\n", providerConfig)
 
diff --git a/metadata/exporter.go b/metadata/exporter.go
index a5693613c3d0e57b10418562d14c5ff5a806449c..5d47f8bd808ec802ba73c7db73d22c78c675d12a 100644
--- a/metadata/exporter.go
+++ b/metadata/exporter.go
@@ -17,7 +17,9 @@
 
 package metadata
 
-import "github.com/apache/dubbo-go/common"
+import (
+	"github.com/apache/dubbo-go/common"
+)
 
 type MetadataExporter interface {
 	Export() MetadataExporter
diff --git a/metadata/identifier/base_metadata_identifier.go b/metadata/identifier/base_metadata_identifier.go
index c29dcf97dfd1c77680348c2be77f1023eeb51af4..a314671055be523844fd7d8f9589b8b6031632bc 100644
--- a/metadata/identifier/base_metadata_identifier.go
+++ b/metadata/identifier/base_metadata_identifier.go
@@ -56,7 +56,7 @@ func (mdi *BaseServiceMetadataIdentifier) getIdentifierKey(params ...string) str
 		joinParams(constant.KEY_SEPARATOR, params)
 }
 
-// getIdentifierKey...
+// getFilePathKey...
 func (mdi *BaseServiceMetadataIdentifier) getFilePathKey(params ...string) string {
 	path := serviceToPath(mdi.serviceInterface)
 
diff --git a/metadata/identifier/service_metadata_identifier.go b/metadata/identifier/service_metadata_identifier.go
index 157b9c54af47943697f5abcf9ee024f1bc84bfc9..373df0130dd1f87e3175918bde50060c4be89616 100644
--- a/metadata/identifier/service_metadata_identifier.go
+++ b/metadata/identifier/service_metadata_identifier.go
@@ -17,7 +17,9 @@
 
 package identifier
 
-import "github.com/apache/dubbo-go/common/constant"
+import (
+	"github.com/apache/dubbo-go/common/constant"
+)
 
 type ServiceMetadataIdentifier struct {
 	revision string
diff --git a/metadata/report_factory.go b/metadata/report_factory.go
index 97faee1309790c48d535591ba0f52a913d47a6e0..19b1004eee57073acec13c7f114179c47c73f145 100644
--- a/metadata/report_factory.go
+++ b/metadata/report_factory.go
@@ -17,7 +17,9 @@
 
 package metadata
 
-import "github.com/apache/dubbo-go/common"
+import (
+	"github.com/apache/dubbo-go/common"
+)
 
 var (
 	MetadataReportInstance MetadataReport