feat: refactor.
This commit is contained in:
18
bootstrap.go
18
bootstrap.go
@@ -4,16 +4,20 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/go-kratos/kratos/v2/log"
|
"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"
|
conf "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1"
|
||||||
"github.com/tx7do/kratos-bootstrap/config"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Bootstrap 应用引导启动
|
// 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
|
// inject command flags
|
||||||
Flags := NewCommandFlags()
|
Flags := config.NewCommandFlags()
|
||||||
Flags.Init()
|
Flags.Init()
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
@@ -24,13 +28,13 @@ func Bootstrap(serviceInfo *ServiceInfo) (*conf.Bootstrap, log.Logger, registry.
|
|||||||
}
|
}
|
||||||
|
|
||||||
// init logger
|
// init logger
|
||||||
ll := NewLoggerProvider(config.GetBootstrapConfig().Logger, serviceInfo)
|
ll := logger.NewLoggerProvider(config.GetBootstrapConfig().Logger, serviceInfo)
|
||||||
|
|
||||||
// init registrar
|
// init registrar
|
||||||
reg := NewRegistry(config.GetBootstrapConfig().Registry)
|
reg := registry.NewRegistry(config.GetBootstrapConfig().Registry)
|
||||||
|
|
||||||
// init tracer
|
// 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))
|
panic(fmt.Sprintf("init tracer failed: %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,38 +16,24 @@ import (
|
|||||||
conf "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1"
|
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 创建一个远程配置源
|
// NewRemoteConfigSource 创建一个远程配置源
|
||||||
func NewRemoteConfigSource(c *conf.RemoteConfig) config.Source {
|
func NewRemoteConfigSource(c *conf.RemoteConfig) config.Source {
|
||||||
switch Type(c.Type) {
|
switch Type(c.Type) {
|
||||||
default:
|
default:
|
||||||
fallthrough
|
fallthrough
|
||||||
case LocalFileType:
|
case LocalFile:
|
||||||
return nil
|
return nil
|
||||||
case NacosType:
|
case Nacos:
|
||||||
return nacos.NewConfigSource(c)
|
return nacos.NewConfigSource(c)
|
||||||
case ConsulType:
|
case Consul:
|
||||||
return consul.NewConfigSource(c)
|
return consul.NewConfigSource(c)
|
||||||
case EtcdType:
|
case Etcd:
|
||||||
return etcd.NewConfigSource(c)
|
return etcd.NewConfigSource(c)
|
||||||
case ApolloType:
|
case Apollo:
|
||||||
return apollo.NewConfigSource(c)
|
return apollo.NewConfigSource(c)
|
||||||
case KubernetesType:
|
case Kubernetes:
|
||||||
return kubernetes.NewConfigSource(c)
|
return kubernetes.NewConfigSource(c)
|
||||||
case PolarisType:
|
case Polaris:
|
||||||
return polaris.NewConfigSource(c)
|
return polaris.NewConfigSource(c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
package bootstrap
|
package config
|
||||||
|
|
||||||
import "flag"
|
import (
|
||||||
|
"flag"
|
||||||
|
|
||||||
|
"github.com/tx7do/kratos-bootstrap/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CommandFlags 命令传参
|
||||||
type CommandFlags struct {
|
type CommandFlags struct {
|
||||||
Conf string // 引导配置文件路径,默认为:../../configs
|
Conf string // 引导配置文件路径,默认为:../../configs
|
||||||
Env string // 开发环境:dev、debug……
|
Env string // 开发环境:dev、debug……
|
||||||
@@ -11,25 +16,31 @@ type CommandFlags struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewCommandFlags() *CommandFlags {
|
func NewCommandFlags() *CommandFlags {
|
||||||
return &CommandFlags{
|
f := &CommandFlags{
|
||||||
Conf: "",
|
Conf: "",
|
||||||
Env: "",
|
Env: "",
|
||||||
ConfigHost: "",
|
ConfigHost: "",
|
||||||
ConfigType: "",
|
ConfigType: "",
|
||||||
Daemon: false,
|
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.Conf, "conf", "../../configs", "config path, eg: -conf ../../configs")
|
||||||
flag.StringVar(&f.Env, "env", "dev", "runtime environment, eg: -env dev")
|
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.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.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.")
|
flag.BoolVar(&f.Daemon, "d", false, "run app as a daemon with -d=true.")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *CommandFlags) Init() {
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
if f.Daemon {
|
if f.Daemon {
|
||||||
BeDaemon("-d")
|
utils.BeDaemon("-d")
|
||||||
}
|
}
|
||||||
|
|
||||||
flag.Parse()
|
|
||||||
}
|
}
|
||||||
15
config/options.go
Normal file
15
config/options.go
Normal 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"
|
||||||
|
)
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package bootstrap
|
package config
|
||||||
|
|
||||||
import "os"
|
import "os"
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package bootstrap
|
package logger
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
@@ -8,31 +8,45 @@ import (
|
|||||||
"go.uber.org/zap/zapcore"
|
"go.uber.org/zap/zapcore"
|
||||||
"gopkg.in/natefinch/lumberjack.v2"
|
"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"
|
aliyunLogger "github.com/go-kratos/kratos/contrib/log/aliyun/v2"
|
||||||
fluentLogger "github.com/go-kratos/kratos/contrib/log/fluent/v2"
|
fluentLogger "github.com/go-kratos/kratos/contrib/log/fluent/v2"
|
||||||
logrusLogger "github.com/go-kratos/kratos/contrib/log/logrus/v2"
|
logrusLogger "github.com/go-kratos/kratos/contrib/log/logrus/v2"
|
||||||
tencentLogger "github.com/go-kratos/kratos/contrib/log/tencent/v2"
|
tencentLogger "github.com/go-kratos/kratos/contrib/log/tencent/v2"
|
||||||
zapLogger "github.com/go-kratos/kratos/contrib/log/zap/v2"
|
zapLogger "github.com/go-kratos/kratos/contrib/log/zap/v2"
|
||||||
|
"github.com/tx7do/kratos-bootstrap/config"
|
||||||
"github.com/go-kratos/kratos/v2/log"
|
|
||||||
"github.com/go-kratos/kratos/v2/middleware/tracing"
|
|
||||||
|
|
||||||
conf "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1"
|
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 (
|
switch Type(cfg.Type) {
|
||||||
LoggerTypeStd LoggerType = "std"
|
default:
|
||||||
LoggerTypeFluent LoggerType = "fluent"
|
fallthrough
|
||||||
LoggerTypeLogrus LoggerType = "logrus"
|
case Std:
|
||||||
LoggerTypeZap LoggerType = "zap"
|
return NewStdLogger()
|
||||||
LoggerTypeAliyun LoggerType = "aliyun"
|
case Fluent:
|
||||||
LoggerTypeTencent LoggerType = "tencent"
|
return NewFluentLogger(cfg)
|
||||||
)
|
case Zap:
|
||||||
|
return NewZapLogger(cfg)
|
||||||
|
case Logrus:
|
||||||
|
return NewLogrusLogger(cfg)
|
||||||
|
case Aliyun:
|
||||||
|
return NewAliyunLogger(cfg)
|
||||||
|
case Tencent:
|
||||||
|
return NewTencentLogger(cfg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// NewLoggerProvider 创建一个新的日志记录器提供者
|
// NewLoggerProvider 创建一个新的日志记录器提供者
|
||||||
func NewLoggerProvider(cfg *conf.Logger, serviceInfo *ServiceInfo) log.Logger {
|
func NewLoggerProvider(cfg *conf.Logger, serviceInfo *config.ServiceInfo) log.Logger {
|
||||||
l := NewLogger(cfg)
|
l := NewLogger(cfg)
|
||||||
|
|
||||||
return log.With(
|
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内置,控制台输出
|
// NewStdLogger 创建一个新的日志记录器 - Kratos内置,控制台输出
|
||||||
func NewStdLogger() log.Logger {
|
func NewStdLogger() log.Logger {
|
||||||
l := log.NewStdLogger(os.Stdout)
|
l := log.NewStdLogger(os.Stdout)
|
||||||
12
logger/options.go
Normal file
12
logger/options.go
Normal 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"
|
||||||
|
)
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package bootstrap
|
package registry
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package bootstrap
|
package registry
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package bootstrap
|
package rpc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package bootstrap
|
package rpc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http/pprof"
|
"net/http/pprof"
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package bootstrap
|
package tracer
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
@@ -17,6 +17,7 @@ import (
|
|||||||
semConv "go.opentelemetry.io/otel/semconv/v1.4.0"
|
semConv "go.opentelemetry.io/otel/semconv/v1.4.0"
|
||||||
|
|
||||||
conf "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1"
|
conf "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1"
|
||||||
|
"github.com/tx7do/kratos-bootstrap/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewTracerExporter 创建一个导出器,支持:zipkin、otlp-http、otlp-grpc
|
// NewTracerExporter 创建一个导出器,支持:zipkin、otlp-http、otlp-grpc
|
||||||
@@ -40,7 +41,7 @@ func NewTracerExporter(exporterName, endpoint string, insecure bool) (traceSdk.S
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewTracerProvider 创建一个链路追踪器
|
// NewTracerProvider 创建一个链路追踪器
|
||||||
func NewTracerProvider(cfg *conf.Tracer, serviceInfo *ServiceInfo) error {
|
func NewTracerProvider(cfg *conf.Tracer, serviceInfo *config.ServiceInfo) error {
|
||||||
if cfg == nil {
|
if cfg == nil {
|
||||||
return errors.New("tracer config is nil")
|
return errors.New("tracer config is nil")
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package bootstrap
|
package utils
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
Reference in New Issue
Block a user