2017-05-24 97 views
0

如何在「函數應用」中保留一條消息,直到我決定刪除它爲止?Azure隊列存儲未觸發消息觸發

當我建立在C#控制檯應用程序,我可以決定什麼時候我刪除,我用讀消息:

queue.DeleteMessage(msg); 

我能夠用該程序自動讀取隊列:functions-create-storage-queue-triggered-function

的問題是,如天青說:

回到存儲瀏覽器
  • ,單擊刷新並驗證該消息已被處理並且不再在隊列中。
  • 在這種情況下,當功能完成後,我無法自己刪除消息。

    我試圖Throw new Exception("failed");模擬一個失敗的功能,但消息無論如何被刪除。

    我正在尋找保持這個消息在隊列中,直到我決定刪除它(在函數的結尾)。

    回答

    2

    我試圖Throw new Exception("failed");來模擬失敗的功能,但消息無論如何被刪除。

    該消息未被刪除,它在幾秒鐘內無論何種visibility-timeout都不可見。您正在WebJobs SDK的上下文中運行代碼,這就是爲什麼您不能自己調用​​.DeleteMessage()。你只被交給消息,而不是隊列客戶端。

    如果您的函數成功完成,則函數運行時(WebJobs SDK)將刪除該消息。

    編號:
    https://stackoverflow.com/a/40011705/4148708
    https://github.com/Azure/azure-webjobs-sdk/issues/1040

    編輯: 出列數也可以咬。運行時將郵件移動到有害隊列(QueueName-poison)如果消息dequeueCount財產達到5

    更多的顯示方式:
    https://github.com/Microsoft/azure-docs/blob/master/articles/app-service-web/websites-dotnet-webjobs-sdk-storage-queues-how-to.md#automatic-poison-message-handling

    +0

    真的,我試圖與「扔」成功的消息,1並且成功消息起作用並消失,但失敗的消息在'myqueue-poison'中。但是'NextVisibleTime ='Null'' –

    +1

    這意味着它已經出隊5次了,如果'dequeueCount'屬性達到5,SDK會將它移動到毒性隊列中。我認爲它是5,不要引用那個,檢查文檔。 – evilSnobu

    +1

    是的,它是5.你可以引用我:) --https://github.com/Microsoft/azure-docs/blob/master/articles/app-service-web/websites-dotnet-webjobs-sdk-storage- queues-how-to.md#自動毒物-消息處理 – evilSnobu

    相關問題