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