ppw_gin

module
v0.8.20 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 11, 2024 License: Zlib

README

Apollo配置中心

配置格式
service = "http://127.0.0.1:8080" # apollo配置服务地址
cache_dir = "/to/path" # 本地配置缓存

[app.sales-micro]
app_id = "sales-micro" # 应用id
cluster = "default" # 服务端集群
secret = "......" # 应用秘钥
namespaces = [
    "gateway:SALES.micro.gateway"
] # 需要拉取的命名空间(配置项),格式为 "别名:命名空间名"。"别名:"可忽略,忽略后调起时需要 应用id + 命名空间名,如 sales-micro.SALES.micro.gateway

[app.sales-micro-holdings]
app_id = "sales-micro-holdings"
cluster = "default"
secret = "......"
namespaces = [
    "holdings.dispatcher:SALES.micro.dispatcher",
    "holdings.circuit_breaker:SALES.micro.circuit_breaker",
    "holdings.rate_limiter:SALES.micro.rate_limiter"
]
启动
import (
"gitee.com/ltotal/ppw_gin/di"
)

func init() {
di.MustProvides(
loadConfigConf,
......
)
di.Initialize()
}

func LoadConfigConf() *di.ConfigConf {
dir, err := os.Getwd()
if err != nil {
panic(err)
}
return &di.ConfigConf{
ConfigType:       "toml", // 本地配置文件格式
ConfigPath:       filepath.Join(dir, "conf"), // 本地配置文件路径
ApolloConf:       "apollo", // 可选,apollo配置文件名,从 "本地配置文件路径/apollo配置文件名.本地配置文件格式" 获取
ApUpdateCallback: nil, // 可选,服务端配置更新后自定义的回调方法(服务端配置更新后同步到客户端的步骤已内部实现,这里指额外的自定回调)
InitCallback:     nil, // 可选,本地及apollo配置(如果有的话)初始化完成后的自定义回调
}
}
调用
// viper方式读取配置(推荐)
c := di.Apollo.Alias("gateway")
allServices := c.GetStringSlice("all_services")
sigEnable := c.GetBool("sig.enable")

// 结构体方式读取配置
type SalesMicroGateway struct {
    AllServices      []string `mapstructure:"all_services"`
    SigEnable        bool     `mapstructure:"sig.enable"`
}
c := &SalesMicroGateway{}
_ = di.Apollo.Struct("gateway", c)
allServices := c.AllServices
......

基本使用

接口参数校验规则
var CustomValidators = &[]di.Validators{
	{
		Tag:    "int_sequence", // 自定义正则校验
		RegExp: `^(\d+)(,\d+)*$`,
		Msg:    "{0}必须为','分隔的数字",
	},
	{
		Tag:    "fund_id",
		RegExp: `(?i)^HF[0-9A-Za-z]{8}$`,
		Msg:    "{0}基金id格式有误",
	},
	{
		Tag: "fixed_len", // 自定义方法校验
		Handler: func(fl validator.FieldLevel) bool {
			fixedLen := fl.Param()
			fieldValue := fl.Field().String()
			lenInt, err := strconv.Atoi(fixedLen)
			if err != nil {
				return false
			}
			return len(fieldValue) == lenInt
		},
		Msg: "{0}长度有误",
	},
}
路由规则
var ProductRoute = func() di.Routes {
controller := di.MustGet[*controller.ProductController]()

return di.Routes{
Group: "/api",
Rules: []di.Rule{
{
Method:   http.MethodGet,
Route:    "/product/list",
Handler:  controller.List,
DataBind: binding.Query,
},
},
}
}
初始化&服务启动
func init() {
	di.MustProvides(
		loadConfigConf,
		loadTracerConf,
		loadDatabaseConf,
		......
	)
	di.Initialize()
}

func main() {
	srv := gin_server.New(&gin_server.Conf{
		RunMode: gin.DebugMode,
		Routes: []*pkg.Routes{
			router.ProductRoute(),
		},
		Validators: validator.CustomValidators,
		Recovery:   false,
	})
	_ = srv.Run(":9992")
}

func LoadConfigConf() *di.ConfigConf {
	dir, err := os.Getwd()
	if err != nil {
		panic(err)
	}
	return &di.ConfigConf{
		ConfigType:       "toml",
		ConfigPath:       filepath.Join(dir, "conf"),
		ApolloConf:       "apollo",
		ApUpdateCallback: nil,
		InitCallback:     nil,
	}
}

func LoadTracerConf() *di.TracerConf {
	tracerConf := &di.TracerConf{}
	_ = pkg.Apollo.Struct("tracer", tracerConf)
	tracerConf.MainServiceName = "dig_srv"
	return tracerConf
}

func loadDatabaseConf() []*di.DatabaseConf {
	return []*di.DatabaseConf{
		{
			DbKey: "db.demo",
			CallBack: func(db *gorm.DB) {
				_ = di.Container().Provide(func() *demo_db.Query {
					return demo_db.Use(db)
				})
			},
		},
	}
}

相关文档

gin(http服务)

https://www.kancloud.cn/shuangdeyu/gin_book/949416

gorm(数据库orm)

https://gorm.io/docs/query.html

gen(gorm扩展)

https://gorm.io/gen/query.html

apollo(配置中心)

https://www.apolloconfig.com/#/zh/README

dig(依赖注入)

https://pkg.go.dev/go.uber.org/dig#section-documentation

sentinel(熔断限流)

https://sentinelguard.io/zh-cn/docs/golang/quick-start.html

seata(分布式事务)

https://seata.apache.org/zh-cn/docs/overview/what-is-seata/

Directories

Path Synopsis
plugins
servers

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL