我在Saga有以下场景
情景1
Bus.Send<SendEmail>(message);
Data.Status = "email send requested";
如果数据库在那一刻停止了怎么办,
Scenario2
Bus.Send<SendEmail>(message1);
some logic/mappers to build up messsage2 // what if this line blows up...?
Bus.Send<SendEmail>(message2);
答案 0 :(得分:0)
在方案1中,如果加载saga数据后加载saga的数据库崩溃,作为处理触发saga的消息的一部分,则不会发送SendEmail消息并触发saga的消息会回滚。
注意,并不是调用Data.Status =“...”会失败,因为它只会更新之后保留的内存数据结构。
关于场景2,你必须更清楚:是炸弹作为处理发送的消息的一部分而被调用的逻辑,还是在Bus.Send之后在线上调用的逻辑(消息)?
<强>更新强>
由于您在场景2中描述的逻辑是由于处理其他一些消息而发生的,只要您没有关闭端点的默认事务性,那么除非您发送消息,否则不会发送消息整个过程都很成功。