2012-02-07 55 views
3

使用Azure表存儲我讀了關於同一分區內的實體組事務。現在,如果將Azure隊列與表存儲一起使用會發生什麼情況。是否有可能從隊列中處理消息,插入到表存儲中。如果有事情中斷,回滾並再次將消息放入隊列中?Azure隊列和表存儲事務最佳實踐

或者我應該如何處理這種情況下與Azure的

回答

6

表和隊列沒有任何關聯交易。

下面是一些通用的隊列使用指導:

  • 確保隊列動作冪等 - 也就是說,你有相同的結果執行隊列消息不止一次,可重複的副作用
  • 設置合理的隊列消息可見性超時。如果您的任務看起來需要更長時間,則可以延長郵件的隱形超時時間。這可以防止其他線程/角色實例在您仍在使用時抓取相同的隊列項目。
  • 對於長時間運行的任務(或者您希望儘可能避免多次使用資源的任務),請沿途修改您的隊列消息,給予您狀態提示。例如:您有一個渲染視頻隊列消息:'RENDER|Source-URL'。你正在渲染視頻,它需要兩遍。您已經完成了傳遞1,並將結果存儲在臨時blob中。你可以用類似於'RENDER|Source-URL|Pass1-URL'的東西修改消息。現在,假設出現問題,並且由於某種原因您的渲染任務失敗。之後,當你再次拿起這條信息時,你可以從第2遍開始,而不是從一開始。
  • 您不必擔心將消息放回隊列。直到您明確刪除它們之後,纔會從隊列中實際刪除消息。在您選擇的隱形超時期間,他們只會變爲隱形。如果您在該期限結束時沒有刪除(或延長期限),則該消息會再次顯示以供其他人閱讀。 注意:此時,一旦有人讀取隊列消息,原始消息持有者將不再能夠刪除該消息。