在处理程序中发送/发布的消息会出现异常失败的情况?

时间:2013-11-20 17:02:55

标签: nservicebus

我已经读过每个消息处理程序都包含在“环境事务”中,并且该数据库访问在可能的情况下自动登记在该事务中。 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!");
    }
}

1 个答案:

答案 0 :(得分:2)

我在这种情况下不会发送消息。将重新配置MyMessage配置的次数,并将它们移动到指定的错误队列。如果您愿意,可以更好地控制该过程,您需要创建自定义FaultManager。