昨天當我們嘗試更換我們的分段< - >生產角色時,我們遇到了可怕的問題/體驗。Windows Azure升級<-->生產導致表存儲中的衝突和錯誤
這裏是我們的設置:
我們有一個workerrole從隊列中拿起消息。這些消息在角色上處理。 (表存儲插入,數據庫選擇等)。這可能需要每隊列消息1-3秒,具體取決於他需要創建多少表格存儲帖子。一切完成後,他將刪除該消息。
問題交換時:
當我們的分期項目上線我們的生產workerrole開始示數。
當角色想要處理隊列消息時,它給了'EntityAlreadyExists'錯誤的持續流。由於這些錯誤,隊列消息未被刪除。這導致隊列消息被放回到隊列中並返回到處理等。......
當查看這些隊列消息並分析將發生什麼事情時,我們看到它們實際已處理但未被刪除。
刪除這些錯誤消息時,問題還沒有結束。新的隊列消息沒有得到處理,而這些消息尚未處理,也沒有添加表存儲記錄,這聽起來很奇怪。
當刪除分段和生產並再次發佈到生產時,一切都開始正常工作。
可能的問題?
我們有litle 2不知道實際發生了什麼事。
- 也許這兩個角色拿起相同的消息,一個發佈了帖子,一個發生了錯誤?
- ... ???
可能的解決方案?
我們對如何解決這個「問題」有一些想法。
- 讓毒訊息在系統中失效?當出隊計數超過X時,我們應該刪除該隊列消息或將其放入單獨的「poisonqueue」中。
- 捕獲EntityAlreadyExists錯誤,只刪除該隊列消息或將其放入單獨的隊列中。
- ... ????
的多重角色
我想我們都會有同樣的問題搭建多個角色時?
非常感謝。
編輯24/02/2012 - 額外的信息
- 我們實際使用的的GetMessage()
- 在隊列中的每個項目都是獨特的,將產生表存儲唯一的消息。關於該過程的更多信息:用戶發佈內容並且必須分發給某些其他用戶。從該用戶生成的消息將具有唯一的Id(guid)。該消息將被髮布到隊列中並由工作者角色提取。該消息分佈在多個其他表(分區鍵 - > UserId,rowkey - >某些時間戳記&中唯一的消息ID。因此幾乎沒有機會在相同的消息發佈在正常情況下
- 不可見時間出可能是一個合乎邏輯的解釋,因爲有些消息可能被分配到喜歡10-20表。這意味着10-20插入不批選項。你可以設置或擴大這一可見時間出來?
- 不刪除隊列消息,因爲有異常可能也是一個解釋,因爲我們沒有實現任何有毒消息故障轉移YET;)。
最新的隊列實現允許您更改可見性超時。 http://msdn.microsoft.com/en-us/library/windowsazure/hh452234.aspx – hocho 2012-02-24 16:55:52