gpt4 book ai didi

java - 当 mongodb 更改流的恢复 token 过时时,java 驱动程序的行为是什么?

转载 作者:行者123 更新时间:2023-12-02 11:09:36 24 4
gpt4 key购买 nike

当观察集合上的更改流时,我可以指定一个恢复 token (使用resumeAfter)来获取opslog中该 token 之后的更改。如果在 opslog 中找不到此 token (例如,客户端断开连接时间太长并提供了旧 token ),会发生什么?

特别是,异步 mongodb java 驱动程序会检测到这种情况吗?如何检测?

对我来说,这个问题很重要,因为我必须检测我是否丢失了连接并必须再次提取所有数据,或者可以依赖变更流从集合中获取所有更改。

documentation状态,即

Change streams are resumable, as long as the oplog has enough history to locate the last operation that the application received.

但没有具体说明,否则会发生什么。我还发现阅读驱动程序相当困难source ,以确定客户端如何检测是否可以在 opslog 中找到最后一个 token 。

最佳答案

What happens if this token cannot be found in the oplog

正如评论中提到的,这种行为发生在 MongoDB 服务器中。当客户端(即使用 Java 驱动程序编写的应用程序)提交 resumeToken 时,服务器将验证该 token 。另请参阅resume_token.cpp (v3.7.0)

服务器发现的任何错误都会被抛回客户端,然后客户端会引发异常。以MongoDB Java driver为例它将是com.mongodb.MongoCommandException

如果担心 OpLog 脱落,我建议计算 replica set oplog结合恢复 token 的缓存周期相应调整大小。例如。如果 OpLog 可以存储长达 24 小时的操作,则恢复 token 可能每 8-12 小时缓存一次。

关于java - 当 mongodb 更改流的恢复 token 过时时,java 驱动程序的行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50693967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com