0

基于 StackOverflow 上的这个问题/答案,我希望让单个 Azure 实例一次运行某些代码,而不是让每个实例都运行代码。

但是,我似乎找不到的是如何确定仍在工作的角色RoleEnvironment.CurrentRoleInstance.Role.Instances是否忙碌和/或正在康复。如果一个实例失败,我需要它来将运行我的代码的控制权移交给另一个实例。

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

4

2 回答 2

1

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

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

于 2013-08-22T13:42:24.683 回答
0

您是否尝试过基于服务总线的方法?将要完成的任务推送到主题中。实例可以创建基于实例编号命名的订阅。(您可以从 RoleEnvironment.CurrentInstance.Id 中获取)。这样,即使实例宕机了,消息仍然会投递到订阅,以便实例恢复后抓取。

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

无论哪种方式,一个简单的排队机制都可能在语义上更符合您正在尝试做的事情。

于 2013-08-22T17:49:08.193 回答