You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
2.7 KiB
49 lines
2.7 KiB
package main
|
|
|
|
import (
|
|
"os"
|
|
|
|
"yunyan/comm"
|
|
"yunyan/lego/sys/mysql"
|
|
wechat_auth "yunyan/sys/auth/wechat"
|
|
"yunyan/sys/email"
|
|
"yunyan/sys/pay/alipay"
|
|
"yunyan/sys/pay/appleiap"
|
|
"yunyan/sys/pay/googleiap"
|
|
"yunyan/sys/pay/paypal"
|
|
"yunyan/sys/pay/wechat"
|
|
"yunyan/sys/sms"
|
|
)
|
|
|
|
// 「后台改配置 → 目标服务实时生效 → 回执确认」的业务侧装配。
|
|
//
|
|
// 传输走 HTTP:console 是单例服务(lego/base/single)、不接 ETCD/rpcx 集群,只能从公网网关入口调进来。
|
|
// 具体接口见 modules/user/api_reloadmoduleconfig.go(路由 user_reloadmoduleconfig,网关强制验签)。
|
|
// 本文件只负责两件事:登记「哪些模块能热更」,以及「重载时用哪个库/哪把密钥/哪份 Sys」。
|
|
|
|
// registerModuleReloaders 注册可热重载的业务模块(键 = ModuleDef.SysKey)。
|
|
//
|
|
// 只有在此登记的模块才会真的热更;其余(google_auth 等)重载时如实回 restart_required——
|
|
// 它们的 sys 尚未提供「校验失败不 panic 且保留旧实例」的 Reload,贸然复用 OnInit 会在
|
|
// 配置填错时把线上进程打挂。要扩展就照 sys/email 的 Reload 补齐后再加一行。
|
|
//
|
|
// 支付类启动时缺配置只降级不 panic(见 main.go),后台首次配好凭据即经 Reload 启用,无需重启。
|
|
func registerModuleReloaders() {
|
|
comm.RegisterModuleReloader("email", func(cfg map[string]interface{}) error { return email.Reload(cfg) })
|
|
comm.RegisterModuleReloader("sms", func(cfg map[string]interface{}) error { return sms.Reload(cfg) })
|
|
comm.RegisterModuleReloader("wechatpay", func(cfg map[string]interface{}) error { return wechat.Reload(cfg) })
|
|
comm.RegisterModuleReloader("alipay", func(cfg map[string]interface{}) error { return alipay.Reload(cfg) })
|
|
comm.RegisterModuleReloader("paypal", func(cfg map[string]interface{}) error { return paypal.Reload(cfg) })
|
|
comm.RegisterModuleReloader("appleiap", func(cfg map[string]interface{}) error { return appleiap.Reload(cfg) })
|
|
comm.RegisterModuleReloader("googleiap", func(cfg map[string]interface{}) error { return googleiap.Reload(cfg) })
|
|
// 微信登录:2026-09-23 正式服在后台补填 AppSecret 后因没有这一行而不生效,
|
|
// 登录持续报 41004 appsecret missing,直到重启。
|
|
comm.RegisterModuleReloader("wechat_auth", func(cfg map[string]interface{}) error { return wechat_auth.Reload(cfg) })
|
|
}
|
|
|
|
// setupModuleReload 登记重载上下文。必须在各 sys OnInit 与 mysql.OnInit 之后调用——
|
|
// 重载做的是「替换已初始化好的客户端」,且要用已连上的业务库重读配置。
|
|
func (this *Service) setupModuleReload() {
|
|
registerModuleReloaders()
|
|
comm.SetModuleReloadContext(mysql.GetSys(), os.Getenv("FIELD_ENCRYPT_KEY"), this.GetSettings().Sys)
|
|
}
|
|
|