问题描述
在我的应用程序中,通过POST /用户REST webapi端点创建新的用户记录时,以下是涉及的步骤
步骤1:在Azure Active Directory(AAD)中创建条目
第2步:在第1步成功后,将有关在我们的应用程序中创建用户的电子邮件通知发送给关注用户的电子邮件ID(此功能已使用Azure存储队列和sendgrid实现)。目前step2的失败不会回滚step1
第3步:在第2步成功后,在我们的Azure cosmos数据库中创建用户文档。目前,第3步失败将无法回滚step2或step1
以上所有这三个步骤都必须视为工作单元,它们必须全部成功或全部失败,例如db transaction / rollback。应该不会出现一个步骤成功而其他步骤失败的情况,因为这最终将导致创建脏记录。
对于上述涉及3种Azure资源的3个步骤,实现全部成功或全部失败的最佳/有效方法是什么?
解决方法
我不知道有一种机制可以跨您描述的不同Azure资源执行事务。真正的事务唯一适用的地方是数据库服务,也许还有其他事务,但不能用于不同的服务。
鉴于此,您的代码将需要适当地处理故障案例和清理工作。
,即使Cosmos DB本身也仅具有非常有限的事务支持。如果您的交易涉及多个分布式服务。您将需要实施自己的交易。但是,通常不值得这样做。考虑一下定期扫描是否有任何不一致之处然后进行清理是否足够。
如果确实需要事务,则可以实现资源管理器以使用System.Transactions
中的.NET功能。有关起点,请参见here。