關於StackOverflow上的this question/answer的構建,我期望讓單個Azure實例一次運行某些代碼,而不是讓每個實例運行代碼。確定其他角色實例是否正在忙碌和/或正在恢復?
但是,我似乎無法找到的是如何確定仍在RoleEnvironment.CurrentRoleInstance.Role.Instances
中的角色是否忙碌和/或癒合。如果一個失敗,我需要這個將控制權移交給另一個實例。
RoleInstance
似乎沒有任何屬性來確定當前的角色狀態。
關於StackOverflow上的this question/answer的構建,我期望讓單個Azure實例一次運行某些代碼,而不是讓每個實例運行代碼。確定其他角色實例是否正在忙碌和/或正在恢復?
但是,我似乎無法找到的是如何確定仍在RoleEnvironment.CurrentRoleInstance.Role.Instances
中的角色是否忙碌和/或癒合。如果一個失敗,我需要這個將控制權移交給另一個實例。
RoleInstance
似乎沒有任何屬性來確定當前的角色狀態。
可能我建議採取不同的措施,而不是使用基於複雜拓撲的選擇,而是實施一個簡單的「交通警察」模式。簡而言之,它使用臨時blob租約來確保只有一個實例(獲取鎖的實例)可以執行單例操作。如果執行操作的實例變得無響應,則租約將無法續訂,而另一個實例可能會快速接管處理。
我有一些示例代碼和對我的博客寫了起來:http://brentdacodemonkey.wordpress.com/2012/07/27/the-traffic-cop-pattern/
您是否嘗試過服務總線爲基礎的方法?把任務完成成一個主題。該實例可以創建基於實例編號命名的預訂。 (你可以從RoleEnvironment.CurrentInstance.Id中獲得)。通過這種方式,即使實例出現故障,消息仍然會傳遞給訂閱,以便實例在恢復後進行搶佔。
訂閱也可以是基於郵件數據的過濾訂閱。
無論哪種方式,一個簡單的排隊機制可能更符合語義與您正在嘗試做什麼。
I需要該服務高度可用。 –
smarx實際上有一個庫可以做到這一點。但是,我擔心Azure存儲失敗時會發生什麼,就像過去一樣。 –
已經存在多個對存儲的依賴關係,所以有什麼額外的。最糟糕的情況是,在這種模式下,行爲根本不會執行,因爲沒有任何實例可以建立租約。 – BrentDaCodeMonkey
我的應用程序中沒有任何對存儲的依賴。 –