Как обнаружить ошибку при чтении из очереди RabbitMQ - PullRequest
2 голосов
/ 24 апреля 2019

Я читаю сообщения из очереди 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 Ответ

1 голос
/ 24 апреля 2019

Предполагая, что вы используете 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.Исключения подключения будут транслироваться на все открытые каналы, и все каналы будут закрыты, а исключения канала будут транслироваться только для слушателей этого канала.

Предоставленный канал будет закрыт при закрытии канала и при корректном закрытии ошибки не будут отправлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...