发生非暂时性错误时,MassTransit 绕过重试策略

MassTransit bypass retry policy when non transient error occurs

针对非暂时性错误的短路重试策略的指导是什么。

场景。

使用附加到 RabbitMq 的 MassTransit v3。 一个简单的重试策略尝试在管道中设置 5 次。 在消息的 Consume 中,发生不可恢复的错误,而不是抛出异常并重试另外 4 次我想将此消息移至错误队列。

您可以使用:

Retry.Except<BadException>().Immediate(5);

出于某种原因,Chris 的解决方案对我不起作用。也许我是在错误的背景下打这个电话的。唯一有用的是进行两次 UseRetry 调用:

            configurator.ReceiveEndpoint(host, _config.QueueName, ec =>
            {
                ...

                // Configure retries to immediately fail on permanent consumer faults
                ec.UseRetry(r => r.None().Handle<ConsumerPermanentFaultException>());

                // Configure all other retries as incremental
                ec.UseRetry(r =>
                {
                    r.Incremental(_config.RetryCount, _config.RetryInterval, _config.RetryIntervalIncrement)
                        .Ignore<ConsumerPermanentFaultException>();
                });

                // Load consumers from the container
                ec.LoadFrom(consumerContainer);
            });