NServicesBus 完全禁用特定异常的 FLR

NServicesBus disable FLR for specific exceptions completely

我正在尝试完全禁用某些特定异常的重试。

我知道在我的代码中 - 当我尝试处理消息 X 并且如果处理程序抛出 "ZZZ" 类型异常时,我确信任何次数的重试都无济于事;

我想做的是立即将该消息直接发送到错误队列,无需重试。

我该怎么做?

第一关不能重试,只能重试second level retries。我个人不会担心它(我有类似的东西,我知道某些例外情况不会被修复)。让他们进入 FLR 通常没有坏处。

我知道你已经接受了一个答案,但由于你试图绕过针对特定场景的管道内置,你可以在 try/catch 中处理消息并将消息直接发送到错误队列或让 FLR/SLR 处理它。

请注意,不是理想的场景。在大多数情况下,主动不鼓励处理消息的错误处理,而是让基础架构来管理它。

这是一个可能的实现:

    public void Handle(SomeCommand message)
    {
        try
        {
            //Do thing that might throw exception
        }
        catch (SpecificException ex)
        {
            _bus.Send(new Address("errorQueue", "machine"), message);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

编辑 我正在推动将 Marcin 的评论包含在这个答案中,这样就不会错过:

Please bear in mind that by using this approach without setting appropriate message headers you will lose the ability to return these failed messages to the source queue. Please take a look at this doco for details: http://docs.particular.net/nservicebus/messaging/headers#retries-handling-headers. – Marcin Hoppe