【发布时间】:2017-05-13 18:51:37
【问题描述】:
我正在尝试强制 RabbitMQ 队列在 Rabbit 服务重启后仍然存在,同时在服务重启完成后强制它们重用相同的名称。
我们正在使用我们的 DI 容器来传递消息消费者
return new List<Type>
{
typeof(Consumer1), typeof(Consumer2), typeof(Consumer3), typeof(Consumer4)
};
该集合然后通过
传递给配置t => _kernel.Get(t));
然后以这种方式注册它们
cfg.ReceiveEndpoint(host, e =>
{
foreach (var type in consumerTypes)
{
e.Consumer(type, getConsumer);
}
});
这使得队列在每次重新启动时重新创建,名称中带有 GUID。
如果我们尝试这样做:
cfg.ReceiveEndpoint(host, e =>
{
foreach (var type in consumerTypes)
{
e.Consumer(type, getConsumer);
e.Durable = true;
e.AutoDelete = false;
}
});
那么队列是持久的,但服务重启时不会创建。
我们如何为每个消费者指定一个队列名称?
【问题讨论】:
-
队列是按端点创建的。没有什么能阻止您为每个消费者拥有一个端点。你的容器是什么? MassTransit 支持几乎所有存在的容器。
-
正确。我们正在使用 Unity,我们希望创建队列,将它们命名为 server1name_MessageType1、server1name_MessageType2、server2name_MessageType1、server2name_MessageType2,并使队列不会被删除并允许它们存储消息,直到它们成为消费者
-
接收端点队列、交换和绑定永远不会被删除。我假设你明白了我的意思,看看你的答案。
-
实际上队列正在被删除
标签: c# rabbitmq servicebus masstransit