add option params

This commit is contained in:
zhuyasen
2022-11-06 23:58:44 +08:00
parent 2feee12878
commit 4076da8b0e
23 changed files with 110 additions and 1037 deletions

View File

@@ -1,103 +0,0 @@
package initial
import (
"flag"
"fmt"
"strconv"
"github.com/zhufuyi/sponge/configs"
"github.com/zhufuyi/sponge/internal/config"
"github.com/zhufuyi/sponge/internal/model"
"github.com/zhufuyi/sponge/pkg/logger"
"github.com/zhufuyi/sponge/pkg/nacoscli"
"github.com/zhufuyi/sponge/pkg/stat"
"github.com/zhufuyi/sponge/pkg/tracer"
"github.com/jinzhu/copier"
)
var (
version string
configFile string
enableConfigCenter bool
)
// Config 初始化配置
func Config() {
initConfig()
cfg := config.Get()
// 初始化日志
_, _ = logger.Init(
logger.WithLevel(cfg.Logger.Level),
logger.WithFormat(cfg.Logger.Format),
logger.WithSave(cfg.Logger.IsSave),
)
// 初始化数据库
model.InitMysql()
model.InitCache(cfg.App.CacheType)
// 初始化链路跟踪
if cfg.App.EnableTracing {
tracer.InitWithConfig(
cfg.App.Name,
cfg.App.Env,
cfg.App.Version,
cfg.Jaeger.AgentHost,
strconv.Itoa(cfg.Jaeger.AgentPort),
cfg.App.TracingSamplingRate,
)
}
// 初始化打印系统和进程资源
if cfg.App.EnableStat {
stat.Init(stat.WithLog(logger.Get()))
}
}
// 初始化配置
func initConfig() {
flag.StringVar(&version, "version", "", "service Version Number")
flag.BoolVar(&enableConfigCenter, "enable-cc", false, "whether to get from the configuration center, "+
"if true, the '-c' parameter indicates the configuration center")
flag.StringVar(&configFile, "c", "", "configuration file")
flag.Parse()
if enableConfigCenter {
// 从配置中心获取配置(先获取nacos配置再根据nacos配置中心读取服务配置)
if configFile == "" {
configFile = configs.Path("serverNameExample_cc.yml")
}
nacosConfig, err := config.NewCenter(configFile)
if err != nil {
panic(err)
}
appConfig := &config.Config{}
params := &nacoscli.Params{}
_ = copier.Copy(params, &nacosConfig.Nacos)
err = nacoscli.Init(appConfig, params)
if err != nil {
panic(fmt.Sprintf("connect to configuration center err, %v", err))
}
if appConfig.App.Name == "" {
panic("read the config from center error, config data is empty")
}
config.Set(appConfig)
} else {
// 从本地配置文件获取配置
if configFile == "" {
configFile = configs.Path("serverNameExample.yml")
}
err := config.Init(configFile)
if err != nil {
panic("init config error: " + err.Error())
}
}
if version != "" {
config.Get().App.Version = version
}
//fmt.Println(config.Show())
}

View File

@@ -1,44 +0,0 @@
package initial
import (
"context"
"time"
"github.com/zhufuyi/sponge/internal/config"
"github.com/zhufuyi/sponge/internal/model"
"github.com/zhufuyi/sponge/pkg/app"
"github.com/zhufuyi/sponge/pkg/tracer"
)
// RegisterClose 注册app需要释放的资源
func RegisterClose(servers []app.IServer) []app.Close {
var closes []app.Close
// 关闭服务
for _, s := range servers {
closes = append(closes, s.Stop)
}
// 关闭mysql
closes = append(closes, func() error {
return model.CloseMysql()
})
// 关闭redis
if config.Get().App.CacheType == "redis" {
closes = append(closes, func() error {
return model.CloseRedis()
})
}
// 关闭trace
if config.Get().App.EnableTracing {
closes = append(closes, func() error {
ctx, _ := context.WithTimeout(context.Background(), 2*time.Second) //nolint
return tracer.Close(ctx)
})
}
return closes
}

