Информация об изменениях

Сообщение Клиент для RabbitMQ - есть ли норм. реализация? от 01.07.2022 7:57

Изменено 01.07.2022 7:58 Shmj

Клиент для RabbitMQ - есть ли норм. реализация?
Вот образец, который не всегда работает: https://github.com/dotnet-architecture/eShopOnContainers/blob/dev/src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs

Тут для всех случаев всего одно событие RabbitMQ, т.к. иначе при пересоздании после сбоя пришлось бы заново подписываться на каждое из событий:

  Скрытый текст
channel.CallbackException += (sender, ea) =>
        {
            _logger.LogWarning(ea.Exception, "Recreating RabbitMQ consumer channel");

            _consumerChannel.Dispose();
            _consumerChannel = CreateConsumerChannel();
            StartBasicConsume();
        };


Но еще фигня в том, что в некоторых случаях CallbackException не спасет. К примеру, если подтвердить получение BasicAck с неверным ID, то модель "портится" и ее нужно пересоздать. Может быть еще от чего-то портится — хрен знает, но нужно просто пересоздавать.

Есть ли нормальный годный пример как использовать RabbitMQ из .Net Core?
Клиент для RabbitMQ - есть ли норм. реализация?
Вот образец, который не всегда работает: https://github.com/dotnet-architecture/eShopOnContainers/blob/dev/src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs

Тут для всех случаев всего одно событие RabbitMQ, т.к. иначе при пересоздании после сбоя пришлось бы заново подписываться на каждое из событий:

  Скрытый текст
channel.CallbackException += (sender, ea) =>
        {
            _logger.LogWarning(ea.Exception, "Recreating RabbitMQ consumer channel");

            _consumerChannel.Dispose();
            _consumerChannel = CreateConsumerChannel();
            StartBasicConsume();
        };


Но еще фигня в том, что в некоторых случаях CallbackException не спасет. К примеру, если подтвердить получение BasicAck с неверным ID, то модель "портится" и ее нужно пересоздать. Может быть еще от чего-то портится — хрен знает, но нужно просто пересоздавать. Старая перестает слушать события и все тут — можно даже не узнать что она спортилась, если не подписаться на ModelShutdown.

Есть ли нормальный годный пример как использовать RabbitMQ из .Net Core?