NServiceBus 4.03,Bus.Send后跟一个错误条件

时间:2013-10-02 11:40:08

标签: error-handling nservicebus4

我在Saga有以下场景

情景1

Bus.Send<SendEmail>(message);
Data.Status = "email send requested";

如果数据库在那一刻停止了怎么办,

  • 邮件会被发送吗?
  • 如果是,那么重试(FLR / SLR)会触发哪个会再次发送消息?

Scenario2

Bus.Send<SendEmail>(message1); 
some logic/mappers to build up messsage2 // what if this line blows up...?
Bus.Send<SendEmail>(message2);
  • 邮件会被发送吗?

1 个答案:

答案 0 :(得分:0)

在方案1中,如果加载saga数据后加载saga的数据库崩溃,作为处理触发saga的消息的一部分,则不会发送SendEmail消息并触发saga的消息会回滚。

注意,并不是调用Data.Status =“...”会失败,因为它只会更新之后保留的内存数据结构。

关于场景2,你必须更清楚:是炸弹作为处理发送的消息的一部分而被调用的逻辑,还是在Bus.Send之后在线上调用的逻辑(消息)?

<强>更新

由于您在场景2中描述的逻辑是由于处理其他一些消息而发生的,只要您没有关闭端点的默认事务性,那么除非您发送消息,否则不会发送消息整个过程都很成功。