Как / когда удалять очереди в RabbitMQ .net Client - PullRequest
0 голосов
/ 08 ноября 2019

Работа с клиентом .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(....);

1 Ответ

1 голос
/ 08 ноября 2019

Вы ищете очередь Эксклюзив / Автоудаление. По определению, такая очередь может быть доступна только клиенту, который ее создал, а когда клиент отключается, очередь мгновенно удаляется. Это полезно в тех случаях, когда вы настраиваете потребителя на подписку на тему, и вам не нужно помещать сообщения в очередь на сервере.

...