使用DI时,MassTransit和RabbitMQ使队列重启

时间:2017-05-13 18:51:37

标签: c# rabbitmq servicebus masstransit

我正在尝试强制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;
    }
});

然后队列是持久的,但是在服务重启时不会创建。

我们如何为每个消费者指定队列名称?

1 个答案:

答案 0 :(得分:0)

解决了这个问题:

.table>tbody>tr>td, .table>tbody>tr>th,
.table>tfoot>tr>td, .table>tfoot>tr>th,
.table>thead>tr>td, .table>thead>tr>th
{
  border: 0
}