mongodb - 如何使用 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 时才有效。
解决方案
推荐阅读
- jsx - 从 CRA 弹出后“您可能需要适当的加载程序来处理此文件类型”
- ruby-on-rails - 使用 Rails 如何在给定时间段内查找用户预订的课程
- c# - 重构代码以不使用绝对路径或 URI
- html - 在节点 js 中,req.body 未定义
- clojure - Clojure 减少参数解构
- javascript - 如何使用基本的 javascript 代码平滑打开下拉菜单?
- three.js - 什么是推荐的方式,在三个 js 中,渲染(大部分)静态场景
- mysql - MySQL:如何制作拒绝未成年员工的触发器?
- python - Django过滤器内的条件
- python - 要在 Sagemaker 中使用的 tf.distribute.cluster_resolver.TPUClusterResolver(tpu_name) 的替代方案?