From 7ce746e181fa1308760426aaf30172cb98b930a2 Mon Sep 17 00:00:00 2001 From: tx7do Date: Mon, 6 May 2024 10:07:22 +0800 Subject: [PATCH] feat: refactor. --- bootstrap.go | 12 ++- config/bootstrap_config.go | 65 +++++++++++ config.go => config/config.go | 136 +++++++----------------- config_test.go => config/config_test.go | 2 +- utils.go => config/utils.go | 2 +- go.mod | 19 +++- 6 files changed, 128 insertions(+), 108 deletions(-) create mode 100644 config/bootstrap_config.go rename config.go => config/config.go (57%) rename config_test.go => config/config_test.go (86%) rename utils.go => config/utils.go (90%) diff --git a/bootstrap.go b/bootstrap.go index 643d56f..1644985 100644 --- a/bootstrap.go +++ b/bootstrap.go @@ -2,10 +2,12 @@ package bootstrap import ( "fmt" + "github.com/go-kratos/kratos/v2/log" "github.com/go-kratos/kratos/v2/registry" conf "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1" + "github.com/tx7do/kratos-bootstrap/config" ) // Bootstrap 应用引导启动 @@ -17,20 +19,20 @@ func Bootstrap(serviceInfo *ServiceInfo) (*conf.Bootstrap, log.Logger, registry. var err error // load configs - if err = LoadBootstrapConfig(Flags.Conf); err != nil { + if err = config.LoadBootstrapConfig(Flags.Conf); err != nil { panic(fmt.Sprintf("load config failed: %v", err)) } // init logger - ll := NewLoggerProvider(commonConfig.Logger, serviceInfo) + ll := NewLoggerProvider(config.GetBootstrapConfig().Logger, serviceInfo) // init registrar - reg := NewRegistry(commonConfig.Registry) + reg := NewRegistry(config.GetBootstrapConfig().Registry) // init tracer - if err = NewTracerProvider(commonConfig.Trace, serviceInfo); err != nil { + if err = NewTracerProvider(config.GetBootstrapConfig().Trace, serviceInfo); err != nil { panic(fmt.Sprintf("init tracer failed: %v", err)) } - return commonConfig, ll, reg + return config.GetBootstrapConfig(), ll, reg } diff --git a/config/bootstrap_config.go b/config/bootstrap_config.go new file mode 100644 index 0000000..5155704 --- /dev/null +++ b/config/bootstrap_config.go @@ -0,0 +1,65 @@ +package config + +import conf "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1" + +var configList []interface{} + +var commonConfig = &conf.Bootstrap{} + +func GetBootstrapConfig() *conf.Bootstrap { + return commonConfig +} + +// RegisterConfig 注册配置 +func RegisterConfig(c interface{}) { + initBootstrapConfig() + configList = append(configList, c) +} + +func initBootstrapConfig() { + if len(configList) > 0 { + return + } + + configList = append(configList, commonConfig) + + if commonConfig.Server == nil { + commonConfig.Server = &conf.Server{} + configList = append(configList, commonConfig.Server) + } + + if commonConfig.Client == nil { + commonConfig.Client = &conf.Client{} + configList = append(configList, commonConfig.Client) + } + + if commonConfig.Data == nil { + commonConfig.Data = &conf.Data{} + configList = append(configList, commonConfig.Data) + } + + if commonConfig.Trace == nil { + commonConfig.Trace = &conf.Tracer{} + configList = append(configList, commonConfig.Trace) + } + + if commonConfig.Logger == nil { + commonConfig.Logger = &conf.Logger{} + configList = append(configList, commonConfig.Logger) + } + + if commonConfig.Registry == nil { + commonConfig.Registry = &conf.Registry{} + configList = append(configList, commonConfig.Registry) + } + + if commonConfig.Oss == nil { + commonConfig.Oss = &conf.OSS{} + configList = append(configList, commonConfig.Oss) + } + + if commonConfig.Notify == nil { + commonConfig.Notify = &conf.Notification{} + configList = append(configList, commonConfig.Notify) + } +} diff --git a/config.go b/config/config.go similarity index 57% rename from config.go rename to config/config.go index 5376cba..94da3b0 100644 --- a/config.go +++ b/config/config.go @@ -1,9 +1,11 @@ -package bootstrap +package config import ( "github.com/go-kratos/kratos/v2/config" "github.com/go-kratos/kratos/v2/log" + fileKratos "github.com/go-kratos/kratos/v2/config/file" + "github.com/tx7do/kratos-bootstrap/config/apollo" "github.com/tx7do/kratos-bootstrap/config/consul" "github.com/tx7do/kratos-bootstrap/config/etcd" @@ -11,69 +13,48 @@ import ( "github.com/tx7do/kratos-bootstrap/config/nacos" "github.com/tx7do/kratos-bootstrap/config/polaris" - // file - fileKratos "github.com/go-kratos/kratos/v2/config/file" - conf "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1" ) -var commonConfig = &conf.Bootstrap{} -var configList []interface{} - const remoteConfigSourceConfigFile = "remote.yaml" -// RegisterConfig 注册配置 -func RegisterConfig(c interface{}) { - initBootstrapConfig() - configList = append(configList, c) +type Type string + +const ( + LocalFileType Type = "file" + NacosType Type = "nacos" + ConsulType Type = "consul" + EtcdType Type = "etcd" + ApolloType Type = "apollo" + KubernetesType Type = "kubernetes" + PolarisType Type = "polaris" +) + +// NewRemoteConfigSource 创建一个远程配置源 +func NewRemoteConfigSource(c *conf.RemoteConfig) config.Source { + switch Type(c.Type) { + default: + fallthrough + case LocalFileType: + return nil + case NacosType: + return nacos.NewConfigSource(c) + case ConsulType: + return consul.NewConfigSource(c) + case EtcdType: + return etcd.NewConfigSource(c) + case ApolloType: + return apollo.NewConfigSource(c) + case KubernetesType: + return kubernetes.NewConfigSource(c) + case PolarisType: + return polaris.NewConfigSource(c) + } } -func initBootstrapConfig() { - if len(configList) > 0 { - return - } - - configList = append(configList, commonConfig) - - if commonConfig.Server == nil { - commonConfig.Server = &conf.Server{} - configList = append(configList, commonConfig.Server) - } - - if commonConfig.Client == nil { - commonConfig.Client = &conf.Client{} - configList = append(configList, commonConfig.Client) - } - - if commonConfig.Data == nil { - commonConfig.Data = &conf.Data{} - configList = append(configList, commonConfig.Data) - } - - if commonConfig.Trace == nil { - commonConfig.Trace = &conf.Tracer{} - configList = append(configList, commonConfig.Trace) - } - - if commonConfig.Logger == nil { - commonConfig.Logger = &conf.Logger{} - configList = append(configList, commonConfig.Logger) - } - - if commonConfig.Registry == nil { - commonConfig.Registry = &conf.Registry{} - configList = append(configList, commonConfig.Registry) - } - - if commonConfig.Oss == nil { - commonConfig.Oss = &conf.OSS{} - configList = append(configList, commonConfig.Oss) - } - - if commonConfig.Notify == nil { - commonConfig.Notify = &conf.Notification{} - configList = append(configList, commonConfig.Notify) - } +// NewFileConfigSource 创建一个本地文件配置源 +func NewFileConfigSource(filePath string) config.Source { + return fileKratos.NewSource(filePath) } // NewConfigProvider 创建一个配置 @@ -156,44 +137,5 @@ func LoadRemoteConfigSourceConfigs(configPath string) (error, *conf.RemoteConfig return err, nil } - return nil, commonConfig.Config -} - -type ConfigType string - -const ( - ConfigTypeLocalFile ConfigType = "file" - ConfigTypeNacos ConfigType = "nacos" - ConfigTypeConsul ConfigType = "consul" - ConfigTypeEtcd ConfigType = "etcd" - ConfigTypeApollo ConfigType = "apollo" - ConfigTypeKubernetes ConfigType = "kubernetes" - ConfigTypePolaris ConfigType = "polaris" -) - -// NewRemoteConfigSource 创建一个远程配置源 -func NewRemoteConfigSource(c *conf.RemoteConfig) config.Source { - switch ConfigType(c.Type) { - default: - fallthrough - case ConfigTypeLocalFile: - return nil - case ConfigTypeNacos: - return nacos.NewConfigSource(c) - case ConfigTypeConsul: - return consul.NewConfigSource(c) - case ConfigTypeEtcd: - return etcd.NewConfigSource(c) - case ConfigTypeApollo: - return apollo.NewConfigSource(c) - case ConfigTypeKubernetes: - return kubernetes.NewConfigSource(c) - case ConfigTypePolaris: - return polaris.NewConfigSource(c) - } -} - -// NewFileConfigSource 创建一个本地文件配置源 -func NewFileConfigSource(filePath string) config.Source { - return fileKratos.NewSource(filePath) + return nil, GetBootstrapConfig().Config } diff --git a/config_test.go b/config/config_test.go similarity index 86% rename from config_test.go rename to config/config_test.go index b532c6a..00d1e3b 100644 --- a/config_test.go +++ b/config/config_test.go @@ -1,4 +1,4 @@ -package bootstrap +package config import "testing" diff --git a/utils.go b/config/utils.go similarity index 90% rename from utils.go rename to config/utils.go index b871c56..c5780b6 100644 --- a/utils.go +++ b/config/utils.go @@ -1,4 +1,4 @@ -package bootstrap +package config import "os" diff --git a/go.mod b/go.mod index 7dfbf42..7b0e7b1 100644 --- a/go.mod +++ b/go.mod @@ -6,16 +6,18 @@ toolchain go1.22.1 replace ( github.com/tx7do/kratos-bootstrap/api => ./api + + github.com/tx7do/kratos-bootstrap/config/apollo => ./config/apollo github.com/tx7do/kratos-bootstrap/config/consul => ./config/consul + github.com/tx7do/kratos-bootstrap/config/etcd => ./config/etcd + github.com/tx7do/kratos-bootstrap/config/kubernetes => ./config/kubernetes + github.com/tx7do/kratos-bootstrap/config/nacos => ./config/nacos + github.com/tx7do/kratos-bootstrap/config/polaris => ./config/polaris ) require ( github.com/go-chassis/sc-client v0.7.0 github.com/go-kratos/aegis v0.2.0 - github.com/go-kratos/kratos/contrib/config/apollo/v2 v2.0.0-20240504101732-d0d5761f9ca8 - github.com/go-kratos/kratos/contrib/config/etcd/v2 v2.0.0-20240504101732-d0d5761f9ca8 - github.com/go-kratos/kratos/contrib/config/kubernetes/v2 v2.0.0-20240504101732-d0d5761f9ca8 - github.com/go-kratos/kratos/contrib/config/nacos/v2 v2.0.0-20240504101732-d0d5761f9ca8 github.com/go-kratos/kratos/contrib/log/aliyun/v2 v2.0.0-20240504101732-d0d5761f9ca8 github.com/go-kratos/kratos/contrib/log/fluent/v2 v2.0.0-20240504101732-d0d5761f9ca8 github.com/go-kratos/kratos/contrib/log/logrus/v2 v2.0.0-20240504101732-d0d5761f9ca8 @@ -39,7 +41,12 @@ require ( github.com/spf13/cobra v1.8.0 github.com/stretchr/testify v1.9.0 github.com/tx7do/kratos-bootstrap/api v0.0.1 + github.com/tx7do/kratos-bootstrap/config/apollo v0.0.1 github.com/tx7do/kratos-bootstrap/config/consul v0.0.1 + github.com/tx7do/kratos-bootstrap/config/etcd v0.0.1 + github.com/tx7do/kratos-bootstrap/config/kubernetes v0.0.1 + github.com/tx7do/kratos-bootstrap/config/nacos v0.0.1 + github.com/tx7do/kratos-bootstrap/config/polaris v0.0.1 go.etcd.io/etcd/client/v3 v3.5.13 go.opentelemetry.io/otel v1.26.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 @@ -77,6 +84,10 @@ require ( github.com/go-chassis/openlog v1.1.3 // indirect github.com/go-errors/errors v1.0.1 // indirect github.com/go-kit/kit v0.10.0 // indirect + github.com/go-kratos/kratos/contrib/config/apollo/v2 v2.0.0-20240504101732-d0d5761f9ca8 // indirect + github.com/go-kratos/kratos/contrib/config/etcd/v2 v2.0.0-20240504101732-d0d5761f9ca8 // indirect + github.com/go-kratos/kratos/contrib/config/kubernetes/v2 v2.0.0-20240504101732-d0d5761f9ca8 // indirect + github.com/go-kratos/kratos/contrib/config/nacos/v2 v2.0.0-20240504101732-d0d5761f9ca8 // indirect github.com/go-logfmt/logfmt v0.5.0 // indirect github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect