我正在使用 redigo 庫嘗試訂閱 Redis 頻道,然后處理已發(fā)布的消息。我如何處理它出錯(cuò)的情況?這是我想出的。這是一個(gè)很好的方法嗎?有沒有更好的辦法?注意:這個(gè)問題是針對(duì) redigo 的,但我認(rèn)為它適用于其他需要重新連接的地方。package mainimport ( "fmt" "time" "github.com/garyburd/redigo/redis")func main() { for { fmt.Println("connecting...") c, err := redis.Dial("tcp", "localhost:6379") if err != nil { fmt.Println("error connecting to redis") time.Sleep(5 * time.Second) continue } psc := redis.PubSubConn{c} psc.Subscribe("example") ReceiveLoop: for { switch v := psc.Receive().(type) { case redis.Message: fmt.Printf("%s: message: %s\n", v.Channel, v.Data) case redis.Subscription: fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count) case error: fmt.Println("there was an error") fmt.Println(v) time.Sleep(5 * time.Second) break ReceiveLoop } } }}我只是把它放在 main() 函數(shù)中作為例子。它真的會(huì)在某個(gè) goroutine 中運(yùn)行。
1 回答

絕地?zé)o雙
TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
是的,使用標(biāo)簽和循環(huán)是重新連接的標(biāo)準(zhǔn)做法。
您唯一缺少的是關(guān)閉連接。
psc.Close() break ReceiveLoop
為了增加一點(diǎn)彈性,您可能希望redis.DialTimeout
撥號(hào)呼叫不能無限期掛起。
- 1 回答
- 0 關(guān)注
- 329 瀏覽
添加回答
舉報(bào)
0/150
提交
取消