我读到每个消息处理程序都封装在一个"环境事务"中,并且在可能的情况下,数据库访问会自动登记在该事务中。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。