Corda中可用的ReconnectingCordaRPCOps.kt
class具有以下注释:
* Note: There is no guarantee that observations will not be lost.
观察值可能丢失的条件是什么。
在重新连接期间,先前的观察者会自动从可观察对象中退订,并在再次建立连接后被重新订购。结果,如果在断开连接和重新连接之间的此窗口期间发生了任何事件,则不会将它们发送给可观察对象。
从Corda节点连续提取所有状态更新的可靠方法是什么?
当前,用于正常重新连接的API提供了两个附加的钩子onDisconnect
和onReconnect
(请参阅文档here),可用于执行一些协调以发现这些未发出的更新。这可以通过使用时间窗口[disconnection_event_time - safety_offset, reconnection_event_time + safety_offset]
查询节点的保管库,然后丢弃/重复删除已通过可观察对象看到的事件来实现。 safety_offset
越大,在不丢失事件的情况下此方法越可靠。