Republish
如果某个 NotificationMessage 因为网络丢包客户端没收到, Republish 让服务端从缓存里重发:
Status Republish(uint32_t retransmit_sequence_number);
一般无需调用
正常情况下 SDK 内部 AutoPublish 处理 SequenceNumber Ack, 客户端无感. 本 API 仅在特殊场景 (主动补包 / 调试) 使用.
何时用
- 客户端检测到 SequenceNumber 不连续 (gap), 主动补
- 临时网络故障后, 想拿回这段时间的数据
- 调试期 / 测试 SDK Republish 行为
用法
auto st = sub.Republish(/*seq_no=*/12345);
if (st == Status::Good) {
std::cout << "Server confirmed retransmit, data will arrive in next Publish\n";
} else {
std::cout << "Republish failed: 0x" << std::hex << static_cast<uint32_t>(st) << "\n";
}
注意
- 服务端只缓存最近 N 条 NotificationMessage (典型 N = 10), 超出的拿不回
- Republish 是请求服务端 "下次 Publish 时重发", 不是直接拿数据
- 重发的数据通过正常
OnDataChange回调, 客户端无需特殊处理 - 失败码
Status::BadMessageNotAvailable表示该 SequenceNumber 已超出缓存
与 TransferSubscriptions 的区别
| API | 含义 |
|---|---|
sub.Republish(seq_no) | 服务端记得 Subscription, 只是某条消息漏了 |
s.TransferSubscriptions(...) | Session 重连后接管旧 Session 的订阅 |
详见 Session 总览.