feat: refactor.

This commit is contained in:
tx7do
2024-05-06 10:26:59 +08:00
parent 7ce746e181
commit 72daf43151
13 changed files with 100 additions and 81 deletions

View File

@@ -4,16 +4,20 @@ import (
"fmt"
"github.com/go-kratos/kratos/v2/log"
"github.com/go-kratos/kratos/v2/registry"
kratosRegistry "github.com/go-kratos/kratos/v2/registry"
"github.com/tx7do/kratos-bootstrap/config"
"github.com/tx7do/kratos-bootstrap/logger"
"github.com/tx7do/kratos-bootstrap/registry"
"github.com/tx7do/kratos-bootstrap/tracer"
conf "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1"
"github.com/tx7do/kratos-bootstrap/config"
)
// Bootstrap 应用引导启动
func Bootstrap(serviceInfo *ServiceInfo) (*conf.Bootstrap, log.Logger, registry.Registrar) {
func Bootstrap(serviceInfo *config.ServiceInfo) (*conf.Bootstrap, log.Logger, kratosRegistry.Registrar) {
// inject command flags
Flags := NewCommandFlags()
Flags := config.NewCommandFlags()
Flags.Init()
var err error
@@ -24,13 +28,13 @@ func Bootstrap(serviceInfo *ServiceInfo) (*conf.Bootstrap, log.Logger, registry.
}
// init logger
ll := NewLoggerProvider(config.GetBootstrapConfig().Logger, serviceInfo)
ll := logger.NewLoggerProvider(config.GetBootstrapConfig().Logger, serviceInfo)
// init registrar
reg := NewRegistry(config.GetBootstrapConfig().Registry)
reg := registry.NewRegistry(config.GetBootstrapConfig().Registry)
// init tracer
if err = NewTracerProvider(config.GetBootstrapConfig().Trace, serviceInfo); err != nil {
if err = tracer.NewTracerProvider(config.GetBootstrapConfig().Trace, serviceInfo); err != nil {
panic(fmt.Sprintf("init tracer failed: %v", err))
}

View File

@@ -16,38 +16,24 @@ import (
conf "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1"
)
const remoteConfigSourceConfigFile = "remote.yaml"
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:
case LocalFile:
return nil
case NacosType:
case Nacos:
return nacos.NewConfigSource(c)
case ConsulType:
case Consul:
return consul.NewConfigSource(c)
case EtcdType:
case Etcd:
return etcd.NewConfigSource(c)
case ApolloType:
case Apollo:
return apollo.NewConfigSource(c)
case KubernetesType:
case Kubernetes:
return kubernetes.NewConfigSource(c)
case PolarisType:
case Polaris:
return polaris.NewConfigSource(c)
}
}

View File

@@ -1,7 +1,12 @@
package bootstrap
package config
import "flag"
import (
"flag"
"github.com/tx7do/kratos-bootstrap/utils"
)
// CommandFlags 命令传参
type CommandFlags struct {
Conf string // 引导配置文件路径,默认为:../../configs
Env string // 开发环境dev、debug……
@@ -11,25 +16,31 @@ type CommandFlags struct {
}
func NewCommandFlags() *CommandFlags {
return &CommandFlags{
f := &CommandFlags{
Conf: "",
Env: "",
ConfigHost: "",
ConfigType: "",
Daemon: false,
}
f.defineFlag()
return f
}
func (f *CommandFlags) Init() {
func (f *CommandFlags) defineFlag() {
flag.StringVar(&f.Conf, "conf", "../../configs", "config path, eg: -conf ../../configs")
flag.StringVar(&f.Env, "env", "dev", "runtime environment, eg: -env dev")
flag.StringVar(&f.ConfigHost, "chost", "127.0.0.1:8500", "config server host, eg: -chost 127.0.0.1:8500")
flag.StringVar(&f.ConfigType, "ctype", "consul", "config server host, eg: -ctype consul")
flag.BoolVar(&f.Daemon, "d", false, "run app as a daemon with -d=true.")
}
func (f *CommandFlags) Init() {
flag.Parse()
if f.Daemon {
BeDaemon("-d")
utils.BeDaemon("-d")
}
flag.Parse()
}

15
config/options.go Normal file
View File

@@ -0,0 +1,15 @@
package config
const remoteConfigSourceConfigFile = "remote.yaml"
type Type string
const (
LocalFile Type = "file"
Nacos Type = "nacos"
Consul Type = "consul"
Etcd Type = "etcd"
Apollo Type = "apollo"
Kubernetes Type = "kubernetes"
Polaris Type = "polaris"
)

View File

@@ -1,4 +1,4 @@
package bootstrap
package config
import "os"

View File

@@ -1,4 +1,4 @@
package bootstrap
package logger
import (
"os"
@@ -8,31 +8,45 @@ import (
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
"github.com/go-kratos/kratos/v2/log"
"github.com/go-kratos/kratos/v2/middleware/tracing"
aliyunLogger "github.com/go-kratos/kratos/contrib/log/aliyun/v2"
fluentLogger "github.com/go-kratos/kratos/contrib/log/fluent/v2"
logrusLogger "github.com/go-kratos/kratos/contrib/log/logrus/v2"
tencentLogger "github.com/go-kratos/kratos/contrib/log/tencent/v2"
zapLogger "github.com/go-kratos/kratos/contrib/log/zap/v2"
"github.com/go-kratos/kratos/v2/log"
"github.com/go-kratos/kratos/v2/middleware/tracing"
"github.com/tx7do/kratos-bootstrap/config"
conf "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1"
)
type LoggerType string
// NewLogger 创建一个新的日志记录器
func NewLogger(cfg *conf.Logger) log.Logger {
if cfg == nil {
return NewStdLogger()
}
const (
LoggerTypeStd LoggerType = "std"
LoggerTypeFluent LoggerType = "fluent"
LoggerTypeLogrus LoggerType = "logrus"
LoggerTypeZap LoggerType = "zap"
LoggerTypeAliyun LoggerType = "aliyun"
LoggerTypeTencent LoggerType = "tencent"
)
switch Type(cfg.Type) {
default:
fallthrough
case Std:
return NewStdLogger()
case Fluent:
return NewFluentLogger(cfg)
case Zap:
return NewZapLogger(cfg)
case Logrus:
return NewLogrusLogger(cfg)
case Aliyun:
return NewAliyunLogger(cfg)
case Tencent:
return NewTencentLogger(cfg)
}
}
// NewLoggerProvider 创建一个新的日志记录器提供者
func NewLoggerProvider(cfg *conf.Logger, serviceInfo *ServiceInfo) log.Logger {
func NewLoggerProvider(cfg *conf.Logger, serviceInfo *config.ServiceInfo) log.Logger {
l := NewLogger(cfg)
return log.With(
@@ -47,30 +61,6 @@ func NewLoggerProvider(cfg *conf.Logger, serviceInfo *ServiceInfo) log.Logger {
)
}
// NewLogger 创建一个新的日志记录器
func NewLogger(cfg *conf.Logger) log.Logger {
if cfg == nil {
return NewStdLogger()
}
switch LoggerType(cfg.Type) {
default:
fallthrough
case LoggerTypeStd:
return NewStdLogger()
case LoggerTypeFluent:
return NewFluentLogger(cfg)
case LoggerTypeZap:
return NewZapLogger(cfg)
case LoggerTypeLogrus:
return NewLogrusLogger(cfg)
case LoggerTypeAliyun:
return NewAliyunLogger(cfg)
case LoggerTypeTencent:
return NewTencentLogger(cfg)
}
}
// NewStdLogger 创建一个新的日志记录器 - Kratos内置控制台输出
func NewStdLogger() log.Logger {
l := log.NewStdLogger(os.Stdout)

12
logger/options.go Normal file
View File

@@ -0,0 +1,12 @@
package logger
type Type string
const (
Std Type = "std"
Fluent Type = "fluent"
Logrus Type = "logrus"
Zap Type = "zap"
Aliyun Type = "aliyun"
Tencent Type = "tencent"
)

View File

@@ -1,4 +1,4 @@
package bootstrap
package registry
import (
"path/filepath"

View File

@@ -1,4 +1,4 @@
package bootstrap
package registry
import (
"testing"

View File

@@ -1,4 +1,4 @@
package bootstrap
package rpc
import (
"context"

View File

@@ -1,4 +1,4 @@
package bootstrap
package rpc
import (
"net/http/pprof"

View File

@@ -1,4 +1,4 @@
package bootstrap
package tracer
import (
"context"
@@ -17,6 +17,7 @@ import (
semConv "go.opentelemetry.io/otel/semconv/v1.4.0"
conf "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1"
"github.com/tx7do/kratos-bootstrap/config"
)
// NewTracerExporter 创建一个导出器支持zipkin、otlp-http、otlp-grpc
@@ -40,7 +41,7 @@ func NewTracerExporter(exporterName, endpoint string, insecure bool) (traceSdk.S
}
// NewTracerProvider 创建一个链路追踪器
func NewTracerProvider(cfg *conf.Tracer, serviceInfo *ServiceInfo) error {
func NewTracerProvider(cfg *conf.Tracer, serviceInfo *config.ServiceInfo) error {
if cfg == nil {
return errors.New("tracer config is nil")
}

View File

@@ -1,4 +1,4 @@
package bootstrap
package utils
import (
"fmt"