2014-11-14 72 views
4

如果我使用Azure.Storage.QueueQueueTrigger屬性可見性超時

queue.GetMessage(TimeSpan.FromMinutes(20)); 

試圖用Azure.WebJobs(SDK時,我可以設置可見性超時,但是從隊列得到一個消息0.4.0-測試版)的屬性一webjob自動綁定到一個隊列

public static void ProcessQueueMessage([QueueTrigger("myqueue")] string message){ 
     //do something with queue item 
} 

有沒有一種方法來設置該屬性的可見性超時?在JobHostConfiguration()中似乎沒有選項。隊列。如果沒有辦法覆蓋,那麼它是標準的30秒嗎?

回答

5

在最新的V1.1.0版本中,可以通過經JobHostConfiguration.Queues.QueueProcessorFactory註冊自己的自定義QueueProcessor實例現在控制的可見性超時。這使您可以控制全局或每個隊列/功能的高級消息處理行爲。

例如,設置可見性失敗的信息,您可以覆蓋ReleaseMessageAsync如下:

protected override async Task ReleaseMessageAsync(CloudQueueMessage message, FunctionResult result, TimeSpan visibilityTimeout, CancellationToken cancellationToken) 
{ 
    // demonstrates how visibility timeout for failed messages can be customized 
    // the logic here could implement exponential backoff, etc. 
    visibilityTimeout = TimeSpan.FromSeconds(message.DequeueCount); 

    await base.ReleaseMessageAsync(message, result, visibilityTimeout, cancellationToken); 
} 

更多細節可以在release notes here找到。

+0

visibilityTimeout的參數值總是默認爲0.我試着通過_queue.UpdateMessage(message,new TimeSpan(0,2,0),MessageUpdateFields.Visibility)來設置它。但這似乎並不影響價值。任何想法如何設置這個參數的第一位或如何實現它? – Proteux 2016-07-19 17:13:20

+0

在SDK的1.1.2版本中,visibilityTimeout被硬編碼爲10分鐘,但在5分鐘後,租約被擴展:https://github.com/Azure/azure-webjobs-sdk/blob/master/src/Microsoft .Azure.WebJobs.Host/Queues/Listeners/QueueListener.cs#L279-L289 – sjkp 2016-08-30 20:05:21

+0

@john我剛剛在一個全新的1.1.2 SDK應用程序中驗證了自己,應用了以上所做的重寫超時。我也用了1分鐘。在我添加自定義隊列處理器覆蓋之前,該消息連續快速重試5次。隨着重寫,每分鐘重試一次。所以放心,它的工作。我建議你在我們的repo https://github.com/Azure/azure-webjobs-sdk/issues上用完整的代碼和repro步驟記錄一個bug,這樣我們可以找出你可能會出錯的地方。 – mathewc 2017-02-07 01:29:37

4

我有同樣的問題,還沒有找到答案。但是,要回答你的問題的一部分,默認租約是10分鐘。

引用Azure網站:「當方法完成時,隊列消息被刪除,如果方法在完成之前失敗,則隊列消息不會被刪除;在10分鐘的租約到期後,消息將被釋放如果一個消息總是引發一個異常,那麼這個序列將不會被無限重複,在5次不成功的嘗試處理消息之後,消息被移動到名爲{queuename} -poison的隊列中,最大嘗試次數是配置「。

鏈接:http://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-get-started/ 科:ContosoAdsWebJob - Functions.cs - GenerateThumbnail方法

希望這有助於!

+0

感謝看到10分鐘的限制 - 我錯過了。如果我沒有得到任何關於能見度超時是否可以被覆蓋的迴應,那麼我將採取它,因爲它無法完成,並在這一點上將您的答案標記爲正確的答案。謝謝 – 2014-12-04 20:42:01