[Azure] C# 使用 Azure.Storage.Queues 寫入佇列(Queue) + 取得資料

2022-08-11

最近要處理一些專案上的問題有用到 Azure Storage Queue ( Azure  佇列儲存體),順手筆記一下,這一篇主要是敘述如何透過C# + Azure.Storage.Queues

送資料進去,並且讀取出來傳統的說法來說就是 enqueue  + dequeue,其實這東西非常方便,當你跨越機器處理同一群任務的時候可以透過這溝通排程

重點是價格還便宜,這篇文章不是要 "水" 文章,是之後有一些東西要基於這篇來說..



這篇案例,單純寫入資料,並且 queue name 是 test-azure-queue ,並且單純送進去純文字。

1. 安裝 nuget Azure.Storage.Queues 


2. Enqueue  寫入資料進去,這邊跑了一個迴圈寫入 10 筆資料

private static void SimpleEnququeAzure() { var queueName = "test-azure-queue"; var queueClient = new Azure.Storage.Queues.QueueClient(ConnectionString, queueName); //實作上這建立一次就好了&#65292;不然大量跑會拖慢資源 queueClient.CreateIfNotExists(); for (var i = 1; i <= 10; i++) { var res = queueClient.SendMessage("Hello, Azure Queue .測試資料 " + i); Console.WriteLine(JsonConvert.SerializeObject(res.Value)); } }


結果:




3. Dequeue 取的佇列資料,其中我是讀取到沒有資料為止,因為其實預設 SDK 送進去會有七天,如果你只是 單純 ReceiveMessage 只會被記錄 DequeueCount (清除佇列計數) ,並且第一次就會拿到 1  ,所以我是拿到之後直接刪除,達到跟一般 Dequeue 的效果

private static void SimpleDeququeAzure() { var queueName = "test-azure-queue"; var queueClient = new Azure.Storage.Queues.QueueClient(ConnectionString, queueName); var flag = new Object(); var totalCount = 0; while (flag != null) { var res = queueClient.ReceiveMessage(); if (res.Value != null) { if (res.Value.DequeueCount >=1) { queueClient.DeleteMessage(res.Value.MessageId, res.Value.PopReceipt); } Console.WriteLine(JsonConvert.SerializeObject(res.Value)); totalCount++; } else { flag = null; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("No Data"); Console.ResetColor(); } } Console.WriteLine("Pop "+ totalCount +" data."); }



其實很簡單,之後再寫其他比較值得注意的東西

reference:

https://docs.microsoft.com/zh-tw/azure/storage/queues/storage-queues-introduction


當麻許的碎念筆記 2014 | Donma Hsu Design.