SQL Azure和Azure表存储之间的事务



在我当前的项目中,我们正在开发一个分布式云应用程序,该应用程序将存储实体的状态和相关事件。当从队列接收到消息时,我们更新SQL Azure中实体的状态,并将与该更新相关的事件保存在表存储中。

它看起来像这样:

  • UnitOfWork开始
    • 更新SQL Azure中的实体
    • 将事件保存到表存储
    • <
    • 提交事务/gh>
  • 结束UnitOfWork

我们在这里遇到的问题是,我们不能在一个事务中提交SQL Azure和表存储中的更改。因此,当在SQL Azure中保存实体失败时,我们希望回滚在表存储中保存事件。

如果我理解你的目标,你是在试图涵盖以下两种情况:

  • 如果DB插入失败,回滚Azure表
  • 如果Azure表插入失败,回滚SQL Azure

假设你在同一个线程内执行两个请求,你是否尝试过这样的方法(伪代码)?注意,我使用的是数据库引擎的事务功能;这与MSDTC不同,因为我只对单个连接这样做-所以这是支持的。

dbConnection.BeginTransaction;
try { 
     // add record in database - it is in a transaction so it can be rolled back
     insert_into_sqlazure;
     }
catch
{ 
    // automatic rollack - just exist with error
    exit_with_error;
}
try
{
     insert_into_azure_table;
     dbConnection.CommitTransaction;
}
catch
{
    dbConnection.Rollback;
    exit_with_error;
}

相关内容

  • 没有找到相关文章

最新更新