【问题标题】:Atomicity: Database transaction and Windows Azure原子性:数据库事务和 Windows Azure
【发布时间】:2012-11-08 07:45:45
【问题描述】:

背景

有一个消息队列域。该域可能与某些消息队列技术一起使用。在这种特殊情况下,它绑定到 Windows Azure 服务总线

一些项目有一个注册Windows Azure Service Bus主题的操作(基本上是一个消息队列)。

注册一个新的消息队列意味着:

  1. 启动域事务(即数据库事务)。
  2. 添加一个带有一些相关信息的消息队列域对象(例如哪个用户注册它或属于哪个应用程序属于整个消息队列)。
  3. 使用控制反转来处理消息队列服务器中的实际队列注册(在这种情况下,它将针对 Windows Azure 服务总线发生)。
  4. 如果没有任何问题,域事务会被提交,并且相关的域对象会被持久化或更新。

如果域事务成功结束并且Windows Azure 服务总线主题注册工作正常,它应该可以正常工作。

问题

但是如果 域事务成功结束但 Windows Azure 服务总线 无法注册主题 - 也就是消息队列 - 会发生什么?

是的,您的域名已损坏

如果您在域事务开始之前进行 Windows Azure 服务总线 主题注册,会发生什么情况?好吧,如果一切顺利,没问题。但现在问题已经反转:如果 Windows Azure 服务总线 主题正确注册但后来域事务失败会怎样?

是的,第二种情况比第一种情况要好,因为该操作注册了一个无用的消息队列,但域不会知道它。现在的主要问题是不确定数量的事务可能会失败,并且未知数量的消息队列将毫无用处。

想象一下,如果这是一项严肃的大型业务服务:大量无用的消息队列和系统管理员(一个人)每月删除无用的消息队列

那么 - 现在的问题 - ?

由于我发现使用无用的消息队列比使用损坏的域更好,因此我选择继续采用这种方式,但是...Windows Azure 具有任何类型的分布式事务机制为了在原子事务中包含任何远程对象创建,包括其他特定于域的操作?如果不是 - 遗憾的是我相信这是实际情况 - 你将如何解决这种情况?

注意:

我正在寻找这样的东西,因为我真的不喜欢有一个根本无法处理其用例的域。我更愿意避免这种情况,让域正常工作并控制一切

一些有趣的链接...

我发现了一些关于这个主题的有趣链接:

http://blogs.msdn.com/b/clemensv/archive/2012/07/30/transactions-in-windows-azure-with-service-bus-an-email-discussion.aspx

【问题讨论】:

    标签: .net azure distributed-transactions c#-5.0


    【解决方案1】:

    您可以使用 states 解决此问题而无需交易。想象一下以下工作流程:

    1. 注册域并将其状态设置为pending
    2. 创建服务总线主题
    3. 将域的状态设置为活动

    然后你可以有一个小过程来检查待处理的域:

    • 如果域处于待处理状态但主题存在,请将状态设置为活动(在这种情况下,步骤 3 可能失败)。
    • 如果域处于待处理状态但主题不存在,请尝试重新创建主题或向可以手动检查正在发生的事情的人发送警报

    有了重试政策(如 TOPAZ),99% 的请求都不会出现任何问题。但每当出现问题时,它会自动修复,如果无法修复,则会升级为人工干预。

    替代方案类似于 Clemens 的博客文章中的内容,您在 SQL Azure 中使用发件箱表,并在注册域的同一事务中写入该发件箱表。

    【讨论】:

    • 好点。我喜欢你关于状态的建议。我目前的解决方案是:1)注册队列时,服务总线部分在提交域事务之前执行,2)取消注册队列时,域部分在服务总线部分之前执行和提交。这是一个很好的保证,因为域应该始终保持一致。 (在下一条评论中继续)
    • 另外,我喜欢你的方法,因为想象一下域部分处于 pending 状态。用户界面将有一个名为“重试”的按钮,因此 Windows Azure 部分可以再次使用已创建的域部分来完成。谢谢。我将等待其他观点将任何答案标记为选定的答案,但我将整合状态概念。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2020-02-12
    相关资源
    最近更新 更多