你好,golang
func initLog() {
logger.SetLogLevel(config.Config.LogLevel)
if config.Config.SentryDsn != "" {
hooks.SetEnableSentry()
hooks.SetSentryDSN(config.Config.SentryDsn)
}
logger.SetAppName(config.Config.AppName)
logger.SetLogPath(config.Config.LogPath)
logger.InitLog()
}
func initTracer() {
span, _, err := tracer.NewJaegerTracer(config.Config.AppName, config.Config.JaegerAgentUri)
if err != nil || span == nil {
logger.Error("Failed to init tracer: ", err)
}
}
func initSecurity() {
security.RegisterRedirectUrlVolidator(&security.DefaultRedirectUrlValidate{})
}
func main() {
//初始化 tracer
initLog()
initTracer()
// 初始化安全配置
initSecurity()
// 初始化队列
mq.Init()
logID := common.Uniqid()
logger.Info(logID, config.Config.Env, "初始化数据库连接")
db.Init()
logger.Info(logID, config.Config.Env, "开始注册路由")
redis.Redis.Cache = redishelper.MustNewClient(config.Config.Redis.Cache)
logger.Info(logID, config.Config.Env, "redis start")
engine := router.Init()
logger.Info(logID, "开始初始化GRPC连接")
if err := model.Init(logID); err != nil {
logger.Error(logID, config.Config.Env, " GRPC相关服务初始化失败,请及时关注 ", err)
}
httpServer := &http.Server{
Addr: config.Config.Host + ":" + config.Config.Port,
Handler: engine,
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
}
listen, err := net.Listen("tcp", config.Config.Host+":"+config.Config.GrpcPort) // Address gRPC服务地址
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
// grpcServer := grpc.NewServer(grpc.UnaryInterceptor(otgrpc.OpenTracingServerInterceptor(tracer.GetTracer())))
grpcServer := grpc.NewServer(tracer.GrpcServerOption())
// 与http的注册路由类似,此处将所有服务注册到grpc服务器上,
pb.RegisterUserInfoServer(grpcServer, gc.UserInfo{})
g.Go(func() error {
err := httpServer.ListenAndServe()
if nil != err {
logger.Error(config.Config.Env, " user-ctl http start err ", err)
log.Fatal("user-ctl http start err", err)
}
return err
})
g.Go(func() error {
err := grpcServer.Serve(listen)
if nil != err {
logger.Error(config.Config.Env, " user-ctl grpcservice start err ", err)
log.Fatal("user-ctl grpcService start err", err)
}
return err
})
if err := g.Wait(); err != nil {
logger.Error("g.Wait err", err)
log.Fatal(err)
}
}
// TestAes 本地调试测试用
func TestAes(txt string) {
encrypt, err := lib.Aes{}.AesEncrypt(txt, []byte(config.Config.AccountLoginKey), []byte(config.Config.AccountLoginIv))
if err != nil {
fmt.Printf("[ERROR]TestAes: %s\n", err)
return
}
fmt.Printf("[INFO]TestAes[aes:%s]\n", encrypt)
}
// TestSign 本地调试测试用
func TestSign(jsonBody string) {
jsonBodyBytes := []byte(jsonBody)
var amap = make(map[string]interface{})
_ = json.Unmarshal(jsonBodyBytes, &amap)
appid := lib.Tools{}.Strval(amap["appid"]) //appid强制转化为string类型
amap["appid"] = appid
amap["secret"] = config.Config.SignConf[appid]
md5Str := lib.Tools{}.CreateSign(amap)
fmt.Printf("[INFO]TestSign[md5:%s]\n", md5Str)
}