golang Redisのパブリケーションとサブスクリプションdemo
1033 ワード
//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
", 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()