确定其他角色实例是否正忙和/或正在修复?

时间:2013-08-22 13:31:54

标签: c# azure azure-sdk-.net azure-role-environment

在StackOverflow上构建this question/answer,我希望让一个Azure实例同时运行某些代码,而不是让每个实例运行代码。

然而,我似乎无法找到的是如何确定仍然在RoleEnvironment.CurrentRoleInstance.Role.Instances中的角色是否忙碌和/或愈合。如果失败,我需要将代码转移到另一个实例上。

RoleInstance似乎没有任何属性来确定当前的角色状态。

2 个答案:

答案 0 :(得分:1)

我可能会提出一个不同的看法,而不是使用基于复杂拓扑的选择,而是实现一个简单的“交通警察”模式。简而言之,这使用临时blob租约来确保只有一个实例(获取锁定的实例)可以执行单例操作。如果正在执行操作的实例变得无响应,则租约将无法续订,另一个实例可以快速接管处理。

我在我的博客上有一些示例代码和一篇文章:http://brentdacodemonkey.wordpress.com/2012/07/27/the-traffic-cop-pattern/

答案 1 :(得分:0)

您是否尝试过基于服务总线的方法?将要完成的任务推送到主题中。该实例可以创建基于实例编号命名的订阅。 (你可以从RoleEnvironment.CurrentInstance.Id中获取)。通过这种方式,即使实例发生故障,该消息仍将被传递给订阅,以便实例在重新启动后获取。

订阅也可以是基于消息数据的过滤订阅。

无论哪种方式,简单的排队机制都可能与您尝试的内容在语义上排成一行。