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