Я написал веб-службу REST, которая использует mongo в качестве хранилища данных. Мне было интересно на этом этапе (до развертывания), каковы были лучшие методы, учитывая сервис, который по существу работает вечно (ish).MGO и длинные веб-службы - восстановление
В настоящее время я после этого типа шаблона:
// database.go
...
type DataStore struct {
mongoSession *mgo.Session
}
...
func (d *DataStore) OpenSession() {
... // read setup from environment
mongoSession, err = mgo.Dial(mongoURI)
if err != nil {}
...
}
func (d *DataStore) CloseSession() {...}
func (d *DataStore) Find (...) (results...) {
s := d.mongoSession.Copy()
defer s.Close()
// do stuff, return results
}
В main.go:
func main() {
ds := NewDataStore()
ds.OpenSession()
defer ds.CloseSession()
// Web Service Routes..
...
ws.Handle("/find/{abc}", doFindFunc)
...
}
Мой вопрос - то, что рекомендуемая практика для восстановления после сеанса, истекло , потерянное соединение (поставщик услуг mongo, который я использую, удален, поэтому я предполагаю, что это произойдет), поэтому при любом вызове конкретной веб-службы сеанс базы данных может перестать работать? Как люди справляются с этими случаями, чтобы обнаружить, что сеанс больше не действителен, и нужно установить «новый»?
Спасибо!
Я * думаю *, что для вас управляются соединения и переподключения - ['mgo' docs] (http://godoc.org/gopkg.in/mgo.v2) говорят, что он сделает« одно или несколько соединений », за сеанс. Это немного похоже на то, как ['sql.DB' специфицирует пул соединений в' database/sql'] (http://golang.org/pkg/database/sql/#DB). не отвечая, потому что это только сильное подозрение, а не то, во что я полностью уверен. – twotwotwo