背景
有一个消息队列域。该域可能与某些消息队列技术一起使用。在这种特殊情况下,它绑定到Windows Azure Service Bus。
某些项目具有注册Windows Azure 服务总线主题(基本上是消息队列)的操作。
注册一个新的消息队列意味着:
- 启动域事务(即数据库事务)。
- 添加一个带有一些相关信息的消息队列域对象(例如哪个用户注册它或属于哪个应用程序属于整个消息队列)。
- 使用控制反转来处理消息队列服务器中的实际队列注册(在这种情况下,它将针对 Windows Azure 服务总线发生)。
- 如果没有任何问题,域事务就会被提交,并且相关的域对象会被持久化或更新。
如果域事务成功结束并且Windows Azure 服务总线主题注册工作正常,它应该可以正常工作。
问题
但是,如果域事务成功结束但Windows Azure 服务总线无法注册主题 - 即消息队列 - 会发生什么?
是的,您有一个损坏的域。
如果在域事务开始之前进行Windows Azure 服务总线主题注册,会发生什么情况?好吧,如果一切顺利,没问题。但是现在问题已经倒转过来了:如果Windows Azure 服务总线主题被正确注册但后来域事务失败了怎么办?
是的,第二种情况比第一种情况要好,因为该操作注册了一个无用的消息队列,但域不会知道它。现在的主要问题是不确定数量的事务可能会失败,并且未知数量的消息队列将毫无用处。
试想一下,如果这是一个严肃的大型业务服务:大量无用的消息队列和一个系统管理员(一个人)每月删除无用的消息队列。
那么——现在的问题是——?
由于我发现使用无用的消息队列比使用损坏的域更好,因此我选择继续使用这种方式,但是... Windows Azure 具有任何类型的分布式事务机制以包含任何远程对象在原子事务中创建包括其他特定于域的操作?,如果不是 - 遗憾的是我相信这是实际情况 - 你将如何解决这种情况?
笔记:
我正在寻找这样的东西,因为我真的不喜欢有一个根本无法处理其用例的域。我宁愿避免这种情况,让域正常工作并控制一切。
一些有趣的链接...
我发现了一些关于这个主题的有趣链接: