登录
首页 >  Golang >  Go问答

如何在读取 RabbitMQ 队列时处理错误

来源:stackoverflow

时间:2024-03-05 10:48:27 175浏览 收藏

一分耕耘,一分收获!既然都打开这篇《如何在读取 RabbitMQ 队列时处理错误》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

我正在从 rabbitmq 队列中读取消息,如下所示:

messages, err := channel.Consume(
    queue,  // queue
    queue,  // consumer - same as queue
    false,  // auto-ack
    false,  // exclusive
    false,  // no-local
    false,  // no-wait
    nil)    // args
if err != nil {
    // handle error
}

loop:   
for {
    select {
    case cmd := <-cmdChannel:
        if cmd == cmdStop {
            break loop
        }
    case message := <-messages:
        go process(message)
    }
}

messages 读取数据可能会失败,例如网络错误,或者 rabbitmq 的通道由于错误而失效。如何检测此类错误并获取相关错误消息?


解决方案


假设您正在使用 streadway/amqp,这可能就是您正在寻找的 https://godoc.org/github.com/streadway/amqp#Channel.NotifyClose

func(*通道)NotifyClose

func (ch *Channel) NotifyClose(c chan *Error) chan *Error

NotifyClose 注册服务器发送通道时的侦听器 或 Connection.Close 形式的连接异常或 Channel.Close 方法。连接异常将广播给所有人 打开通道并且所有通道将被关闭,其中通道 异常只会广播给该频道的听众。

当频道关闭时,所提供的频道将被关闭 优雅关闭,不会发送错误。

今天关于《如何在读取 RabbitMQ 队列时处理错误》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>