我正在尝试处理与 MongoDB 的重新连接。为此,我尝试将每个操作执行三次(以防因 io.EOF 失败)
type MongoDB struct {
session *mgo.Session
DB *mgo.Database
}
func (d MongoDB) performWithReconnect(collection string,
operation func(*mgo.Collection) error) error {
var err error
for i := 0; i < 3; i++ {
session := d.session.Copy()
defer session.Close()
err = operation(session.DB(Config.MongoDb).C(collection))
if err == io.EOF{
continue
}
if err == nil{
return err
}
}
return err
}
Run Code Online (Sandbox Code Playgroud)
所以问题是关于延迟。它会像我想象的那样关闭所有会话还是会以其他方式表现?如果您知道一些处理这种不同方式的良好实践,我将很乐意阅读它们。