Nservicebus 如果处理程序因异常而失败,则在处理程序中发送/发布的消息会发生什么情况?
我已经读到,每个消息处理程序都包装在一个“环境事务”中,并且数据库访问会在可能的情况下自动登记在该事务中。NServiceBus是否对该事务执行其他操作?具体来说,我想知道它是否可以在异常情况下以某种方式取消处理程序发送/发布的任何消息 在下面的代码中,总线是在调用Send方法后立即发送ArchiveMessage,还是将其排队并仅在处理程序成功执行时发送Nservicebus 如果处理程序因异常而失败,则在处理程序中发送/发布的消息会发生什么情况?,nservicebus,Nservicebus,我已经读到,每个消息处理程序都包装在一个“环境事务”中,并且数据库访问会在可能的情况下自动登记在该事务中。NServiceBus是否对该事务执行其他操作?具体来说,我想知道它是否可以在异常情况下以某种方式取消处理程序发送/发布的任何消息 在下面的代码中,总线是在调用Send方法后立即发送ArchiveMessage,还是将其排队并仅在处理程序成功执行时发送 public class BadHandler { public IBus Bus { get; set; } publi
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!");
}
}
我认为在这种情况下,信息不会被发送。MyMessage将重试配置的次数,并将其移动到指定的错误队列。如果愿意,您可以更好地控制该过程,您需要创建一个自定义FaultManager。谢谢!我一直在做一些复杂的工作来避免调用Send/Publish,直到我的数据库工作提交之后,才知道NServiceBus足够智能/复杂,可以在异常发生时做正确的事情。再次感谢您的信息!