feat: 按运营商账户调度的分发器、卡任务执行器与模式切换
- 四个轮询处理器拆为步骤函数 Step(返回结果分类),旧 Asynq Handle 只做并发控制与原有重入队映射,行为不变;carrier 模式下旧 handler 直接结束
- 网关限流增加等待模式(ctx 标记),NSQ 消费者等名额到单步超时,超时按限流处理不计失败;记录限流等待次数
- 卡任务执行器:核对 token 并抢执行权,按配置步骤顺序串行执行到期检查(单步超时、总超时、panic 恢复、流量已触发评估时跳过套餐),执行中续期并 Touch,续期失败立即停止;收尾写回到期、连续失败、退避、延迟确认与告警
- 分发器:每秒按账户抢分发锁领取(执行上限按消费能力收紧、优先占比、按限流组剩余 QPS 估算),发布到 polling.card.{账户},发布失败释放;消费旧优先提示与手动触发;心跳与处理中标记到期计数
- NSQ 生产者与按账户动态订阅的消费者管理器,优雅退出宽限期
- 失败告警异步写 tb_polling_failure_alert(同卡同类型一条未处理,成功转已恢复),账户窗口内告警数超阈值产生账户级告警
- 模式监听:切 carrier 时旧分片调度停止出队,加锁初始化新结构后开始领取并订阅;回 legacy 时停止消费、重建旧分片队列;生命周期(API 与 Worker)在 carrier 模式写账户队列
This commit is contained in:
@@ -40,6 +40,7 @@ type Handler struct {
|
||||
workerResult *WorkerBootstrapResult
|
||||
asynqClient *asynq.Client
|
||||
pollingBase *task.PollingBase
|
||||
pollingSteps PollingStepHandlers
|
||||
pollingStopResumeSvc iot_card_svc.StopResumeServiceInterface
|
||||
}
|
||||
|
||||
@@ -292,6 +293,7 @@ func (h *Handler) registerPollingHandlers() {
|
||||
cardStatusHandler := task.NewPollingCardStatusHandler(
|
||||
h.pollingBase, h.gatewayClient, h.workerResult.Services.CardObservation, integrationRepository)
|
||||
|
||||
h.pollingSteps = PollingStepHandlers{Realname: realnameHandler, Carddata: carddataHandler, Package: packageHandler, CardStatus: cardStatusHandler}
|
||||
h.mux.HandleFunc(constants.TaskTypePollingRealname, realnameHandler.Handle)
|
||||
h.mux.HandleFunc(constants.TaskTypePollingCarddata, carddataHandler.Handle)
|
||||
h.mux.HandleFunc(constants.TaskTypePollingPackage, packageHandler.Handle)
|
||||
@@ -408,3 +410,16 @@ func (h *Handler) registerOperationsReportSnapshotHandler() {
|
||||
func (h *Handler) GetMux() *asynq.ServeMux {
|
||||
return h.mux
|
||||
}
|
||||
|
||||
// PollingStepHandlers 是四个轮询检查步骤处理器,旧分片调度注册为 Asynq handler,按运营商账户调度的卡任务执行器复用其 Step。
|
||||
type PollingStepHandlers struct {
|
||||
Realname *task.PollingRealnameHandler
|
||||
Carddata *task.PollingCarddataHandler
|
||||
Package *task.PollingPackageHandler
|
||||
CardStatus *task.PollingCardStatusHandler
|
||||
}
|
||||
|
||||
// PollingSteps 返回轮询检查步骤处理器(RegisterHandlers 之后可用)。
|
||||
func (h *Handler) PollingSteps() PollingStepHandlers {
|
||||
return h.pollingSteps
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user