【问题标题】:Can't use Bind and ConfigureConsumer together不能同时使用 Bind 和 ConfigureConsumer
【发布时间】:2020-11-20 02:11:27
【问题描述】:

我在 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);
        });
    });
}

当我运行应用程序时,我得到了这个异常:

参数异常: MassTransit.RabbitMqTransport.Topology.Entities.ExchangeEntity 实体 设置与现有实体不匹配

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

【问题讨论】:

    标签: c# masstransit


    【解决方案1】:

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

    // for MassTransit versions v6 and earlier
    endpoint.BindMessageExchanges = false;
    
    // for MassTransit versions 7 and onward
    endpoint.ConfigureConsumeTopology = false;
    

    这将阻止 MassTransit 尝试在端点上绑定消费者的消息类型。

    【讨论】:

      【解决方案2】:

      我一天中的大部分时间都在寻找这个。在 v7+ 中,它被重命名为:

      endpoint.ConfigureConsumeTopology = false;

      【讨论】:

        【解决方案3】:

        您需要禁用自动消息交换绑定才能使您的自定义消息绑定起作用。

        endpoint.ConfigureConsumeTopology = false;
        

        通过关注 GitHub 上的source code,我们可以看到 ConfigureConsumeTopology 方法已经淘汰了之前的方法,例如 BindMessageTopics、BindMessageExchanges、SubscribeMessageTopics。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-09-22
          • 2018-07-13
          • 2012-07-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多