Я создаю приложение, используя 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 для проверки количества соединений.
{"current": 1, "available": 99, "totalCreated": xxx}
{"current": 50, "available": 50, "totalCreated": xxx}
{"current": 1, "available": 99, "totalCreated": xxx}
Насколько я понимаю, setPoolLimit (5) должен сохранять "current" не более (1 + 5) = 6.Но он не блокировал другие сеансы, которые идут после первых 5 сеансов.
Однако, если я изменю ограничение на 1. (setPoolLimit (1)), это позволит только одному единственному соединению работать одновременно, покаблокировать других.Кажется, лимит пула работает, только если я установил его равным 1.