View File

@@ -1,93 +0,0 @@
package initial
import (
"fmt"
"strconv"
"time"
"github.com/zhufuyi/sponge/internal/config"
"github.com/zhufuyi/sponge/internal/server"
"github.com/zhufuyi/sponge/pkg/app"
"github.com/zhufuyi/sponge/pkg/servicerd/registry"
"github.com/zhufuyi/sponge/pkg/servicerd/registry/consul"
"github.com/zhufuyi/sponge/pkg/servicerd/registry/etcd"
"github.com/zhufuyi/sponge/pkg/servicerd/registry/nacos"
)
// RegisterServers 注册app服务
func RegisterServers() []app.IServer {
var cfg = config.Get()
var servers []app.IServer
// 创建http服务
httpAddr := ":" + strconv.Itoa(cfg.HTTP.Port)
httpRegistry, httpInstance := registryService("http", cfg.App.Host, cfg.HTTP.Port)
httpServer := server.NewHTTPServer(httpAddr,
server.WithHTTPReadTimeout(time.Second*time.Duration(cfg.HTTP.ReadTimeout)),
server.WithHTTPWriteTimeout(time.Second*time.Duration(cfg.HTTP.WriteTimeout)),
server.WithHTTPRegistry(httpRegistry, httpInstance),
server.WithHTTPIsProd(cfg.App.Env == "prod"),
)
servers = append(servers, httpServer)
// 创建grpc服务
grpcAddr := ":" + strconv.Itoa(cfg.Grpc.Port)
grpcRegistry, grpcInstance := registryService("grpc", cfg.App.Host, cfg.Grpc.Port)
grpcServer := server.NewGRPCServer(grpcAddr,
server.WithGrpcReadTimeout(time.Duration(cfg.Grpc.ReadTimeout)*time.Second),
server.WithGrpcWriteTimeout(time.Duration(cfg.Grpc.WriteTimeout)*time.Second),
server.WithGrpcRegistry(grpcRegistry, grpcInstance),
)
servers = append(servers, grpcServer)
return servers
}
func registryService(scheme string, host string, port int) (registry.Registry, *registry.ServiceInstance) {
instanceEndpoint := fmt.Sprintf("%s://%s:%d", scheme, host, port)
cfg := config.Get()
switch cfg.App.RegistryDiscoveryType {
// 使用consul注册服务
case "consul":
iRegistry, instance, err := consul.NewRegistry(
cfg.Consul.Addr,
cfg.App.Name+"_"+scheme+"_"+host,
cfg.App.Name,
[]string{instanceEndpoint},
)
if err != nil {
panic(err)
}
return iRegistry, instance
// 使用etcd注册服务
case "etcd":
iRegistry, instance, err := etcd.NewRegistry(
cfg.Etcd.Addrs,
cfg.App.Name+"_"+scheme+"_"+host,
cfg.App.Name,
[]string{instanceEndpoint},
)
if err != nil {
panic(err)
}
return iRegistry, instance
// 使用nacos注册服务
case "nacos":
iRegistry, instance, err := nacos.NewRegistry(
cfg.NacosRd.IPAddr,
cfg.NacosRd.Port,
cfg.NacosRd.NamespaceID,
cfg.App.Name+"_"+scheme+"_"+host,
cfg.App.Name,
[]string{instanceEndpoint},
)
if err != nil {
panic(err)
}
return iRegistry, instance
}
return nil, nil
}

View File

@@ -1,21 +0,0 @@
package main
import (
"github.com/zhufuyi/sponge/cmd/serverNameExample_mixExample/initial"
"github.com/zhufuyi/sponge/pkg/app"
)
// @title serverNameExample api docs
// @description http server api docs
// @schemes http https
// @version v0.0.0
// @host localhost:8080
func main() {
initial.Config()
servers := initial.RegisterServers()
closes := initial.RegisterClose(servers)
a := app.New(servers, closes)
a.Run()
}