首页 文章

NServiceBus Send()vs SendLocal()和异常

提问于
浏览
3

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

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

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

    // something bad happens here, exception is thrown
}

或者将消息多次发送到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);
}

我发现http://docs.particular.net/nservicebus/errors/以外的任何文件说:

当异常冒泡到NServiceBus基础结构时,它会在事务 endpoints 上回滚事务,导致消息返回到队列,并且用户代码尝试发送或发布的任何消息也将被撤消 .

任何帮助澄清这一点将非常感激 .

1 回答

  • 3

    只要您从您的传奇中进行消息传递而不进行任何Web服务调用,那么您就是安全的 - 无需执行SendLocal .

相关问题