Golang Go语言中新学,求帮忙,连接 rabbitmq 心跳检测重试问题 作用: mq 客户端监听队列,获取队列消息

发布于 1周前 作者 bupafengyu 来自 Go语言

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

4 回复

断开了连接这种 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客户端监听队列并处理心跳与重试。

  1. 安装amqp库

    go get github.com/streadway/amqp
    
  2. 连接到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、创建通道、监听队列消息。重试逻辑可以通过捕获错误并在错误处理中重新尝试连接来实现。希望这能帮助你入门!

回到顶部