Sterownik RabbitMQ C # przestaje odbierać wiadomości

Czy masz jakieś wskazówki, jak określić, kiedy wystąpił problem z subskrypcją, aby móc się ponownie połączyć?

Moja usługa korzysta z RabbitMQ.Client.MessagePatterns.Subskrypcja na jej subskrypcję. Po pewnym czasie mój klient po cichu przestaje odbierać wiadomości. Podejrzewam, że problemy z siecią, ponieważ nasze połączenie VPN nie jest najbardziej niezawodne.

Przeczytałem dokumenty przez chwilę szukając klucza, aby dowiedzieć się, kiedy ta subskrypcja może zostać zerwana z powodu problemu z siecią bez większego szczęścia. Próbowałem sprawdzić, czy połączenie i kanał są nadal otwarte, ale zawsze wydaje się, że nadal jest otwarty.

Przetwarzane przez niego komunikaty działają całkiem dobrze i są potwierdzane z powrotem w kolejce, więc nie wydaje mi się, aby był to problem z „ack”.

Jestem pewien, że po prostu brakuje mi czegoś prostego, ale jeszcze go nie znalazłem.

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

AKTUALIZACJA:

Symulowałem awarię sieci, uruchamiając serwer na maszynie wirtualnej i jarobić uzyskaj wyjątek (RabbitMQ.Client.Exceptions.OperationInterruptedException: Operacja AMQP została przerwana), gdy przerwam połączenie na wystarczająco długo, więc może nie jest to problem z siecią. Teraz nie wiem, co by to było, ale zawodzi po zaledwie kilku godzinach pracy.

questionAnswers(1)

yourAnswerToTheQuestion