NServiceBus Send()与SendLocal()和异常

NServiceBus Send()与SendLocal()和异常,nservicebus,Nservicebus,我们正在通过NServiceBus实现一个调用其他服务的传奇。我不太清楚NServiceBus如何处理传奇中的异常 在saga中,我们有一个处理程序,该处理程序调用一个外部服务,只有在原始消息处理程序成功完成后才应该调用该服务。可以这样做吗: public void Handle(IFooMessage message) { var message = Bus.CreateInstance<ExternalService.IBarMessage>(); Bus.Se

我们正在通过NServiceBus实现一个调用其他服务的传奇。我不太清楚NServiceBus如何处理传奇中的异常

在saga中,我们有一个处理程序,该处理程序调用一个外部服务,只有在原始消息处理程序成功完成后才应该调用该服务。可以这样做吗:

public void Handle(IFooMessage message) 
{
    var message = Bus.CreateInstance<ExternalService.IBarMessage>();
    Bus.Send(message);

    // something bad happens here, exception is thrown
}
公共无效句柄(IFooMessage)
{
var message=Bus.CreateInstance();
总线发送(消息);
//这里发生了一些不好的事情,抛出异常
}
或者消息会多次发送到ExternalService?有人建议将其改为:

// handler in the saga
public void Handle(IFooMessage message) 
{
    // Do something
    var message = Bus.CreateInstance<ISendBarMessage>();
    Bus.SendLocal(message);

    // something bad happens, exception is thrown
}

// a service-level handler
public void Handle(ISendBarMessage message) 
{
    var message = Bus.CreateInstance<ExternalService.IBarMessage>();
    Bus.Send(message);
}
//传奇中的处理程序
公共无效句柄(IFooMessage)
{
//做点什么
var message=Bus.CreateInstance();
总线发送本地(消息);
//发生了一些不好的情况,抛出异常
}
//服务级别处理程序
公共无效句柄(ISendBarMessage消息)
{
var message=Bus.CreateInstance();
总线发送(消息);
}
我做了一个实验,从我所能看出第一种方法似乎很好,但我找不到任何文件,除了上面说:

当异常冒泡进入NServiceBus基础结构时,它回滚事务端点上的事务,导致消息返回队列,用户代码试图发送或发布的任何消息也被撤消


如果您能帮助您澄清这一点,我们将不胜感激。

只要您正在处理您的传奇故事中的消息,而不进行任何web服务调用,那么您就安全了—无需执行SendLocal