2015-05-01 9 views
7

Redis kanalına abone olmayı denemek ve yayınlanmış bir iletiyi işlemek için redigo kitaplığını kullanıyorum. Hataların giderildiği durumu nasıl ele alırım? İşte neyle geldiğini. Bunu yapmanın iyi bir yolu var mı? Daha iyi bir yolu var mı?Git'te Redis aboneliğine yeniden bağlanmak için ne tür bir deyim var?

Not: Bu soru redigo'ya özgüdür, ancak yeniden bağlantıların gerçekleşmesi gereken başka yerler için geçerli olduğunu düşünüyorum.

package main 

import (
    "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 
      } 
     } 
    } 
} 

Örnek için bunu main() işlevine koydum. Bazı goroutine gerçekten koşardı.

cevap

5

Evet, bir etiket ve döngü kullanmak, yeniden bağlanmak için standart bir uygulamadır.

Eksik olan tek şey bağlantıyı kapatmaktır. Bir Çevirme çağrı süresiz asmak böylece biraz daha esneklik için

  psc.Close() 
      break ReceiveLoop 

, sen redis.DialTimeout isteyebilirsiniz.

İlgili konular