El controlador RabbitMQ C # deja de recibir mensajes

¿Tiene algún indicador de cómo determinar cuándo se ha producido un problema de suscripción para que pueda volver a conectarme?

Mi servicio utiliza RabbitMQ.Client.MessagePatterns.Subscription para su suscripción. Después de algún tiempo, mi cliente deja de recibir mensajes en silencio. Sospecho problemas de red, ya que mi conexión VPN no es la más confiable.

He leído los documentos durante un tiempo en busca de una clave para averiguar cuándo esta suscripción podría romperse debido a un problema de red sin mucha suerte. He intentado verificar que la conexión y el canal aún están abiertos, pero siempre parece informar que aún está abierto.

Los mensajes que procesa funcionan bastante bien y se confirman en la cola, así que no creo que sea un problema con el "ack".

Estoy seguro de que debo estar perdiendo algo simple, pero todavía no lo he encontrado.

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);
                    }
                }
            }
        }
    }
}

ACTUALIZAR:

Simulé una falla de red ejecutando el servidor en una máquina virtual yhacer obtener una excepción (RabbitMQ.Client.Exceptions.OperationInterruptedException: la operación AMQP se interrumpió) cuando interrumpo la conexión el tiempo suficiente, por lo que quizás no sea un problema de red. Ahora no sé qué sería pero falla después de solo un par de horas de carrera.

Respuestas a la pregunta(1)

Su respuesta a la pregunta