我正在通过将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时才有效。