У меня есть кластер Докеров, в котором работает 10 веб-сервисов (такого же типа). Все они используют MongoDB, среди прочего, для сохранения данных.«Закрыто явно» mgo MongoDB в Go
Это код, который вызывается из 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 и рабочие просто использовать глобальные переменные, такие как Entries
, Settings
и т.д.
После некоторого времени работы служба перестала работать должным образом. Каждое действие mongo, такое как Entries.find(...)
, возвращает ошибку: Closed Explicitly
.
Что это значит? Должен ли я периодически обновлять соединение mongoDB или я должен закрыть его и восстановить соединение с каждым запросом?
Приложение ориентировано на производительность, поэтому, несмотря на то, что соединение mongo не работает, все работает и работает, поскольку все работает в кэше в памяти или кластере. Я не хочу делать что-то глупое, что задерживает обработку.