首页 > 解决方案 > 如何使用 setPoolLimit 来管理连接?

问题描述

我正在通过将 golang 与具有最大连接数的 mongodb atlas 一起使用来构建应用程序。我尝试使用“session.SetPoolLimit(5)”来确保同时连接不超过 5 个。但是,它没有用。

var originSession *mgo.Session
func query(wg *sync.WaitGroup)  {
    mySession := originSession.Copy()
    var items []interface{}
    mySession.DB("testdb").C("test").Find(nil).All(&items)
    time.Sleep(1500)
    mySession.Close()
    wg.Done()
}
func main() {
    originSession, _ = mgo.Dial(connectString) // connect to server
    defer originSession.Close()
    originSession.SetPoolLimit(5)
    var wg sync.WaitGroup
    for i:=0; i<50;i++{
        wg.Add(1)
          go getInfoBackWithSleep(&wg)
        }
    wg.Wait()
}

我使用 db.serverStatus().connections 来检查连接数。

{“当前”:1,“可用”:99,“totalCreated”:xxx}

{“当前”:50,“可用”:50,“totalCreated”:xxx}

{“当前”:1,“可用”:99,“totalCreated”:xxx}

据我了解,setPoolLimit(5) 应保持“当前”不超过 (1+5)=6。但它并没有阻止前 5 个会话之后的其他会话。

但是,如果我将限制更改为 1。 (setPoolLimit(1)) 它只会让一个连接同时工作而阻止其他连接。似乎池限制仅在我将其设置为 1 时才有效。

标签: mongodbgomgo

解决方案


推荐阅读