gpt4 book ai didi

NServiceBus Send() 与 SendLocal() 和异常

转载 作者:行者123 更新时间:2023-12-02 00:14:51 26 4
gpt4 key购买 nike

我们正在实现一个使用 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/ 以外的任何文档。其中说:

When an exception bubbles through to the NServiceBus infrastructure, it rolls back the transaction on a transactional endpoint, causing the message to be returned to the queue, and any messages that user code tried to send or publish to be undone as well.

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

最佳答案

只要您从您的 saga 中执行消息传递并且不执行任何网络服务调用,那么您就是安全的 - 无需执行 SendLocal。

关于NServiceBus Send() 与 SendLocal() 和异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13678614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com