有没有办法让 MassTransit 放弃错误消息而不是转发到错误队列/死信

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

我正在尝试在基于 Azure 服务总线的非常可靠的基于消息的系统中使用 MassTransit。 当消息处理发生错误时,MassTransit 会将消息移至错误/故障队列。 我知道我可以对消费者的策略进行重试,而且我确实这么做了。我想要配置的是 MassTransit 尝试处理消息,如果发生错误,则放弃消息,以便将其返回到订阅的前面以供其他订阅者接收。

我正在尝试将其与自定义断路器结合使用,当发生处理错误时该断路器会立即中断。

这将增加服务总线上的交付计数,并最终可能导致死信,但我们已经有了基于非公共交通的方法来处理这个问题。

那么有没有办法禁用所有错误队列功能并放弃消息?

azureservicebus masstransit
2个回答
2
投票

您可以使用以下方式配置接收端点:

cfg.ThrowOnSkippedMessages();
cfg.RethrowFaultedMessages();

这会将错误传播回服务总线(订阅或队列),并让 MaxDeliveryCount 最终决定它是否最终进入 DLQ。


0
投票

如果您正在使用依赖项注入配置 MassTransit,如下所示:

services.AddMassTransit(x =>
    x.UsingRabbitMq((context, cfg) => // Instead of RabbitMQ, could be UsingAzureServiceBus or UsingAmazonSQS
    // ...
    cfg.ConfigureEndpoints(context);
    //...
});

那么禁用死信队列的方法是使用消费者定义,如下所示:

public class SubmitOrderConsumerDefinition :
    ConsumerDefinition<SubmitOrderConsumer>
{

    protected override void ConfigureConsumer(IReceiveEndpointConfigurator endpointConfigurator, IConsumerConfigurator<SubmitOrderConsumer> consumerConfigurator, IRegistrationContext context)
    {
        endpointConfigurator.DiscardFaultedMessages();
        endpointConfigurator.DiscardSkippedMessages();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.