在处理程序中发送/发布的消息出现异常而失败时会发生什么情况



我读到每个消息处理程序都封装在一个"环境事务"中,并且在可能的情况下,数据库访问会自动登记在该事务中。NServiceBus是否对该事务执行其他操作?具体来说,我想知道它是否可以以某种方式取消处理程序在异常情况下发送/发布的任何消息。

在下面的代码中,总线是在调用Send方法后立即发送ArchiveMessage,还是将其排队并仅在处理程序成功执行时发送?

public class BadHandler
{
    public IBus Bus { get; set; }
    public void Handle(MyMessage msg)
    {
        Bus.Send(new ArchiveMessage(msg.MessageId)); //does this message send?
        throw new Exception("Something terrible happened, maybe my database connection failed!");
    }
}

I在这种情况下,不会发送消息。MyMessage将被重试配置的次数,并将它们移动到指定的错误队列中。如果你愿意,你可以对这个过程有更大的控制权,你需要创建一个自定义的FaultManager。

最新更新