//redis 发布订阅
func main() {
err := initRedis()
if err != nil {
logs.Debug(fmt.Sprintf("connect redis err: %s", err.Error()))
os.Exit(1)
}
//监听test频道
pubSub,err:=rds.Sub("test")
if err!=nil {
fmt.Println(err)
}
//订阅
go func() {
var receipt interface{}
var err error
for {
receipt,err=pubSub.Receive()
if err !=nil {
fmt.Println(err)
}
//fmt.Println(reflect.ValueOf(receipt).String())
if receipt !="" {
switch v := receipt.(type) {
case *redis.Message://单个订阅subscribe
fmt.Printf("%s: message: %s\n", v.Channel,v.Payload)
case error:
return
}
}
}
}()
//向test频道发布消息
for i:=0;i<10 ;i++ {
_,err:=rds.Pub("test",strconv.Itoa(i))
if err !=nil {
fmt.Println(err)
}
time.Sleep(time.Second)
}
//http.ListenAndServe(":80",nil)
}
注意使用的redis的包如果不同的话,订阅收到的消息类型可能会有所不同,可以先用反射
reflect.ValueOf(receipt).String() 获取类型在进行断言