我正在从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的通道由于错误而无效。如何检测此类错误并获取相关错误消息?
答案 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方法。连接异常将广播给所有人 打开通道,所有通道将关闭,其中通道 例外只会广播给该频道的听众。
提供的频道将在频道关闭并在 正常关闭,不会发送错误。