不能同时使用 Bind 和 ConfigureConsumer
Can't use Bind and ConfigureConsumer together
我在 Asp.Net 核心应用程序中使用 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: The
MassTransit.RabbitMqTransport.Topology.Entities.ExchangeEntity entity
settings did not match the existing entity
我在这里做错了什么?在将交换绑定到接收端点后,我不应该使用 IServiceProvider
配置消费者吗?如果没有,那么我该如何正确配置它(好吧,我仍然希望将东西注入我的消费者)?
如果您将消息类型绑定到与消费者中的消息类型相同的接收端点,则需要禁用自动交换绑定。
// for MassTransit versions v6 and earlier
endpoint.BindMessageExchanges = false;
// for MassTransit versions 7 and onward
endpoint.ConfigureConsumeTopology = false;
这将阻止 MassTransit 尝试在端点上绑定消费者的消息类型。
我花了一天的大部分时间来寻找这个。在 v7+ 中,它被重命名为:
endpoint.ConfigureConsumeTopology = false;
您需要禁用自动消息交换绑定才能使您的自定义消息绑定生效。
endpoint.ConfigureConsumeTopology = false;
通过GitHub上的source code我们可以看到ConfigureConsumeTopology方法废弃了之前的方法,例如BindMessageTopics,BindMessageExchanges 、订阅消息主题。
我在 Asp.Net 核心应用程序中使用 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: The MassTransit.RabbitMqTransport.Topology.Entities.ExchangeEntity entity settings did not match the existing entity
我在这里做错了什么?在将交换绑定到接收端点后,我不应该使用 IServiceProvider
配置消费者吗?如果没有,那么我该如何正确配置它(好吧,我仍然希望将东西注入我的消费者)?
如果您将消息类型绑定到与消费者中的消息类型相同的接收端点,则需要禁用自动交换绑定。
// for MassTransit versions v6 and earlier
endpoint.BindMessageExchanges = false;
// for MassTransit versions 7 and onward
endpoint.ConfigureConsumeTopology = false;
这将阻止 MassTransit 尝试在端点上绑定消费者的消息类型。
我花了一天的大部分时间来寻找这个。在 v7+ 中,它被重命名为:
endpoint.ConfigureConsumeTopology = false;
您需要禁用自动消息交换绑定才能使您的自定义消息绑定生效。
endpoint.ConfigureConsumeTopology = false;
通过GitHub上的source code我们可以看到ConfigureConsumeTopology方法废弃了之前的方法,例如BindMessageTopics,BindMessageExchanges 、订阅消息主题。