2013-10-16 16 views
6

使用任何正常的Azure隊列,我彈出消息,然後做一些工作。在完成工作之後,我不想刪除該消息。在Azure隊列再次可見之前,郵件會保留多久?

多久該消息留隱藏它視爲失敗之前,再次取得可見隊列?

例如。

var message = myQueue.GetMessage(); 

// Do Work .. 

myQueue.DeleteMessage(); 

我的工作可能需要.. 30秒什麼的。或者如果它花費了1分鐘或2分鐘會發生什麼?

我基本上不希望消息在工作完成之前再次可用,因此另一個工人將其從隊列中彈出..即使此工作人員仍在正在工作

我們可以設置'隱藏'時間嗎?

回答

13

我們可以設置'隱藏'時間嗎?

是的。您可以設置將消息隱藏到其他呼叫者的時間。如果您查看Get Messages的REST API文檔,它需要一個名爲visibilitytimeout的參數。該參數負責隱藏指定秒數的消息。在該時間段過後,如果未刪除,則該消息再次變爲可見。

該消息在被認定爲失敗之前保持隱藏狀態多長時間 並且在隊列中再次可見?

如果您使用.Net存儲客戶端庫,您可以選擇指定可見性超時期限。查看Get Message的文檔,您可以在其中指定可見性超時。由於這是庫中的可選參數(但在REST API級別需要)​​,庫提供的默認值爲90秒。

+0

如果可見性超時已過期,消息再次可見,我會嘗試刪除該消息,因爲我的工作比可見性超時期間花費了更多時間,會發生什麼情況? –

+0

當您將消息出隊(使用獲取消息)時,您會得到一個用於刪除消息的「popreceipt」。這個'popreceipt'保持有效,直到時間消息再次出列。因此,只要您的郵件沒有出列,即使可見性超時期限已過,您也可以刪除該郵件。請閱讀備註部分:https://msdn.microsoft.com/en-us/library/azure/dd179347.aspx。 HTH。 –

+0

謝謝@Gaurav –

9

您可以將Visibility Timeout指定爲GetMessage()重載之一的參數。您還可以使用UpdateMessage()來擴展消息的隱藏性。但是,您永遠不能保證消息不會被處理兩次 - 例如,消費者在完成工作之後但在刪除消息之前死亡。 Windows Azure隊列是盡力而爲的FIFO隊列 - 至少有一次語義。

+0

有沒有辦法在可見性超時期限到期之前再次使消息可見?假設我意外地將超時設置爲3天,並且想在幾個小時後查看消息? –

相關問題