为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
红颜莎娜 2021-09-10 10:59:29
我编写了一个使用 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 服务调用中,数据库会话可能不再有效?人们如何处理这些情况以检测会话不再有效并且应该建立一个“新”会话?
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

您可能想要的是.Copy()为每个传入的 HTTP 请求(使用 defered .Close())执行会话,如果需要,请从处理程序中的新会话再次复制..

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

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


查看完整回答
反对 回复 2021-09-10

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号