0

我在佐贺有以下场景

方案 1

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

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

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

情景2

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

1 回答 1

0

在场景 1 中,如果在加载 saga 数据作为处理触发 saga 的消息的一部分后,持久化 saga 的数据库崩溃,则不会发送 SendEmail 消息,并且触发 saga 的消息将回滚.

请注意,调用 Data.Status = "..." 不会失败,因为它只是更新了一个内存中的数据结构,该结构随后被持久化。

关于场景 2,您必须更清楚:是在处理已发送消息的过程中调用的逻辑,还是在 Bus.Send(message) 之后的线路上调用的逻辑?

更新

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

于 2013-10-02T15:01:03.113 回答