मुझे विश्वास है कि आपका कोड ठीक है; समस्या यह है कि आप अपनी सदस्यता के सक्रिय होने से पहले एक संदेश प्रकाशित कर रहे हैं। उदाहरण के लिए, यह प्रयास करें, जो आपके प्रकाशक को एक ऐसे गोरोइन में डालता है जो प्रति सेकंड एक बार एक संदेश प्रकाशित करता है:
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\n", v.Channel, v.Data)
case redis.Subscription:
fmt.Printf("%s: %s %d\n", 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