All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m33s
- 新增网关限流:按本系统运营商账户(卡 carrier_id)→ 限流组 → 操作限制每秒请求数,每次 HTTP 尝试计量,默认限流、仅后台人工点击/通道阈值/自动续费/手动刷新豁免;支持只统计与拦截两种模式,默认只统计 - Asynq 遇限流不计失败、固定短延迟重试;轮询任务与停复机业务重试遇限流短延迟重排 - 停机、复机不再使用网关内部重试,只发一次请求 - 网关返回结构化错误;新增上游错误分类规则表与测试接口 - 新增按月分区的停复机记录表:系统自动停复机只写记录,不再写统一审计与集成日志;普通轮询查询不再写集成日志 - 新增限流组、错误分类、停复机记录、按账户调用统计与枚举后台接口 - 迁移 000243~000246;同步 OpenSpec 提案(含后续 6 个 change)与技术方案、工程约束
60 lines
1.9 KiB
Go
60 lines
1.9 KiB
Go
package bootstrap
|
||
|
||
import (
|
||
"github.com/hibiken/asynq"
|
||
"github.com/redis/go-redis/v9"
|
||
"go.uber.org/zap"
|
||
"gorm.io/gorm"
|
||
|
||
"github.com/break/junhong_cmp_fiber/internal/gateway"
|
||
"github.com/break/junhong_cmp_fiber/internal/infrastructure/gatewaylimit"
|
||
"github.com/break/junhong_cmp_fiber/pkg/queue"
|
||
"github.com/break/junhong_cmp_fiber/pkg/storage"
|
||
)
|
||
|
||
// WorkerDependencies Worker 进程的基础依赖
|
||
type WorkerDependencies struct {
|
||
DB *gorm.DB
|
||
Redis *redis.Client
|
||
Logger *zap.Logger
|
||
AsynqClient *asynq.Client // Worker 特有:用于 Scheduler 提交任务
|
||
QueueClient *queue.Client // 统一业务任务客户端,用于 Worker 内产生后续任务
|
||
StorageService *storage.Service // 对象存储(可选)
|
||
GatewayClient *gateway.Client // Gateway 客户端(可选)
|
||
GatewayLimit *gatewaylimit.Runtime // 卡网关运营商账户限流组件(可选)
|
||
}
|
||
|
||
// WorkerBootstrapResult Worker Bootstrap 初始化结果
|
||
type WorkerBootstrapResult = queue.WorkerBootstrapResult
|
||
|
||
// WorkerStores 导出的 Worker Store 集合
|
||
type WorkerStores = queue.WorkerStores
|
||
|
||
// WorkerServices 导出的 Worker 服务集合
|
||
type WorkerServices = queue.WorkerServices
|
||
|
||
// BootstrapWorker 初始化 Worker 进程的所有组件
|
||
//
|
||
// 初始化顺序:
|
||
// 1. 初始化 Worker Store 层(数据访问)
|
||
// 2. 初始化 Worker Service 层(业务逻辑)
|
||
//
|
||
// 参数:
|
||
// - deps: Worker 基础依赖(DB, Redis, Logger, AsynqClient, StorageService, GatewayClient)
|
||
//
|
||
// 返回:
|
||
// - *WorkerBootstrapResult: 包含 Stores 和 Services
|
||
// - error: 初始化错误
|
||
func BootstrapWorker(deps *WorkerDependencies) (*WorkerBootstrapResult, error) {
|
||
// 1. 初始化 Worker Store 层
|
||
stores := initWorkerStores(deps)
|
||
|
||
// 2. 初始化 Worker Service 层
|
||
services := initWorkerServices(stores, deps)
|
||
|
||
return &WorkerBootstrapResult{
|
||
Stores: stores,
|
||
Services: services,
|
||
}, nil
|
||
}
|