可重试读取
可重试的读取操作允许MongoDB驱动程序在遇到某些网络或服务器错误时自动重试某些读取操作一次。
先决条件
- 最低驱动程序版本
与MongoDB服务器4.2及更高版本兼容的官方MongoDB驱动程序支持可重试的读取操作。
有关官方MongoDB驱动程序的更多信息,请参阅MongoDB 驱动程序.
- 最低服务器版本
- 如果连接到MongoDB服务器3.6或更高版本,驱动程序才能重试读取操作。
启用可重试的读取
与MongoDB服务器4.2及更高版本兼容的官方MongoDB驱动程序默认启用可重试的读取操作。要显式禁用可重试的读取操作,在部署的连接字符串中指定retryReads=false
mongosh
不支持可重试的读取操作。
可重试的读取操作
MongoDB 驱动程序支持重试以下读取操作。列表引用了每个方法的通用描述。有关具体语法和用法,请参阅该方法的驱动程序文档。
方法 | 描述 |
---|---|
CRUD API 读取操作 | |
Collection.watch Database.watch MongoClient.watch | 变更流操作 |
MongoClient.listDatabases Database.listCollections Collection.listIndexes | 枚举操作 |
由 Collection.find 支持的 GridFS 操作(例如 GridFSBucket.openDownloadStream ) | GridFS 文件下载操作 |
MongoDB 驱动程序可能包括对其他操作的可重试支持,例如辅助方法或包装可重试读取操作的方法。有关是否显式支持可重试读取的信息,请参阅 驱动程序文档。
不支持的读操作
以下操作不支持可重试读
传递给通用
Database.runCommand
辅助函数的任何读命令,该函数对读或写命令无感知。
行为
持久性网络错误
MongoDB的重试读取只尝试重试一次。这有助于解决瞬态网络错误或副本集选举,但不能解决持久性网络错误。
故障转移周期
在重试读取操作之前,驱动程序使用读取命令原始的读取优先级执行服务器选择。如果驱动程序无法使用原始读取优先级选择服务器进行重试尝试,则驱动程序返回原始错误。
驱动程序在执行服务器选择之前等待serverSelectionTimeoutMS
毫秒。重试读取不能解决在等待serverSelectionTimeoutMS
后没有合格服务器的情况。