1 Star 0 Fork 0

vick / kinfu

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
fgin.go 3.15 KB
一键复制 编辑 原始数据 按行查看 历史
vick 提交于 2024-03-04 19:35 . fix:fgin框架提交
package fgin
import (
"context"
"errors"
"log"
"fmt"
"net/http"
"os"
"os/signal"
"time"
"github.com/gin-gonic/gin"
"github.com/redis/go-redis/v9"
"github.com/streadway/amqp"
"go.uber.org/zap"
"gorm.io/gorm"
)
type Fgin struct{}
// 获取一个路由
func (f *Fgin) GetHttpServer(path string) *gin.Engine {
// 读取配置
readConfig(path)
// 判断定义的协议
if fginConfig.NetType != "http" {
panic(fmt.Sprintf("您配置的net_http:%v,本方法适用的协议为:http", fginConfig.NetType))
}
// 进行router初始化
var router *gin.Engine
switch fginConfig.Env {
case "pro":
// 生产模式
gin.SetMode(gin.ReleaseMode)
router = gin.New()
case "dev":
// 调试模式
gin.SetMode(gin.DebugMode)
router = gin.New()
default:
panic(errors.New("env配置错误,只支持:pro生产模式,dev调试模式"))
}
// 初始化日志
logInit()
// 初始化mysql gorm
initGorm()
// 初始化redis
initRedis()
// grpc客户端
initGrpcClient()
// rabbitmq队列初始化
initRabbitmq()
// 增加中间件
addMiddleWare(router)
// 钩子方法
router.GET("/ping", func(ctx *gin.Context) {
ReturnJson(ctx, 200, "pong", nil)
})
return router
}
// 优雅启动
func (f *Fgin) Run(router *gin.Engine) {
if fginConfig.Ip == "" {
logSuger.Warn("ip没有配置,使用默认ip:127.0.0.1")
fginConfig.Ip = "127.0.0.1"
}
if fginConfig.Port == 0 {
logSuger.Warn("port没有配置,使用默认port:8080")
fginConfig.Port = 8080
}
srv := &http.Server{
Addr: fmt.Sprintf("%s:%v", fginConfig.Ip, fginConfig.Port),
Handler: router,
}
go func() {
// 服务连接
logSuger.Info(fmt.Sprintf("服务启动: %s:%v\n", fginConfig.Ip, fginConfig.Port))
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("listen: %v\n", err)
}
}()
// 等待中断信号以优雅地关闭服务器(设置 5 秒的超时时间)
quit := make(chan os.Signal)
signal.Notify(quit, os.Interrupt)
<-quit
logSuger.Info("Shutdown Server ...")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
defer rabbitmqClose()
if err := srv.Shutdown(ctx); err != nil {
log.Fatalf("Server Shutdown:%v", err)
}
logSuger.Info("Server exiting")
}
// 获得config
func (f *Fgin) GetConfig() Config {
return fginConfig
}
// 获得日志操作
func (f *Fgin) GetLogger() *zap.SugaredLogger {
return logSuger
}
// 获得数据库连接
func (f *Fgin) GetGormDb(name string) *gorm.DB {
v, ok := fdbMap[name]
if !ok {
panic("mysql服务" + name + ", 未配置")
}
return v
}
// 获取redis连接
func (f *Fgin) GetRedisClient() redis.UniversalClient {
return redisClient
}
// 获取grpc已经dail的conn
func (f *Fgin) GetFgrpcClientConn(serviceName string) (*FgrpcClientConn, error) {
v, ok := fgrpcClientConn[serviceName]
if !ok {
errInfo := fmt.Sprintf("没有%v连接服务", serviceName)
return nil, errors.New(errInfo)
}
return v, nil
}
// 获取rabbitmq dail的conn
func (f *Fgin) GetRabbitmqConn(queueName string) (*amqp.Connection, error) {
cfg, ok := rabbitmqCfg[queueName]
if !ok {
return nil, errors.New("没有配置队列" + queueName)
}
return cfg.RabbitmqConn, nil
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/wu-jin-feng/kinfu.git
git@gitee.com:wu-jin-feng/kinfu.git
wu-jin-feng
kinfu
kinfu
c48b5026ddc5

搜索帮助

344bd9b3 5694891 D2dac590 5694891