如何在围棋中接收Redis发布消息 [英] How to receive Redis publish message in Go
本文介绍了如何在围棋中接收Redis发布消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试在Go中使用Redis PubSub,以便能够在订阅期间传递/发布消息并检索它。
我已经能够正确设置代码的发布和订阅/PubSub部分。以下是我的代码。我希望在订阅期间检索的(字符串)消息是test message.
,但我的代码的输出给出了频道、种类和计数,并且没有显示预期的消息(test message
)。
在Go中使用Redis发布/订阅发布后如何获取想要的消息(test message
)?我觉得已经很接近了,但这里可能遗漏了一点小东西。我对雷迪斯很陌生。感谢您的帮助。
以下是我的代码:
package main
import (
"fmt"
"log"
"time"
"github.com/gomodule/redigo/redis"
)
func main() {
fmt.Println("Start redis test.")
c, err := redis.Dial("tcp", "localhost:6379")
if err != nil {
log.Println(err)
} else {
log.Println("No error during redis.Dial.")
}
// defer c.Close()
/// Publisher.
c.Do("PUBLISH", "example", "test message")
/// End here
/// Subscriber.
psc := redis.PubSubConn{Conn: c}
psc.Subscribe("example")
for {
switch v := psc.Receive().(type) {
case redis.Message:
fmt.Printf("%s: message: %s
", v.Channel, v.Data)
case redis.Subscription:
fmt.Printf("%s: %s %d
", v.Channel, v.Kind, v.Count)
case error:
fmt.Println(v)
}
}
/// End here
}
以下是我的输出:
example: subscribe 1
推荐答案
我相信您的代码没有问题;问题是您在订阅处于活动状态之前发布了一条消息。例如,尝试这样做,它会将您的发布者放入每秒发布一次消息的Goroutine中:
package main
import (
"fmt"
"log"
"time"
"github.com/gomodule/redigo/redis"
)
func main() {
fmt.Println("Start redis test.")
c, err := redis.Dial("tcp", "localhost:6379")
if err != nil {
log.Println(err)
} else {
log.Println("No error during redis.Dial.")
}
// defer c.Close()
/// Publisher.
go func() {
c, err := redis.Dial("tcp", "localhost:6379")
if err != nil {
panic(err)
}
count := 0
for {
c.Do("PUBLISH", "example",
fmt.Sprintf("test message %d", count))
count++
time.Sleep(1 * time.Second)
}
}()
/// End here
/// Subscriber.
psc := redis.PubSubConn{Conn: c}
psc.Subscribe("example")
for {
switch v := psc.Receive().(type) {
case redis.Message:
fmt.Printf("%s: message: %s
", v.Channel, v.Data)
case redis.Subscription:
fmt.Printf("%s: %s %d
", v.Channel, v.Kind, v.Count)
case error:
fmt.Println(v)
}
time.Sleep(1)
}
/// End here
}
运行此命令,您将看到您的订阅者收到一条消息
第二,生成如下输出:
Start redis test.
2021/08/18 19:01:29 No error during redis.Dial.
example: subscribe 1
example: message: test message 0
example: message: test message 1
example: message: test message 2
example: message: test message 3
example: message: test message 4
example: message: test message 5
这篇关于如何在围棋中接收Redis发布消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文