f2ada02383
审核发现一批表/元数据只增不删,且对象存储存在活跃泄漏: - module-cleanup 漏收 task_result_item / task_result_payload 的 payload 指针, 每晚删完行就在 json-server 桶留下孤儿对象;指针收集触顶从"截断后照样删整组" 改为任务组二分拆分,拆到单任务仍触顶则整组不删并记 error(截断会让指针随行消失) - 结果文件对象此前从不回收(只删 DB 行、对象留在桶里),现改为事务提交后 按 file_result / task_file_job 的 result_file_url 逐个回收 - 新增 7 个保留期清理:device_log_file 元数据、price_track_loop_run、撞款扫描行、 密钥用量日统计、紫鸟记忆过期行、PUBLISH 任务、BRAND 任务。后两者刻意不复用 module-cleanup(BRAND 不写 biz_file_task;PUBLISH 单任务可达数万行), 改为调各自既有的业务删除入口,保证结果对象与子表一起回收 - 未读通知补保留期(180 天,已读仍 90 天);ZiniaoMemoryStoreService.deleteExpired 此前全库无调用方(实现了没接线),现已挂定时任务 全部沿用既有范式:@Scheduled + 分布式锁单实例 + 分批 + 单轮批次数上限 + 失败只记日志。
79 lines
3.4 KiB
Java
79 lines
3.4 KiB
Java
package com.nanri.aiimage.config;
|
|
|
|
import lombok.Data;
|
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
|
|
|
/**
|
|
* 站内通知(铃铛)扫描与探测配置:
|
|
* 任务失败扫描、下游服务健康探测、已读通知保留期。
|
|
*/
|
|
@Data
|
|
@ConfigurationProperties(prefix = "aiimage.notification")
|
|
public class NotificationProperties {
|
|
|
|
/** 扫描总开关:关闭后任务失败扫描与服务探测都不执行(应急降噪)。 */
|
|
private boolean scanEnabled = true;
|
|
|
|
/** 扫描间隔(毫秒),默认 5 分钟(任务失败聚合按小时去重,高频扫描不会重复提醒)。 */
|
|
private long scanIntervalMs = 5 * 60 * 1000L;
|
|
|
|
/** 首次执行延迟(毫秒),默认 2 分钟,避开启动阶段的数据库压力。 */
|
|
private long scanInitialDelayMs = 2 * 60 * 1000L;
|
|
|
|
/** 任务失败扫描开关。 */
|
|
private boolean taskScanEnabled = true;
|
|
|
|
/** 任务失败回看窗口(分钟):窗口内进入失败终态的任务参与聚合。 */
|
|
private int taskFailedWindowMinutes = 60;
|
|
|
|
/** 单轮任务扫描最多处理条数(超出下一轮继续,避免大表拖垮扫描)。 */
|
|
private int taskScanMaxRows = 1000;
|
|
|
|
/** 服务健康探测开关。 */
|
|
private boolean serviceProbeEnabled = true;
|
|
|
|
/** 品牌检测服务地址(主机A 15126,探测 /api/version);留空=跳过该项探测。 */
|
|
private String brandServiceUrl = "";
|
|
|
|
/** 跟价任务 API 地址(主机B 18960,探测根路径);留空=跳过该项探测。 */
|
|
private String priceTrackApiUrl = "";
|
|
|
|
/** jikip 代理接口探测开关(复用余额查询接口判活,使用 user-secret 的 jikip 配置)。 */
|
|
private boolean jikipProbeEnabled = true;
|
|
|
|
/** 麦象(18960 任务调度)异常扫描开关:任务停滞/失败/队列积压 → 管理员通知。 */
|
|
private boolean maixiangScanEnabled = true;
|
|
|
|
/**
|
|
* 麦象后台接口令牌(18960 console token)。留空=跳过麦象异常扫描——
|
|
* 该令牌与「跟价任务 API 地址」(priceTrackApiUrl) 一起构成后台只读接口的访问凭据。
|
|
*/
|
|
private String maixiangConsoleToken = "";
|
|
|
|
/** 麦象批量任务停滞阈值(分钟):status=0/1 且超过该时长无更新视为卡住。 */
|
|
private int maixiangStuckMinutes = 60;
|
|
|
|
/** 麦象单任务滞留阈值(分钟):创建超时仍未完成(status=0/1)视为滞留/无人消费。 */
|
|
private int maixiangSingleStuckMinutes = 30;
|
|
|
|
/** 麦象任务失败告警阈值(条):近 30 分钟窗口内失败数达到该值才告警。 */
|
|
private int maixiangFailMinCount = 1;
|
|
|
|
/** 麦象队列积压阈值(条):task:queue 待处理数达到该值告警。 */
|
|
private int maixiangQueuePendingThreshold = 300;
|
|
|
|
/** 麦象队列积压阈值(条):task:processing 处理中数达到该值告警。 */
|
|
private int maixiangQueueProcessingThreshold = 100;
|
|
|
|
/** 已读通知保留天数(超期自动清理),默认 90 天。 */
|
|
private int readRetentionDays = 90;
|
|
|
|
/**
|
|
* 未读通知保留天数,默认 180 天(比已读长一倍)。
|
|
*
|
|
* <p>未读通知此前永不清理:不看铃铛的用户会无限累积。保留期给得更宽,
|
|
* 是因为未读意味着"用户可能还没看到",但也不能永远留着。
|
|
*/
|
|
private int unreadRetentionDays = 180;
|
|
}
|