gpt4 book ai didi

go - 在 Go 中重新连接到 Redis 订阅的惯用方法是什么?

转载 作者:IT王子 更新时间:2023-10-29 01:14:54 27 4
gpt4 key购买 nike

我正在使用 redigo 库尝试订阅 Redis channel ,然后处理已发布的消息。我如何处理它出错的情况?这是我想出的。这是一个好方法吗?有没有更好的办法?

注意:这个问题是针对redigo的,但我认为它适用于其他需要发生重连的地方。

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
}
}
}
}

为了示例,我只是将它放在 main() 函数中。它真的会在一些 goroutine 中运行。

最佳答案

是的,使用标签和循环是重新连接的标准做法。

您唯一缺少的是关闭连接。

            psc.Close()
break ReceiveLoop

为了更具弹性,您可能需要 redis.DialTimeout,这样 Dial 调用就不会无限期地挂起。

关于go - 在 Go 中重新连接到 Redis 订阅的惯用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29987793/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com