Драйвер RabbitMQ C # прекращает прием сообщений

У вас есть указания, как определить, когда возникла проблема с подпиской, чтобы я мог подключиться?

Мой сервис использует RabbitMQ.Client.MessagePatterns.Subscription для него 'подписка. Через некоторое время мой клиент молча перестает получать сообщения. Я подозреваю проблемы с сетью, так как наше VPN-соединение не самое надежное.

Мы некоторое время читали документы и искали ключ, чтобы узнать, когда эта подписка может быть нарушена из-за проблем с сетью без особой удачи. Я'мы пытались проверить, что соединение и канал все еще открыты, но всегда кажется, что он все еще открыт.

Сообщения, которые он обрабатывает, работают довольно хорошо и возвращаются в очередь, поэтому я нене думаю, что этопроблема с "извед».I»

Я уверен, что я просто упускаю что-то простое, но у меня нетпока не нашел его.

public void Run(string brokerUri, Action 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);
                    }
                }
            }
        }
    }
}

ОБНОВИТЬ:

Я смоделировал сбой сети, запустив сервер на виртуальной машине, и яделать получить исключение (RabbitMQ.Client.Exceptions.OperationInterruptedException: операция AMQP была прервана), когда я разрываю соединение достаточно долго, так что, возможно, это не такпроблема с сетью. Теперь я неЯ не знаю, что это будет, но не получится через пару часов работы.

Ответы на вопрос(1)

Ваш ответ на вопрос