Через некоторое время перестают доставляться сообщения через RabbitMQ подписчику
У нас есть очерез сообщений RabbitMQ, в которой создаются очереди для подписчиков, к которым они подписываются и обмениваются сообщениями. После создания канала сообщения доставляются как нужно, но через некоторое время (2-3 суток) они перестают доходить до подписчика. Вопрос - как можно отловить причину такого поведения? я создаю канал таким способом:
chnl, errCreateChannel := structs.RabbitMQ.Channel()
if errCreateChannel != nil {
log.Printf("Ошибка создания канала в RabbitMQ: %s", errCreateChannel.Error())
return
}
errNotifyClose := chnl.NotifyClose(make(chan *amqp.Error, 10))
go func() {
for errClose := range errNotifyClose {
if errClose != nil {
sentry.CaptureException(errClose)
}
}
}()
defer chnl.Close()
_, errQueueDeclare := chnl.QueueDeclare(robotUID+"-Server", false, true, false, false, nil)
if errQueueDeclare != nil {
log.Printf("Ошибка соединения с очередью %s в RabbitMQ: %s", robotUID+"-Server", errQueueDeclare.Error())
return
}
msgs, errConsume := chnl.Consume(robotUID+"-Server", "", true, false, false, false, nil)
if errConsume != nil {
log.Printf("Ошибка получений сообщений с очереди %s в RabbitMQ: %s", robotUID+"-Server", errConsume.Error())
return
}
Затем подписчик соединяется с каналом таким способом:
_connection = factory.CreateConnection();
_channel = _connection.CreateModel();
_channel.QueueDeclare(_cmd.Rmq.Queue, false, false, true, null);
var consumer = new EventingBasicConsumer(_channel);
consumer.Received += (_, ea) => { HandleMessage(ea); };
_channel.BasicConsume(_cmd.Rmq.Queue, true, consumer);
Я добавил NotifyClose для получения сообщений о закрытии канала сегодня, и попытаюсь отловить если в канале происходят закрытия из-за ошибки. Какие еще есть варианты для отслеживания этого поведения?
P.S после перезапуска Go приложения, где создаются очереди, сообщения начинают доходить до подписчиков, поэтому есть подозрение что теряется связь из приложения с RabbitMQ сервисом.