不能同时使用Bind和ConfigureConsumer

问题描述 投票:0回答:1

我在Asp.Net Core应用中使用MassTransit + RabbitMQ组合。相关配置部分如下:

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实体设置与现有实体不匹配]

我在这里做错了什么?将交换绑定到接收端点后,是否不应该使用IServiceProvider配置使用者?如果没有,那么如何正确配置它(嗯,我仍然希望将东西注入到我的消费者中)?

c# masstransit
1个回答
1
投票

如果将消息类型绑定到与使用者中的消息类型相同的接收终结点,则需要禁用自动交换绑定。

endpoint.BindMessageExchanges = false;

这将防止MassTransit尝试在端点上绑定使用者的消息类型。

© www.soinside.com 2019 - 2024. All rights reserved.