Вот образец, который не всегда работает:
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?