我编写了一个使用 mongo 作为后端数据存储的 REST Web 服务。我想知道在这个阶段(部署之前),考虑到一个基本上永远运行的服务(ish),最佳实践是什么。
目前,我正在遵循这种模式:
// 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 服务提供商是远程的,所以我假设这会发生),所以在任何特定的 Web 服务调用中,数据库会话可能不再有效?人们如何处理这些情况以检测会话不再有效并且应该建立一个“新”会话?
HUH函数
相关分类