Golang MongoDB 分片连接池

Jackey Golang, MongoDB 452 次浏览 , 没有评论
package main

import (
    "context"
    "fmt"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
    "go.mongodb.org/mongo-driver/mongo/readpref"
    "time"
)

var MongoClient *mongo.Database

func main()  {
    mongoInit()
}

// pool 连接池模式
func mongoInit() {
    user := "score"
    password := "HnTcPKsZW8rp4o6O"
    host := "s-2ze4f91385c96964-pub.mongodb.rds.aliyuncs.com"
    port := "3717"
    dbName := "score"
    timeOut := 2
    maxNum := 100

    host1 := "s-2ze5dab972ad1714-pub.mongodb.rds.aliyuncs.com"

    uri := fmt.Sprintf("mongodb://%s:%s,%s:%s", host, port, host1, port)
    // 设置连接超时时间
    ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeOut)*time.Second)
    defer cancel()
    // 通过传进来的uri连接相关的配置
    credential := options.Credential{
        //AuthMechanism: "SCRAM-SHA-256",
        Username: user,
        Password: password,
        AuthSource: "score",
    }
    o := options.Client().ApplyURI(uri).SetAuth(credential)
    // 设置最大连接数 - 默认是100 ,不设置就是最大 max 64
    o.SetMaxPoolSize(uint64(maxNum))
    // 发起链接
    client, err := mongo.Connect(ctx, o)
    if err != nil {
        fmt.Println("ConnectToMongoDB", err)
        return
    }
    // 判断服务是不是可用
    ctx2, cancel2 := context.WithTimeout(context.Background(), time.Duration(timeOut)*time.Second)
    defer cancel2()
    if err = client.Ping(ctx2, readpref.Primary()); err != nil {
        fmt.Println("ConnectToMongoDB1", err)
        return
    }
    // 返回 client
    MongoClient = client.Database(dbName)
}

 

发表评论

您的电子邮箱地址不会被公开。

Go