很久很久以前,当我们使用 mgo.v2 时,我们创建了一些包装函数来复制会话、设置读取首选项并返回该函数以供其他库使用,例如
func NewMonotonicConnection() (conn *Connection, success bool) {
conn := &Connection{
session: baseSession.Copy(),
}
conn.session.SetMode(mongo.Monotonic, true)
return conn, true
}
现在,我们只需在 init 函数中传递默认客户端(使用 mongo.Connect 初始化并传递到连接单例中),然后像这样使用:
func NewMonotonicConnection() (conn *Connection, success bool) {
conn = defaultConnection
return conn, true
}
我的理解是,要利用连接池,您需要使用相同的客户端(包含在 defaultConn 中),并且会话现在在 / .All()
cursor 拆卸内部隐式处理。如果我在这里错了,请纠正我。
如果我们仍然可以在这些连接上设置 readpref(例如,在返回之前在此连接上设置 NearestMode),那就太好了,但是社区/标准的做法是什么?
我知道我可以一遍又一遍地调用 mongo.Connect,但是那贵吗?
我可以创建不同的客户端 - 每个客户端都有不同的 readpref - 但我在想,如果在该连接上发生写入,它永远不会返回从从属设备读取。
看起来我*可以显式创建会话,但我不确定我应该或者在新驱动程序中显式管理这些会话是否有任何影响。
qq_花开花谢_0
相关分类