gpt4 book ai didi

mongodb - "Closed Explicitly"mgo Go 中的 MongoDB

转载 作者:IT王子 更新时间:2023-10-29 02:24:55 26 4
gpt4 key购买 nike

我有一个运行 10 个 Web 服务(同类)的 Docker 集群。他们都在使用 MongoDB,其中包括用于数据持久性的东西。

这是在服务启动时从 main() 调用的代码:

// Init establishes a connection with MongoDB instance.
func Init(mongoURL string) *mgo.Session {
mongo, err := mgo.Dial(mongoURL)
misc.PanicIf(err)

// make sure we are strongly consistent
mongo.SetMode(mgo.Strong, true)

// update global state
db = mongo
Entries = db.DB("").C("entries")
Channels = db.DB("").C("channels")
Settings = db.DB("").C("settings")
Metadata = db.DB("").C("metadata")

// only use this on first load, to confirm the settings are there
// every refresh should be done via UpdateGlobalSettings (thread-safe)
GlobalSettings = &GlobalSettingsStruct{}
GlobalSettings.Init()

return mongo
}

基本上,API 和 worker 只使用全局变量,例如 EntriesSettings 等。

运行一段时间后,服务停止正常工作。每个 mongo 操作,例如 Entries.find(...) 都会返回一个错误:Closed Explicitly

这是什么意思?我应该定期刷新 mongoDB 连接,还是应该关闭它并重新建立与每个请求的连接?

该应用程序以性能为导向,因此尽管 mongo 连接断开,但一切仍在运行,因为一切都在内存或集群缓存中运行。我不想做一些延迟处理的蠢事。

最佳答案

没关系。但是要使用 Session.Copy 创建一个新的连接实例,而不是直接使用返回的 session 。 golang mongodb驱动包里面有连接池。

关于mongodb - "Closed Explicitly"mgo Go 中的 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32682745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com