我已经读过每个消息处理程序都包含在“环境事务”中,并且该数据库访问在可能的情况下自动登记在该事务中。 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!");
}
}
答案 0 :(得分:2)
我在这种情况下不会发送消息。将重新配置MyMessage配置的次数,并将它们移动到指定的错误队列。如果您愿意,可以更好地控制该过程,您需要创建自定义FaultManager。