从RabbitMQ队列读取时如何检测错误

时间:2019-04-24 09:37:15

标签: go error-handling rabbitmq

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

1 个答案:

答案 0 :(得分:1)

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

  

func(* Channel)NotifyClose

     

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

     

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

     

提供的频道将在频道关闭并在   正常关闭,不会发送错误。