C# EasyNetQ. Восстановление работы после рестарта Docker с RabbitMq

начал разбираться с библиотекой для работы с очередью сообщений RabbitMq, которая называется EasyNetQ.

Особенность EasyNetQ в том, что очередь создается Подписчиком при активации подписки. Если коннект к RabbitMq теряется в процессе работы, то EasyNetQ мониторит доступность коннекта и при появлении связи восстановит его, это работает хорошо. Но если перезапустить Docker контейнер с RabbitMq, то подписчик сам восстановит коннект, но созданной им очереди уже не будет в новом экземпляре контейнера. Никаких событий у подписчика, доступности очереди или обмена я не нашел.

Т.е. мы просто попадаем в ситуацию когда все работало, потом рестарта нули контейнер, Подписчик спокойно весит в ожидании данных с очереди, а Издатель отправляет сообщения с ошибкой, но повлиять на это он никак не может (очередь создает не он).

Как отследить наличие очереди в подписчике?

Скорее всего нужно пробросить папку с очередью из Docker, что-бы очередь всегда была сохранена. Просто сама ситуация что очередь не доступна, но про это известно только издателю и он на это никак повлиять не может.

Приведу пример подписчика:

    static void Main(string[] args)
    {
        var connectionStr = "host=localhost;username=guest;password=guest";
        using var bus = RabbitHutch.CreateBus(connectionStr);
        try
        {
            var subscriptionResult=bus.PubSub.Subscribe<MessageWrapper>(String.Empty, HandleTextMessage); //subscriptionId пустое, имя очереди задается только атрибатом над MessageWrapper
            Console.WriteLine("Listening for messages. Hit <return> to quit.");
            Console.ReadLine();
        }
        catch (BrokerUnreachableException e)  //Ошибка подключения к Брокеру
        {
            Console.WriteLine(e);
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
    }
    
    static void HandleTextMessage(MessageWrapper messageWrapper) 
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("Got message: {0}", messageWrapper);
        Console.ResetColor();
    }
    
    
    [Queue("TestMessagesQueue", ExchangeName = "MyTestExchange")] //Задает имя очереди и имя обмена
    public class MessageWrapper
    {
        public string Header { get; set; }
        public override string ToString() => $"{Header}";
    }

Ответы (0 шт):