在ChangeStream中收到第一个文档之前,使用MongoDB Java驱动程序获取resume令牌?
这个问题与Java驱动程序类似,但适用于Java驱动程序。如果需要确保所有文档至少处理一次,那么这一点至关重要 例如,假设我有一个变更流(C),它订阅文档并根据每个文档的内容发送电子邮件。但是,如果电子邮件发送失败或服务器在发送电子邮件之前崩溃,则恢复令牌(R)将不会被持久化。当应用程序再次启动时,它将在没有简历令牌的情况下“监视”,因此文档将丢失,并且不会发送电子邮件 是否有一种受支持的方法可以在收到第一个变更文档之前获取的恢复令牌来缓解上述问题 从我从中可以看出,这必须得到驱动程序的支持: 驱动程序必须公开一种机制来检索用于自动恢复的相同恢复令牌 但我似乎找不到使用JavaAPI实现这一点的方法。这是可能的还是有推荐的解决方法在ChangeStream中收到第一个文档之前,使用MongoDB Java驱动程序获取resume令牌?,java,mongodb,Java,Mongodb,这个问题与Java驱动程序类似,但适用于Java驱动程序。如果需要确保所有文档至少处理一次,那么这一点至关重要 例如,假设我有一个变更流(C),它订阅文档并根据每个文档的内容发送电子邮件。但是,如果电子邮件发送失败或服务器在发送电子邮件之前崩溃,则恢复令牌(R)将不会被持久化。当应用程序再次启动时,它将在没有简历令牌的情况下“监视”,因此文档将丢失,并且不会发送电子邮件 是否有一种受支持的方法可以在收到第一个变更文档之前获取的恢复令牌来缓解上述问题 从我从中可以看出,这必须得到驱动程序的支持:
请注意,我非常不喜欢使用基于时间戳的
startAtOperationTime
,因为时间是脆弱的,服务器和客户端上的时钟都可能更改。在实现规范“必须公开恢复令牌”规定的4.2兼容驱动程序中,每次更改流执行getMore时,发生两件事之一:
- 返回至少一个文档,每个文档在该文档处包含一个恢复令牌,或者
- 没有返回任何文档,在这种情况下,postBatchResumeToken仍然由4.0.7+服务器提供