我想確保不會多次向隊列中插入消息。有沒有可以用來強制執行唯一性的ID /名稱?Azure隊列唯一消息
5
A
回答
8
Azure隊列不確保消息順序和消息唯一性。消息將被處理「至少一次」,但沒有確保它不會被處理兩次,所以它不能確保「最多一次」。
你應該準備好接收兩次相同的消息。您可以將消息正文中的ID作爲數據的一部分。
11
vtortola幾乎涵蓋了它,但我想添加一點更多的細節,爲什麼它是至少一次交付。
當您讀取隊列項目時,它不會從隊列中移除;相反,它變得不可見但留在隊列中。該隱身期默認爲30秒(最長2小時)。在此期間,將項目從隊列中取出的代碼有足夠的時間處理隊列消息中的任何命令並刪除隊列項目。
假設隊列項目在超時時間到達之前被刪除,一切都很好。但是:一旦達到超時期限,隊列項目就會再次變爲可見,並且持有隊列項目的代碼可能不再刪除它。在這種情況下,其他人可以讀取相同的隊列消息並重新處理該消息。
因爲事實隊列消息可以超時,並能重新出現:
- 您的隊列處理必須冪等 - 隊列上的消息操作必須產生相同的結果(如渲染照片的縮略圖)。
- 您需要考慮超時調整。您可能會發現命令是有效的,但處理時間過長(也許您的45秒縮略圖渲染代碼工作得很好,直到有人上傳25MP圖像爲止)
- 您需要考慮有毒消息 - 那些永遠不會正確處理的消息。也許它們會導致拋出異常或導致消息處理器中止處理的一些無效條件,從而導致消息最終重新出現在隊列中。有一個屬性調用DequeueCount - 考慮在閱讀隊列項目時查看該屬性,如果等於比如說3,則將消息推送到表或Blob中,並向自己發送通知,以便花費一些時間在離線狀態下調試該消息。
有關獲取隊列低級別REST API的更多詳細信息,請參閱here。這會讓您更深入地瞭解Windows Azure隊列消息處理。
相關問題
- 1. Azure服務結構消息隊列
- 2. Azure WebJob隊列觸發器未響應加密隊列消息
- 3. azure隊列存儲 - 將消息放回隊列
- 4. 互操作性Azure服務總線消息隊列消息
- 5. 如何獲得唯一的POSIX消息隊列?
- 6. 消息隊列中的作業的唯一ID?
- 7. 使用Azure功能處理Azure服務總線隊列消息
- 8. Websphere消息隊列
- 9. Boost消息隊列
- 10. unix消息隊列
- 11. 消息隊列ENOMEM
- 12. Sinatra消息隊列
- 13. 天青隊列觸發的webjob阻止來自azure隊列的消息出隊
- 14. Azure函數啓動後消息從隊列中消失
- 15. 消息隊列中的多條消息
- 16. Azure函數根據消息數據將消息路由到隊列名稱
- 17. 嘲笑一個消息隊列
- 18. 消息隊列Windows服務
- 19. 持續消息隊列
- 20. 監視MSMQ消息隊列
- 21. win32:讀取消息隊列
- 22. VB6查看消息隊列
- 23. 消息隊列的選擇?
- 24. jquery的消息隊列
- 25. 消息隊列循環
- 26. POSIX消息隊列安全
- 27. 通過消息隊列
- 28. 複製的消息隊列
- 29. SQL Server和消息隊列
- 30. 多主題消息隊列