如何/何时删除 RabbitMQ .net 客户端中的队列

How / When to remove queues in RabbitMQ .net Client

使用 .net rabbitmq 客户端 (https://www.rabbitmq.com/dotnet.html)。创建了一个库,其他项目可以引用总线上的 [​​=23=] 消息。

根据提供的信息 here and here,为了让每个订阅者接收所有消息,每个客户端需要为每个订阅者定义一个不同的队列,绑定到交换器。我遇到的问题是如何在 "client" 应用程序使用队列完成后删除队列(因为这会呈指数增长并且永远不会被清理)。

会在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(....);

您正在寻找 Exclusive/Autodelete 队列。根据定义,这样的队列只能由创建它的客户端访问——当客户端断开连接时,队列会立即被删除。这些对于您设置消费者订阅主题的情况很有用,并且您实际上不需要在服务器上排队消息。