在 MassTransit 中使用 ConfigureEndpoints 方法时如何丢弃错误消息?
How to discard faulted messages when using the ConfigureEndpoints method in MassTransit?
This article 提供了一个示例,说明如何在手动配置端点时执行此操作。
就像这样:
cfg.ReceiveEndpoint("input-queue", ec =>
{
ec.DiscardFaultedMessages();
});
但我有很多消费者,我不想手动配置每个消费者,所以我使用方法 AddConsumers
和 ConfigureEndpoints
。
像这样:
services.AddMassTransit(cfg =>
{
cfg.AddConsumers(Assembly.GetExecutingAssembly());
cfg.AddBus(sp => Bus.Factory.CreateUsingRabbitMq(x => x.ConfigureEndpoints(sp)));
});
如果我另外调用 ReceiveEndPoint
方法(在调用 ConfigureEndpoints
之前或之后),将抛出异常 "A receive endpoint with the same key was already added"。
有没有办法在使用 ConfigureEndpoints 方法时配置特定端点?
使用 ConfigureEndpoints
时,会自动在接收端点上配置消费者、传奇和活动。要为特定消费者配置接收端点,请创建 consumer definition。如果为消费者扫描程序集,也会发现匹配的消费者定义。
public class SubmitOrderConsumerDefinition :
ConsumerDefinition<SubmitOrderConsumer>
{
protected override void ConfigureConsumer(IReceiveEndpointConfigurator endpointConfigurator,
IConsumerConfigurator<SubmitOrderConsumer> consumerConfigurator)
{
endpointConfigurator.DiscardFaultedMessage();
}
}
This article 提供了一个示例,说明如何在手动配置端点时执行此操作。
就像这样:
cfg.ReceiveEndpoint("input-queue", ec =>
{
ec.DiscardFaultedMessages();
});
但我有很多消费者,我不想手动配置每个消费者,所以我使用方法 AddConsumers
和 ConfigureEndpoints
。
像这样:
services.AddMassTransit(cfg =>
{
cfg.AddConsumers(Assembly.GetExecutingAssembly());
cfg.AddBus(sp => Bus.Factory.CreateUsingRabbitMq(x => x.ConfigureEndpoints(sp)));
});
如果我另外调用 ReceiveEndPoint
方法(在调用 ConfigureEndpoints
之前或之后),将抛出异常 "A receive endpoint with the same key was already added"。
有没有办法在使用 ConfigureEndpoints 方法时配置特定端点?
使用 ConfigureEndpoints
时,会自动在接收端点上配置消费者、传奇和活动。要为特定消费者配置接收端点,请创建 consumer definition。如果为消费者扫描程序集,也会发现匹配的消费者定义。
public class SubmitOrderConsumerDefinition :
ConsumerDefinition<SubmitOrderConsumer>
{
protected override void ConfigureConsumer(IReceiveEndpointConfigurator endpointConfigurator,
IConsumerConfigurator<SubmitOrderConsumer> consumerConfigurator)
{
endpointConfigurator.DiscardFaultedMessage();
}
}