Golang Go语言中新学,求帮忙,连接 rabbitmq 心跳检测重试问题 作用: mq 客户端监听队列,获取队列消息
Golang Go语言中新学,求帮忙,连接 rabbitmq 心跳检测重试问题
作用: mq 客户端监听队列,获取队列消息
现在按照晚上教程写了个代码,功能是可以啦,但是 mq 正常情况,连接成功。但是 mq 挂了,再启动 mq, 我写的这个客户端就监听不到了,连接已经挂掉了,怎么心跳检测重新发起连接那,
求指点下,新学 go,有点懵
目前的客户端照着网上的教程写的
package main
import (
“log”
“github.com/streadway/amqp”
)
func failOnError(err error, msg string) {
if err != nil {
log.Fatalf("%s: %s", msg, err)
}
}
// 只能在安装 rabbitmq 的服务器上操作
func main() {
conn, err := amqp.Dial(“amqp://guest:guest@localhost:5672/”)
failOnError(err, “Failed to connect to RabbitMQ”)
defer conn.Close()
ch, err := conn.Channel()
failOnError(err, “Failed to open a channel”)
defer ch.Close()
q, err := ch.QueueDeclare(
“hello”, // name
false, // durable
false, // delete when unused
false, // exclusive
false, // no-wait
nil, // arguments
)
failOnError(err, “Failed to declare a queue”)
msgs, err := ch.Consume(
q.Name, // queue
“”, // consumer
true, // auto-ack
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
failOnError(err, “Failed to register a consumer”)
forever := make(chan bool)
go func() {
for d := range msgs {
log.Printf(“Received a message: %s”, d.Body)
}
}()
log.Printf(" [*] Waiting for messages. To exit press CTRL+C")
<-forever
}
更多关于Golang Go语言中新学,求帮忙,连接 rabbitmq 心跳检测重试问题 作用: mq 客户端监听队列,获取队列消息的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
断开了连接这种 err 在你的 go func 应该能取到的,不用其他库的话就自己做重试
更多关于Golang Go语言中新学,求帮忙,连接 rabbitmq 心跳检测重试问题 作用: mq 客户端监听队列,获取队列消息的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你 rabbitmq 有开 heartbeat 么
最后用这个单写了个 重试
amqp:
func (*Connection) NotifyClose
func (c *Connection) NotifyClose(receiver chan *Error) chan *Error
NotifyClose registers a listener for close events either initiated by an error accompanying a connection.close method or by a normal shutdown.
On normal shutdowns, the chan will be closed.
To reconnect after a transport or protocol error, register a listener here and re-run your setup process.
在Go语言中连接RabbitMQ并处理心跳检测与重试问题,你可以使用streadway/amqp
这个库。下面是一个简要的步骤和代码示例,帮助你实现MQ客户端监听队列并处理心跳与重试。
-
安装amqp库:
go get github.com/streadway/amqp
-
连接到RabbitMQ并设置心跳:
package main import ( "fmt" "log" "time" "github.com/streadway/amqp" ) func main() { conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") if err != nil { log.Fatal(err) } defer conn.Close() // 设置心跳,单位秒 err = conn.NotifyClose(make(chan *amqp.Error, 1)) if err != nil { log.Fatal(err) } conn.SetHeartbeat(10 * time.Second, 10 * time.Second) // 后续步骤:通道创建、队列声明、监听等 ch, err := conn.Channel() if err != nil { log.Fatal(err) } defer ch.Close() msgs, err := ch.Consume("your_queue", "", true, false, false, false, nil) if err != nil { log.Fatal(err) } forever := make(chan bool) go func() { for d := range msgs { fmt.Println(d.Body) } }() <-forever }
这段代码设置了心跳,并展示了如何连接到RabbitMQ、创建通道、监听队列消息。重试逻辑可以通过捕获错误并在错误处理中重新尝试连接来实现。希望这能帮助你入门!