如何使用setPoolLimit来管理连接?

时间:2018-11-21 22:32:21

标签: mongodb go mgo

我正在通过将golang与具有最大连接数的mongodb地图集结合使用来构建应用程序。我尝试使用“ 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时才有效。

0 个答案:

没有答案