O driver RabbitMQ C # para de receber mensagens

Você tem alguma indicação sobre como determinar quando ocorreu um problema de assinatura para que eu possa se reconectar?

Meu serviço usa RabbitMQ.Client.MessagePatterns.Subscription para sua assinatura. Depois de algum tempo, meu cliente pára silenciosamente de receber mensagens. Eu suspeito de problemas de rede, já que minha conexão VPN não é a mais confiável.

Eu li os documentos por algum tempo procurando uma chave para descobrir quando esta assinatura pode ser quebrada devido a um problema de rede sem muita sorte. Eu tentei verificar se a conexão e o canal ainda estão abertos, mas parece sempre informar que ainda está aberto.

As mensagens que ele processa funcionam muito bem e são reconhecidas de volta à fila, então não acho que seja um problema com o "ack".

Tenho certeza que devo estar perdendo algo simples, mas ainda não o encontrei.

public void Run(string brokerUri, Action<byte[]> handler)
{
    log.Debug("Connecting to broker: {0}".Fill(brokerUri));
    ConnectionFactory factory = new ConnectionFactory { Uri = brokerUri };

    using (IConnection connection = factory.CreateConnection())
    {
        using (IModel channel = connection.CreateModel())
        {
            channel.QueueDeclare(queueName, true, false, false, null);

            using (Subscription subscription = new Subscription(channel, queueName, false))
            {
                while (!Cancelled)
                {
                    BasicDeliverEventArgs args;

                    if (!channel.IsOpen)
                    {
                        log.Error("The channel is no longer open, but we are still trying to process messages.");
                        throw new InvalidOperationException("Channel is closed.");
                    }
                    else if (!connection.IsOpen)
                    {
                        log.Error("The connection is no longer open, but we are still trying to process message.");
                        throw new InvalidOperationException("Connection is closed.");
                    }

                    bool gotMessage = subscription.Next(250, out args);

                    if (gotMessage)
                    {
                        log.Debug("Received message");
                        try
                        {
                            handler(args.Body);
                        }
                        catch (Exception e)
                        {
                            log.Debug("Exception caught while processing message. Will be bubbled up.", e);
                            throw;
                        }

                        log.Debug("Acknowledging message completion");
                        subscription.Ack(args);
                    }
                }
            }
        }
    }
}

ATUALIZAR:

Eu simulei uma falha de rede executando o servidor em uma máquina virtual eFaz obter uma exceção (RabbitMQ.Client.Exceptions.OperationInterruptedException: A operação AMQP foi interrompida) quando interromper a conexão por tempo suficiente, talvez não seja um problema de rede. Agora eu não sei o que seria, mas ele falha depois de apenas algumas horas de corrida.

questionAnswers(1)

yourAnswerToTheQuestion