分散刷新后补上备机同步
原实现中「全量刷新 → 通知备机同步」是同一步的两个动作:refreshAll() 由调用方跟一次 requestSubscriptionSync()。改为按账号分散刷新后,调度器 自己没有触发同步,刷新出的新缓存要等到下一次周期同步才可能送到备机。 生产上每 60 秒有一次周期同步兜底,所以影响被限制在最长约一分钟的滞后; 但这属于重构时漏掉的语义,且一旦把周期同步间隔调大就会变成真实缺口, 因此仍按原语义在刷新到内容后立即触发同步。没有账号到期时不打扰备机。 测试 441 通过。
This commit is contained in:
@@ -38,6 +38,7 @@ public class SubscriptionRefreshScheduler {
|
||||
private final SubscriptionRefreshService refreshService;
|
||||
private final SubscriptionRefreshPlanner planner;
|
||||
private final PushService pushService;
|
||||
private final RemoteService remoteService;
|
||||
|
||||
/** 单个 tick 最多刷新几个账号,避免重启后一批到期账号同时开火。 */
|
||||
@Value("${subscription.refresh.max-per-tick:2}")
|
||||
@@ -53,11 +54,13 @@ public class SubscriptionRefreshScheduler {
|
||||
public SubscriptionRefreshScheduler(SubMapper subMapper,
|
||||
SubscriptionRefreshService refreshService,
|
||||
SubscriptionRefreshPlanner planner,
|
||||
PushService pushService) {
|
||||
PushService pushService,
|
||||
RemoteService remoteService) {
|
||||
this.subMapper = subMapper;
|
||||
this.refreshService = refreshService;
|
||||
this.planner = planner;
|
||||
this.pushService = pushService;
|
||||
this.remoteService = remoteService;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -97,6 +100,10 @@ public class SubscriptionRefreshScheduler {
|
||||
refreshed++;
|
||||
}
|
||||
reportStale(enabled, now);
|
||||
// 缓存内容变了就要让备机同步。原先全量刷新后由调用方跟一次同步,
|
||||
// 改为分散刷新后必须在这里补上,否则备机要等到下一次周期同步才拿到新内容。
|
||||
if (refreshed > 0)
|
||||
remoteService.requestSubscriptionSync();
|
||||
return refreshed;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user