mongo를 백엔드 데이터 저장소로 사용하는 REST 웹 서비스를 작성했습니다. 나는이 단계 (배포 전), 모범 사례가 무엇인지, 궁극적으로 영원히 (ish) 실행되는 서비스를 생각해 보았습니다. main.go에서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
}
: - 어떤 시간이 초과되었습니다 세션 복구를 위해 권장되는 연습의
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'에 연결 풀을 나타내는 spec'd (http://golang.org/pkg/database/sql/#DB)와 약간 비슷합니다. 이것은 단지 강한 의혹 일 뿐이므로 나는 답을하지 않는다. – twotwotwo