连续同步失败后触发重试时间点

This commit is contained in:
root
2026-07-13 23:06:53 +08:00
parent 76692e0021
commit 98fc6d9e3d
17 changed files with 759 additions and 13 deletions
@@ -24,6 +24,12 @@ class SplitSyncConfigService
return $value !== '' ? rtrim($value, '/') : self::DEFAULT_NODE_HOST;
}
/** 失败重试时间点最多配置条数 */
private const FAIL_RETRY_SCHEDULE_MAX = 10;
/** 单条重试时间点上限(分钟) */
private const FAIL_RETRY_MINUTE_MAX = 1440;
/**
* 连续同步失败多少次后自动暂停工单(0 表示不因失败暂停)
*/
@@ -36,6 +42,50 @@ class SplitSyncConfigService
return max(0, (int) $value);
}
/**
* 达失败暂停阈值后的重试时间点(分钟,相对锚点的绝对偏移,升序去重)
*
* @return list<int>
*/
public static function getFailRetryMinutes(): array
{
$raw = trim(self::getConfigValue('split_sync_fail_retry_minutes'));
if ($raw === '') {
return [];
}
$parts = preg_split('/[,\s]+/', $raw) ?: [];
$minutes = [];
foreach ($parts as $part) {
$part = trim((string) $part);
if ($part === '' || !ctype_digit($part)) {
continue;
}
$minute = (int) $part;
if ($minute < 1 || $minute > self::FAIL_RETRY_MINUTE_MAX) {
continue;
}
$minutes[$minute] = $minute;
}
if ($minutes === []) {
return [];
}
$list = array_values($minutes);
sort($list, SORT_NUMERIC);
return array_slice($list, 0, self::FAIL_RETRY_SCHEDULE_MAX);
}
/**
* 是否配置了失败分阶段重试时间点
*/
public static function hasFailRetrySchedule(): bool
{
return self::getFailRetryMinutes() !== [];
}
/**
* 指定工单类型的自动同步周期(分钟),0 表示不自动同步
*/