Невозможно использовать Bind и ConfigureConsumer вместе - PullRequest
0 голосов
/ 05 марта 2020

Я использую комбинацию MassTransit + RabbitMQ в Asp. Net Базовом приложении. Соответствующая часть конфигурации ниже:

public IBusControl CreateBus(IServiceProvider serviceProvider)
{
    var options = serviceProvider.GetService<IConfiguration>().GetOptions<RabbitMqOptions>("rabbitmq");

    return Bus.Factory.CreateUsingRabbitMq(cfg =>
    {
        cfg.Host($"rabbitmq://{options.Host}:{options.Port}");
        cfg.ReceiveEndpoint("ingest-products", ep =>
        {
            ep.PrefetchCount = 16;

            ep.UseMessageRetry(r => r.Interval(2, 1000));
            ep.Bind<CreateProducts>(x =>
            {
                x.RoutingKey = "marketplace";
                x.ExchangeType = ExchangeType.Direct;
                x.AutoDelete = false;
                x.Durable = true;
            });

            ep.ConfigureConsumer<CreateProductsConsumer>(serviceProvider);
        });
    });
}

Когда я запускаю приложение, я получаю следующее исключение:

ArgumentException: MassTransit.RabbitMqTransport.Topology.Entities.ExchangeEntity entity настройки не соответствуют существующей сущности

Что я здесь не так делаю? Разве я не должен настраивать потребителя с IServiceProvider после привязки обмена к конечной точке получения? Если нет, то как мне правильно его настроить (ну, я все еще хочу, чтобы материал впрыскивался в моих потребителей)?

1 Ответ

1 голос
/ 05 марта 2020

Если вы привязываете типы сообщений к конечной точке получения, которые совпадают с типами сообщений в получателе, вам необходимо отключить автоматическое c обменное связывание.

endpoint.BindMessageExchanges = false;

Это предотвратит MassTransit от попытки связать типы сообщений потребителя на конечной точке.

...