去掉订阅快照的周期性重发
节点侧已改为按「收到主站的任何消息」判定新鲜度(过期 ⇔ 主站失联), 主站每 30 分钟的可用性检查即可持续刷新,因此主站不需要任何为续期的周期性推送。 - 删除上一版加入的 scheduledSubscriptionKeepalive(6 小时一次)。 - 保留「内容变化即推」(各处 requestSubscriptionSync)与「节点上线即推」 (initChannel),两者覆盖变更下发与节点冷启动两种场景。 - 移除对应的 standby 保活配置项。 最终推送时机:只在订阅内容变化时推送,另在节点上线时补推一次; 空闲时零快照传输(此前 60 秒一次时为约 486 MiB/天)。 测试:433 项全过。新增 SubscriptionSnapshotPushTest 锁住两条约定—— RemoteService 不得再有定时任务(续期改由节点存活信号承担),以及订阅刷新成功后 仍必须触发一次推送(用真实 refreshDueAccounts 调用验证)。
This commit is contained in:
@@ -18,7 +18,6 @@ import io.netty.util.concurrent.Promise;
|
||||
import lombok.Data;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import jakarta.annotation.PostConstruct;
|
||||
@@ -254,21 +253,10 @@ public class RemoteService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 低频保活推送。
|
||||
*
|
||||
* <p>快照推送改为「订阅内容变化时立即推」之后,内容长期不变时节点将收不到任何推送,
|
||||
* 而节点的过期判定依据「最近一次收到快照的时刻」——于是它会在一周后永久判过期。
|
||||
* 这个保活用于把「主站在线」这件事周期性告诉节点,刷新其新鲜度。
|
||||
*
|
||||
* <p>周期远小于节点 `SubscriptionMaxStaleSeconds`(默认 7 天):默认 6 小时一次,
|
||||
* 约 1.4 MiB/天,相比原先每 60 秒一次的约 486 MiB/天 降低约三个数量级。
|
||||
*/
|
||||
@Scheduled(fixedDelayString = "${subscription.standby.keepalive-interval-ms:21600000}",
|
||||
initialDelayString = "${subscription.standby.keepalive-initial-delay-ms:600000}")
|
||||
void scheduledSubscriptionKeepalive() {
|
||||
requestSubscriptionSync();
|
||||
}
|
||||
// 这里刻意没有「定期重发整份快照」的定时任务:
|
||||
// 快照只在订阅内容变化时推送(各处 requestSubscriptionSync),节点上线时补推一次。
|
||||
// 备机的过期语义是「主站失联」,由节点按「收到主站的任何消息」判定新鲜度——
|
||||
// 主站每 30 分钟的可用性检查即可持续刷新它,因此不需要为续期而周期性传输快照。
|
||||
|
||||
private void drainSubscriptionSyncQueue() {
|
||||
try {
|
||||
|
||||
@@ -76,10 +76,9 @@ subscription:
|
||||
standby:
|
||||
sync-enabled: "${SUBSCRIPTION_STANDBY_SYNC_ENABLED:false}"
|
||||
sync-secret: "${SUBSCRIPTION_SYNC_SECRET:}"
|
||||
# 快照改为「订阅内容变化时立即推送」,另加低频保活刷新节点新鲜度。
|
||||
# 周期须远小于节点 SubscriptionMaxStaleSeconds(默认 7 天),默认 6 小时。
|
||||
keepalive-interval-ms: 21600000
|
||||
keepalive-initial-delay-ms: 600000
|
||||
# 快照只在订阅内容变化时推送(另在节点上线时补推一次),没有周期性重发。
|
||||
# 备机的过期语义是「主站失联」,由节点按「收到主站的任何消息」判定新鲜度,
|
||||
# 主站每 30 分钟的可用性检查即可持续刷新,无需为续期周期性传输快照。
|
||||
|
||||
bot:
|
||||
token: "5222939329:AAHa6l9ZuVVdNSDLPI_H-c8O_VgeOEw5plA"
|
||||
|
||||
Reference in New Issue
Block a user