Golang官方驱动程序中的MongoDB连接池

时间:2019-10-14 02:47:58

标签: mongodb go mongo-go

我在项目中有两个go文件

  1. main.go

此文件创建http服务器和mongoDB连接,并提供一种方法,该方法允许使用以下命令重用连接

func ConnectMongoDB() {

    ctx, _ := context.WithTimeout(context.Background(), 30*time.Second)

    // user Connection database

    // Set client options
    clientOptions := options.Client().ApplyURI("mongodb+srv://localhost:27017/demo")

    // Connect to MongoDB
    userclient, err = mongo.Connect(ctx, clientOptions)

    if err != nil {
        log.Fatal(err)
    }

    // Check the connection
    err = userclient.Ping(ctx, nil)

    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Connected to user MongoDB!")

}

//GetMongoDBClient , return mongo client for CRUD operations
func GetMongoDBClient() *mongo.Client {

    return userclient
}

  1. query.go

此文件然后定义数据库,然后在其上进行查询

client := GetMongoDBClient()

collection := client.Database("demo").Collection("user")

err := collection.FindOne(context.TODO(), filter).Decode(&user)

当我发出200个请求时,我收到了来自Atlas的电子邮件,说我已经超过了80个连接限制配额。如何在这里利用连接池?

2 个答案:

答案 0 :(得分:1)

您是否尝试过MaxPoolSize选项:

clientOptions = clientOptions.SetMaxPoolSize(50)

我还没有在正式的mongo驱动程序中尝试过此操作,但是mgo驱动程序具有类似的选项,可以按预期工作。

答案 1 :(得分:0)

REM **默认poolSize为100,请参见Golang driver docs