gpt4 book ai didi

go - MGO 和长期运行的 Web 服务 - 恢复

转载 作者:IT王子 更新时间:2023-10-29 02:05:39 27 4
gpt4 key购买 nike

我编写了一个使用 mongo 作为后端数据存储的 REST 网络服务。我想知道在这个阶段(部署之前),最佳实践是什么,考虑到一个基本上永远运行(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)
...
}

我的问题是 - 从超时、断开连接的 session 中恢复的推荐做法是什么(我使用的 mongo 服务提供商是远程的,所以我假设这会发生),所以在任何特定的网络服务调用上,数据库 session 可能不再有效?人们如何处理这些情况以检测 session 不再有效并应建立"new" session ?

谢谢!

最佳答案

您可能想要为每个传入的 HTTP 请求执行 session .Copy()(延迟 .Close()),从新 session 再次复制如果需要的话,在你的处理程序中..

连接和重新连接由 mgo 管理,您可以在向 Web 服务发出 HTTP 请求时停止并重新启动 MongoDB 以查看其影响。

如果在处理 HTTP 请求时出现数据库连接问题,数据库操作最终会超时(可以使用 DialWithTimeout 而不是常规的 Dial 配置超时,所以在这种情况下,您可以使用 5xx HTTP 错误代码进行响应。

关于go - MGO 和长期运行的 Web 服务 - 恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27582272/

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