Files
junhong_cmp_fiber/migrations/000251_add_carrier_polling_param.up.sql
邹进 dae44bed30 feat: 按运营商账户调度的迁移、配置与账户队列 Lua
- 迁移 000251~000254:运营商账户调度参数、请求检查场景(预置 8 个)、卡轮询失败告警表,以及调度模式、步骤、退避、告警等受控系统配置(默认 legacy,行为不变);并发配置表注释标记废弃
- 受控系统配置注册与 JSON 结构校验:步骤只能是 4 种检查类型且不重复、退避序列递增
- yaml 增加 NSQ 地址、msg_timeout、租约、续期间隔、分发间隔、默认执行上限与 max_in_flight;引入 go-nsq
- 测试环境 docker-compose 增加 nsqlookupd 与 nsqd,Worker 注入 NSQ 地址
- 账户队列 Redis 结构与 Lua:领取(执行上限、优先占比、按限流组剩余 QPS 估算)、抢执行权、续期、收尾、请求检查(合并、冷却、执行中打优先标记)、移出、发布失败释放
2026-10-25 18:28:42 +09:00

43 lines
3.1 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 运营商账户调度参数(add-carrier-polling-scheduler)。
-- 背景:新调度按运营商账户领取与执行卡任务,每个账户的执行上限、每进程并发、优先占比需要可单独配置。
--
-- 设计选择:
-- 1. carrier_id 唯一,一个账户一行;未配置的账户没有记录、使用 yaml 全局默认,不改 tb_carrier。
-- 2. 各参数可空,空表示该项使用全局默认。
-- 3. stop_resume_* 与 sr_inflight_limit 供停复机指令队列(add-stop-resume-command-queue)使用,本次只建列。
-- 4. 不使用数据库外键(ENG-MODEL-001);软删除,后台维护。
CREATE TABLE tb_carrier_polling_param (
id BIGSERIAL PRIMARY KEY,
carrier_id BIGINT NOT NULL,
inflight_limit INTEGER,
card_max_in_flight INTEGER,
stop_resume_max_in_flight INTEGER,
sr_inflight_limit INTEGER,
priority_max_ratio NUMERIC(4, 3),
stop_resume_min_interval INTEGER,
stop_resume_confirm_delay INTEGER,
creator BIGINT NOT NULL DEFAULT 0,
updater BIGINT NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
deleted_at TIMESTAMPTZ,
CONSTRAINT ck_carrier_polling_param_positive CHECK (
(inflight_limit IS NULL OR inflight_limit > 0) AND (card_max_in_flight IS NULL OR card_max_in_flight > 0)
AND (stop_resume_max_in_flight IS NULL OR stop_resume_max_in_flight > 0) AND (sr_inflight_limit IS NULL OR sr_inflight_limit > 0)
AND (stop_resume_min_interval IS NULL OR stop_resume_min_interval > 0) AND (stop_resume_confirm_delay IS NULL OR stop_resume_confirm_delay > 0)),
CONSTRAINT ck_carrier_polling_param_ratio CHECK (priority_max_ratio IS NULL OR (priority_max_ratio > 0 AND priority_max_ratio <= 1))
);
CREATE UNIQUE INDEX uk_carrier_polling_param_carrier ON tb_carrier_polling_param (carrier_id) WHERE deleted_at IS NULL;
COMMENT ON TABLE tb_carrier_polling_param IS '运营商账户调度参数:未配置的账户使用全局默认';
COMMENT ON COLUMN tb_carrier_polling_param.carrier_id IS '运营商账户ID';
COMMENT ON COLUMN tb_carrier_polling_param.inflight_limit IS '该账户同时执行卡任务的上限(跨 Worker 实例)';
COMMENT ON COLUMN tb_carrier_polling_param.card_max_in_flight IS '每个 Worker 进程消费该账户卡任务 topic 的 max_in_flight';
COMMENT ON COLUMN tb_carrier_polling_param.stop_resume_max_in_flight IS '每个 Worker 进程消费该账户停复机 topic 的 max_in_flight';
COMMENT ON COLUMN tb_carrier_polling_param.sr_inflight_limit IS '该账户同时执行停复机指令的上限';
COMMENT ON COLUMN tb_carrier_polling_param.priority_max_ratio IS '卡任务每轮领取中优先队列的最大占比(0~1),空表示不限';
COMMENT ON COLUMN tb_carrier_polling_param.stop_resume_min_interval IS '单卡两次停复机网关调用的最小间隔(秒)';
COMMENT ON COLUMN tb_carrier_polling_param.stop_resume_confirm_delay IS '停复机结果未知后查卡状态确认的延迟(秒)';