Как использовать setPoolLimit для управления соединениями? - PullRequest
0 голосов
/ 22 ноября 2018

Я создаю приложение, используя 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.

...