[Azure] C# 使用 Azure.Storage.Queues 寫入佇列(Queue) + 延遲顯示( VisibilityTimeout )

2022-08-12

上一篇文章 (C# 使用 Azure.Storage.Queues 寫入佇列(Queue) + 取得資料 )我們談到了簡單操控 Azure Queue ,當作一個可以跨機器跨系統的 Queue 的實作方式,傳統很多時候會用到 Redis 來解決,但是用這應該便宜很多

不過上篇文章說到,他有一個問題,就是你取用後,如果時間沒有到他只會紀錄取用次數跟一般你理解的 Dequeue  不太一樣。



首先,其實在 SendMessage 可以傳入一個參數 visibilityTimeout 這是代表在一個時間後可以顯示,所以我就設計一個案例

我先寫入十筆資料都顯示延遲五秒後再出現,之後再寫入200筆立即出現的資料(但是我有延遲一秒寫一筆為了方便觀測),之後有一個執行緒是一直做 ReceiveMessage的動作


1. 寫入資料



2.讀取資料


3.呼叫


結果




因為一開始寫入的資料都延遲了五秒,所以再立即的佇列部分會被先取出來,一直到被延遲的資料時間到了就會出現

這設計可以應用在一些地方,像是限時開始搶票的東西,大概就先寫到這之後有些心得我再繼續分享..



reference:

https://docs.microsoft.com/zh-tw/dotnet/api/azure.storage.queues.queueclient.sendmessage?view=azure-dotnet#azure-storage-queues-queueclient-sendmessage(system-binarydata-system-nullable((system-timespan))-system-nullable((system-timespan))-system-threading-cancellationtoken)


當麻許的超技八 2014 | Donma Hsu Design.