Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nservicebus 如果处理程序因异常而失败,则在处理程序中发送/发布的消息会发生什么情况?_Nservicebus - Fatal编程技术网

Nservicebus 如果处理程序因异常而失败,则在处理程序中发送/发布的消息会发生什么情况?

Nservicebus 如果处理程序因异常而失败,则在处理程序中发送/发布的消息会发生什么情况?,nservicebus,Nservicebus,我已经读到,每个消息处理程序都包装在一个“环境事务”中,并且数据库访问会在可能的情况下自动登记在该事务中。NServiceBus是否对该事务执行其他操作?具体来说,我想知道它是否可以在异常情况下以某种方式取消处理程序发送/发布的任何消息 在下面的代码中,总线是在调用Send方法后立即发送ArchiveMessage,还是将其排队并仅在处理程序成功执行时发送 public class BadHandler { public IBus Bus { get; set; } publi

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

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

谢谢!我一直在做一些复杂的工作来避免调用Send/Publish,直到我的数据库工作提交之后,才知道NServiceBus足够智能/复杂,可以在异常发生时做正确的事情。再次感谢您的信息!