簡體   English   中英

mongodb更改流的恢復令牌已過時時,java驅動程序行為是什么?

[英]What is the java driver behaviour, when the resume token for mongodb change streams is outdated?

觀看集合上的更改流時,我可以指定一個resume Token(帶有resumeAfter),以在操作日志中獲取該令牌之后的更改。 如果在操作日志中找不到此令牌(例如,客戶端斷開連接時間太長並提供了舊令牌),會發生什么情況?

特別是,異步mongodb java驅動程序會檢測到這種情況嗎?

對我來說,這個問題很重要,因為我必須檢測是否丟失了連接並必須再次提取所有數據,還是可以依靠changestream從集合中獲取所有更改。

文檔指出,

只要操作日志具有足夠的歷史記錄來定位應用程序收到的最后一個操作,更改流就可以恢復。

但沒有指定,否則會發生什么。 我還發現很難讀取驅動程序 ,以確定客戶端如何檢測是否可以在操作日志中找到最后一個令牌。

如果在操作日志中找不到此令牌會發生什么情況

如評論中所述,此行為發生在MongoDB服務器中。 當客戶端(即使用Java驅動程序編寫的應用程序)提交resumeToken ,服務器將驗證令牌。 另請參見resume_token.cpp(v3.7.0)

服務器發現的任何錯誤將被拋回到客戶端,然后客戶端將引發異常。 對於MongoDB Java驅動程序 ,它將是com.mongodb.MongoCommandException

如果擔心OpLog掉線,我建議結合簡歷令牌的緩存時間來計算副本集oplog的大小。 例如。 如果OpLog最多可以存儲24小時的操作,則恢復令牌可以每8-12小時緩存一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM