可重试读取
可重试读取允许 MongoDB 驱动程序在遇到某些网络或服务器错误时,自动重试某些读取操作一次。
先决条件
- 最低驱动程序版本
与 MongoDB Server 4.2 及更高版本兼容的官方 MongoDB 驱动程序支持可重试读取。
有关官方 MongoDB 驱动程序的更多信息,请参阅 MongoDB 驱动程序。
- 最低服务器版本
- 只有连接到 MongoDB Server 3.6 或更高版本时,驱动程序才能重试读取操作。
启用可重试读取
与MongoDB Server 4.2及更高版本兼容的官方MongoDB驱动程序默认启用重试读取。 要显式禁用可重试读取,请在部署的retryReads=false
连接string 中指定 。
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
后不存在符合条件的服务器的情况。