Как предотвратить автоматическое создание exchange в RabbitMQ при использовании consumer в masstransit?

#c# #.net-core #rabbitmq #masstransit

#c# #.net-ядро #rabbitmq #masstransit

Вопрос:

Я создаю receiveEndpoint с помощью masstransit и использую его следующим образом :

 var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    cfg.ReceiveEndpoint("my-endpoint", x =>
    {
        x.Consumer<MyEndpointConsumer>();
    });
}
 

Здесь мой класс MyEndpointConsumer :

 class MyEndpointConsumer : IConsumer<IMyEndpoint>
{
    public Task Consume(ConsumeContext<IMyEndpoint> context)
    {
        Console.WriteLine("MyEndpointConsumer");
    }
}
 

MassTransit создает :

  • очередь: «моя конечная точка»
  • первый обмен: «моя конечная точка»
  • второй обмен: «IMyEndpoint»

Я хочу отключить создание этого второго exchange. Документация MassTransit объясняет, что топология потребителя основана на «публикации топологии» (документация MassTransit) :

Топология потребления использует топологию публикации для обеспечения согласованного именования обменов / тем для типов сообщений.

Поэтому я пытаюсь изменить топологию публикации в моем интерфейсе «IMyEndpoint» :

 cfg.Publish<IMyEndpoint>(x =>
{
    x.Exclude = true;
});
 

но ничего не меняется, я пытаюсь :

 [ExcludeFromTopology]
publiv interface IMyEndpoint
 

тоже ничего не изменилось.

Есть какие-либо идеи по созданию этого exchange?

Спасибо за вашу помощь.

Ответ №1:

Используемый тип сообщения не может быть исключен. Можно исключить унаследованные типы, но не фактический тип используемого сообщения, поскольку это предотвратит попадание опубликованных сообщений в очередь потребителя.

Если вы хотите отключить exchange и в то же время предотвратить попадание опубликованных сообщений в очередь, установите ConfigureConsumeTopology = false в конфигураторе получения конечной точки.