From 5e1371218324027665682e1668ff00d7210195f3 Mon Sep 17 00:00:00 2001 From: fangyincheng <fangyincheng@sina.com> Date: Sun, 15 Mar 2020 19:56:52 +0800 Subject: [PATCH] Imp: improve config reader --- common/extension/confit_reader.go | 11 ++++++++ config/base_config.go | 4 ++- config/config_loader.go | 25 +++++++++++++++++++ config/consumer_config.go | 18 ++----------- config/provider_config.go | 19 +++----------- .../rest/config/reader/rest_config_reader.go | 1 + .../reader/testdata/consumer_config.yml | 3 +++ .../reader/testdata/provider_config.yml | 4 +++ protocol/rest/rest_protocol.go | 1 + 9 files changed, 53 insertions(+), 33 deletions(-) diff --git a/common/extension/confit_reader.go b/common/extension/confit_reader.go index fe7124cf4..a3b8927ba 100644 --- a/common/extension/confit_reader.go +++ b/common/extension/confit_reader.go @@ -23,6 +23,7 @@ import ( var ( configReaders = make(map[string]func() interfaces.ConfigReader) + defaults = make(map[string]string) ) // SetConfigReaders set a creator of config reader. @@ -37,3 +38,13 @@ func GetConfigReaders(name string) interfaces.ConfigReader { } return configReaders[name]() } + +// SetDefaultConfitReader set {name} to default config reader for {module} +func SetDefaultConfitReader(module, name string) { + defaults[module] = name +} + +// GetDefaultConfitReader +func GetDefaultConfitReader() map[string]string { + return defaults +} diff --git a/config/base_config.go b/config/base_config.go index 787297c18..93c0ce6a6 100644 --- a/config/base_config.go +++ b/config/base_config.go @@ -18,6 +18,7 @@ package config import ( + "bytes" "reflect" "strconv" "strings" @@ -47,6 +48,8 @@ type BaseConfig struct { fatherConfig interface{} MetricConfig *MetricConfig `yaml:"metrics" json:"metrics,omitempty"` + + fileStream *bytes.Buffer } // startConfigCenter will start the config center. @@ -361,5 +364,4 @@ func initializeStruct(t reflect.Type, v reflect.Value) { } } - } diff --git a/config/config_loader.go b/config/config_loader.go index 14acc7bd7..8b6f43f24 100644 --- a/config/config_loader.go +++ b/config/config_loader.go @@ -19,6 +19,8 @@ package config import ( "fmt" + "github.com/apache/dubbo-go/common/extension" + perrors "github.com/pkg/errors" "log" "os" "time" @@ -79,6 +81,29 @@ func checkApplicationName(config *ApplicationConfig) { // Load Dubbo Init func Load() { + // init other consumer config + conConfigType := consumerConfig.ConfigType + for key, value := range extension.GetDefaultConfitReader() { + if v, ok := conConfigType[key]; ok { + value = v + } + if err := extension.GetConfigReaders(value).ReadConsumerConfig(consumerConfig.fileStream); err != nil { + logger.Errorf("ReadConsumerConfig error: %#v for %s", perrors.WithStack(err), value) + } + } + + // init other provider config + proConfigType := providerConfig.ConfigType + for key, value := range extension.GetDefaultConfitReader() { + if v, ok := proConfigType[key]; ok { + value = v + } + + if err := extension.GetConfigReaders(value).ReadProviderConfig(providerConfig.fileStream); err != nil { + logger.Errorf("ReadProviderConfig error: %#v for %s", perrors.WithStack(err), value) + } + } + // init router if confRouterFile != "" { if errPro := RouterInit(confRouterFile); errPro != nil { diff --git a/config/consumer_config.go b/config/consumer_config.go index 868aa31fd..1fa68415b 100644 --- a/config/consumer_config.go +++ b/config/consumer_config.go @@ -19,9 +19,6 @@ package config import ( "bytes" - "fmt" - "github.com/apache/dubbo-go/common/extension" - "strings" "time" ) @@ -62,7 +59,7 @@ type ConsumerConfig struct { ProtocolConf interface{} `yaml:"protocol_conf" json:"protocol_conf,omitempty" property:"protocol_conf"` FilterConf interface{} `yaml:"filter_conf" json:"filter_conf,omitempty" property:"filter_conf" ` ShutdownConfig *ShutdownConfig `yaml:"shutdown_conf" json:"shutdown_conf,omitempty" property:"shutdown_conf" ` - ConfigType string `yaml:"config_type" json:"config_type,omitempty" property:"config_type"` + ConfigType map[string]string `yaml:"config_type" json:"config_type,omitempty" property:"config_type"` } // UnmarshalYAML ... @@ -97,6 +94,7 @@ func ConsumerInit(confConFile string) error { if err != nil { return perrors.Errorf("unmarshalYmlConfig error %v", perrors.WithStack(err)) } + consumerConfig.fileStream = bytes.NewBuffer(fileStream) //set method interfaceId & interfaceName for k, v := range consumerConfig.References { //set id for reference @@ -121,18 +119,6 @@ func ConsumerInit(confConFile string) error { } logger.Debugf("consumer config{%#v}\n", consumerConfig) - // init other consumer config - conConfigType := consumerConfig.ConfigType - if len(conConfigType) > 0 { - for _, t := range strings.Split(conConfigType, ",") { - if len(t) > 0 { - if err = extension.GetConfigReaders(t).ReadConsumerConfig(bytes.NewBuffer(fileStream)); err != nil { - return perrors.New(fmt.Sprintf("ReadConsumerConfig error: %v for %s", perrors.WithStack(err), t)) - } - } - } - } - return nil } diff --git a/config/provider_config.go b/config/provider_config.go index 765e91393..14b77cafb 100644 --- a/config/provider_config.go +++ b/config/provider_config.go @@ -19,8 +19,6 @@ package config import ( "bytes" - "fmt" - "strings" ) import ( @@ -30,7 +28,6 @@ import ( import ( "github.com/apache/dubbo-go/common/constant" - "github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/logger" "github.com/apache/dubbo-go/common/yaml" ) @@ -53,7 +50,7 @@ type ProviderConfig struct { ProtocolConf interface{} `yaml:"protocol_conf" json:"protocol_conf,omitempty" property:"protocol_conf" ` FilterConf interface{} `yaml:"filter_conf" json:"filter_conf,omitempty" property:"filter_conf" ` ShutdownConfig *ShutdownConfig `yaml:"shutdown_conf" json:"shutdown_conf,omitempty" property:"shutdown_conf" ` - ConfigType string `yaml:"config_type" json:"config_type,omitempty" property:"config_type"` + ConfigType map[string]string `yaml:"config_type" json:"config_type,omitempty" property:"config_type"` } // UnmarshalYAML ... @@ -88,6 +85,8 @@ func ProviderInit(confProFile string) error { if err != nil { return perrors.Errorf("unmarshalYmlConfig error %v", perrors.WithStack(err)) } + + providerConfig.fileStream = bytes.NewBuffer(fileStream) //set method interfaceId & interfaceName for k, v := range providerConfig.Services { //set id for reference @@ -99,18 +98,6 @@ func ProviderInit(confProFile string) error { logger.Debugf("provider config{%#v}\n", providerConfig) - // init other provider config - proConfigType := providerConfig.ConfigType - if len(proConfigType) > 0 { - for _, t := range strings.Split(proConfigType, ",") { - if len(t) > 0 { - if err = extension.GetConfigReaders(t).ReadProviderConfig(bytes.NewBuffer(fileStream)); err != nil { - return perrors.New(fmt.Sprintf("ReadProviderConfig error: %v for %s", perrors.WithStack(err), t)) - } - } - } - } - return nil } diff --git a/protocol/rest/config/reader/rest_config_reader.go b/protocol/rest/config/reader/rest_config_reader.go index ff19e97e2..0691096bf 100644 --- a/protocol/rest/config/reader/rest_config_reader.go +++ b/protocol/rest/config/reader/rest_config_reader.go @@ -40,6 +40,7 @@ const REST = "rest" func init() { extension.SetConfigReaders(REST, NewRestConfigReader) + extension.SetDefaultConfitReader(REST, REST) } type RestConfigReader struct { diff --git a/protocol/rest/config/reader/testdata/consumer_config.yml b/protocol/rest/config/reader/testdata/consumer_config.yml index 4cbb86fd5..27d7fdafe 100644 --- a/protocol/rest/config/reader/testdata/consumer_config.yml +++ b/protocol/rest/config/reader/testdata/consumer_config.yml @@ -2,6 +2,9 @@ filter: "" +config_type: + rest: "rest" + # client request_timeout : "100ms" # connect timeout diff --git a/protocol/rest/config/reader/testdata/provider_config.yml b/protocol/rest/config/reader/testdata/provider_config.yml index 7ca544491..71d056e72 100644 --- a/protocol/rest/config/reader/testdata/provider_config.yml +++ b/protocol/rest/config/reader/testdata/provider_config.yml @@ -1,6 +1,10 @@ # dubbo server yaml configure file filter: "" + +config_type: + rest: "rest" + # application config application: organization : "ikurento.com" diff --git a/protocol/rest/rest_protocol.go b/protocol/rest/rest_protocol.go index 880169753..47ecb6093 100644 --- a/protocol/rest/rest_protocol.go +++ b/protocol/rest/rest_protocol.go @@ -33,6 +33,7 @@ import ( "github.com/apache/dubbo-go/protocol/rest/client" _ "github.com/apache/dubbo-go/protocol/rest/client/client_impl" rest_config "github.com/apache/dubbo-go/protocol/rest/config" + _ "github.com/apache/dubbo-go/protocol/rest/config/reader" "github.com/apache/dubbo-go/protocol/rest/server" _ "github.com/apache/dubbo-go/protocol/rest/server/server_impl" ) -- GitLab