2017-07-13 28 views
0

我在探索azure函數和隊列觸發器來實現遞歸求解器。如何判斷從Azure隊列中刪除的最後一條消息何時被刪除

的期望的行爲如下:

  1. 存在一種被稱爲「solveme」,當它接收到包含狀態中的項目,將創建一個第二隊列與一個唯一的名稱(GUID)隊列和發送初始狀態與該相關信息的隊列。

  2. 當一個消息被接收到新創建的隊列中時,它可能會排入更多的工作來代表所有下一個可能的狀態,以便在消息「完成」之前,新工作將存在於隊列中。如果給定狀態下沒有有效的下一個狀態,它只會完成該消息。這意味着,直到所有新作品排隊後,原始消息纔會「完成」。在這一步中,我寫關閉數據天青表代表使用步驟1

3.當所有的消息都來自新創建的隊列中處理相關信息的有效解決方案,刪除隊列。

我不知道如何去#3沒有計時器或什麼,檢查隊列長度,直到它爲零並刪除它。我試圖只使用Azure函數和Azure存儲 - 沒有別的。

如果有人直接從QueueTrigger或由QueueTrigger調用的函數執行操作,那將會很不錯。

此外,有沒有更好的/標準的方法來觸發完成這種工作?實際上,空隊列是所有工作都完成的觸發器,但如果有更好的方法,我想知道它!

回答

3

沒有可靠的方法來開箱即用。如果你的消費者比生產者更快,那麼隊列可以長時間保持0,而製作者仍然繼續發送數據。

我建議你發送一個特殊的「序列結束」消息,所以當消費者收到這個消息時,它知道要去和刪除隊列。

P.S.看看Durable Functions - 看起來你可以使用一些編排,而不是自己實現工作流程(只是介意在早期預覽中)。

+0

應該沒有辦法讓它去零,因爲消息沒有完成,直到所有的下一個工作被添加,除非我失去了一些東西。另外,如何在此遞歸情況下發送工作結束消息?我沒有看到任何可能的方法。 – MPavlak

+0

我會從提供的鏈接中查看Fan-In示例。有效地,我試圖做粉絲進入,我不知道如何使用這些技術。我發現使用持久功能,如果它完成。 – MPavlak

+0

@MPavlak我不確定你的意思是什麼樣的「完整」。函數將逐個處理消息,但可以並行處理同一隊列中的多個消息。我想我不明白你的方案夠好,也許你可以添加一個例子? – Mikhail