【问题标题】:NServiceBus Send() vs SendLocal() and exceptionsNServiceBus Send() vs SendLocal() 和异常
【发布时间】:2012-12-03 07:02:19
【问题描述】:

我们正在实现一个使用 NServiceBus 调用其他服务的 saga。我不太清楚 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 基础架构时,它会回滚事务端点上的事务,导致消息返回到队列,并且 用户代码尝试发送或发布的任何消息都被撤消以及

任何有助于澄清这一点的帮助将不胜感激。

【问题讨论】:

    标签: nservicebus


    【解决方案1】:

    只要您从 saga 发送消息而不进行任何 Web 服务调用,那么您就是安全的 - 无需执行 SendLocal。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多