Работа с клиентом .net rabbitmq (https://www.rabbitmq.com/dotnet.html). Создана библиотека, на которую другие проекты могут ссылаться для подписки / отмены подписки / публикации сообщений на шине.
На основе предоставленной информации здесь и здесь , чтобы каждый подписчик получал все сообщения, каждый клиент должен определить отдельную очередь для каждого подписчика, привязанную к обмену. Проблема, с которой я сталкиваюсь, заключается в том, как удалять очереди после"клиентское" приложение выполняется с использованием очереди (поскольку это будет расти в геометрической прогрессии и никогда не будет очищено).
Будет ли это в методе Dispose? Какой будет наилучший подход?
public interface IEventBus
{
void Publish(DomainEvent @event);
void Subscribe<TH, T>()
where TH : IEventHandler<T> where T : DomainEvent;
void Unsubscribe<TH, T>()
where TH : IEventHandler<T> where T : DomainEvent;
}
public class EventBus : IEventBus, IDisposable
{
....//implementation
// dispose connection/channel etc
Затем в клиентском проекте я ссылаюсь на свою сборку и использую шину следующим образом:
var bus = serviceProvider.GetService<IEventBus>();
bus.Subscribe<CancelEventHandler, CancelEvent>();
...
bus.Publish(....);