最近要處理一些專案上的問題有用到 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);
//實作上這建立一次就好了,不然大量跑會拖慢資源
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
--
The bug existed in all possible states.
Until I ran the code.
如果這篇文章有幫助到您幫我分享一下,讓我有寫下去的動力...