【问题标题】:How to detect error when reading from RabbitMQ queue从 RabbitMQ 队列读取时如何检测错误
【发布时间】:2019-04-25 00:54:05
【问题描述】:

我正在从 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的通道由于错误而失效。如何检测此类错误并获取相关错误信息?

【问题讨论】:

标签: go error-handling rabbitmq


【解决方案1】:

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

func (*Channel) 通知关闭

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

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

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

【讨论】:

    猜你喜欢
    • 2018-12-22
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    相关资源
    最近更新 更多