feat: 建立可靠通知、吊销与跨实例状态

This commit is contained in:
weijuesen
2026-08-14 01:41:14 +08:00
parent a6a996a518
commit a25bc7abc6
22 changed files with 1017 additions and 245 deletions
+19 -4
View File
@@ -42,14 +42,24 @@ func main() {
slog.Warn("IoTDB 初始化失败,将降级使用 PostgreSQL", "err", err)
}
// 4. 连接 Redis(失败不阻断启动)
// 4. 连接 Redis(失败不阻断启动,但认证/限流保守失败
var rdb *redis.Client
if opt, err := redis.ParseURL(cfg.Redis); err == nil {
rdb := redis.NewClient(opt)
rdb = redis.NewClient(opt)
if err := rdb.Ping(context.Background()).Err(); err != nil {
slog.Warn("Redis 连接失败", "err", err)
slog.Error("Redis 连接失败,认证/限流将保守失败", "err", err)
_ = rdb.Close()
rdb = nil
} else {
slog.Info("Redis 连接成功")
}
} else {
slog.Error("Redis URL 解析失败,认证/限流将保守失败", "err", err)
}
if rdb != nil {
middleware.InitState(middleware.NewRedisState(rdb), cfg.AppEnv)
} else {
middleware.InitState(nil, cfg.AppEnv)
}
// 5. 创建 WebSocket Hub
@@ -76,6 +86,11 @@ func main() {
aiSvc := service.NewAIClient(cfg.AIServiceBase)
wechatSvc := service.NewWechatService(cfg.WechatAppID, cfg.WechatSecret)
weatherSvc := service.NewWeatherService(cfg.QWeatherAPIKey, cfg.QWeatherLocation)
outbox := service.NewOutbox(db)
outbox.SetHandler(service.NewWechatOutboxHandler(db, wechatSvc))
outboxCtx, cancelOutbox := context.WithCancel(context.Background())
defer cancelOutbox()
outbox.Start(outboxCtx)
// 9. 创建 Gin 引擎
gin.SetMode(gin.ReleaseMode)
@@ -111,7 +126,7 @@ func main() {
handler.RegisterVideoRecordRoutes(api, db, mediaSvc, cfg)
handler.RegisterStorageRoutes(api, db)
handler.RegisterKnowledgeRoutes(api, db, s3Svc, cfg.S3BucketImages)
handler.RegisterInspectionRoutes(api, db, s3Svc, aiSvc, cfg.S3BucketImages, wechatSvc, cfg.WechatTemplateInspection, cfg.AppEnv)
handler.RegisterInspectionRoutes(api, db, s3Svc, aiSvc, cfg.S3BucketImages, outbox, cfg.WechatTemplateInspection, cfg.AppEnv)
handler.RegisterTrayBatchRoutes(api, db)
handler.RegisterWechatRoutes(api, db, wechatSvc)
handler.RegisterWeatherRoutes(api, db, weatherSvc)