Hướng dẫn sử dụng Queue trong Azure

Hướng dẫn sử dụng Queue trong Azure

1. Queue là gì?###

Azure Queue Storage là một dịch vụ của Azure cho phép lưu trữ một số lượng lớn massage có thể truy cập ở khắp mọi nơi thông qua HTTP và HTTPS. Một message có thể có kích thước lên đến 64kB và 1 queue có thể chứa đến hàng triệu message , tối đa có thể chứa tổng dung lượng của tài khoản lưu trữ. Queue thường được sử dụng trong các tác vụ bất đồng bộ.

2. Thiết lập môi trường###

Để bắt đầu với Azure Queue Storage, bạn cần tạo 1 tài khoản Azure Storage Account (Hướng dẫn tạo tại đây)
Azure Queue Strorage có 2 lựa chọn để phát triển:

  • Sử dụng tài khoản Azure Storage Account
  • Sử dụng máy ảo Azurite để chạy và kiểm thử trên môi trường local
    Việc phát triển trên tài khoản Azure Storage Account sẽ phát sinh chi phí nhưng chi phí đó ít và được tạo trial nên mình sẽ hướng dẫn mọi người trực tiếp qua tài khoản này.

3. Tạo Project###

  • Trong Visual Studio -> File -> New -> Project...

Chọn Console App(.NET Framework)
Sửa tên Project & Solution
Chọn vị trí lưu
Chọn Framework: .NET Framework 4.6.1

  • Sử dụng Manage Nuget Packages cài thêm 2 package:
    Azure.Storage.Queues
    System.Configuration.ConfigurationManager

  • Lấy Connection String:

    • Truy cập vào Azure Storage Account vừa tạo
    • Chọn Access keys trong mục Security + netwoking
    • Chọn Show keys
    • Copy Connecting string
  • Sửa file app.config
    Trong file app.config thêm đoạn code sau vào sau cặp thẻ <startup></startup>:

<appSettings>
    <add key="StorageConnectionString" value="connection-string" />
</appSettings>

Thay value bằng connection string vừa lấy được ở trên.

4. Các hàm cơ bản với Azure Queue Storage###

Sau khi thiết lập xong môi trường, using thêm một vài thư viện trong file Program.cs

 using System.Configuration;
 using System.Threading.Tasks;
 using Azure.Storage.Queues;
 using Azure.Storage.Queues.Models;
  • Khởi tạo một QueueClient:
QueueClient queueClient = new QueueClient(connectionString, queueName);

Lưu ý: queueName là tên queue chỉ được cho phép gồm các kí tự chữ thường.

  • Tạo Queue:
queueClient.CreateIfNotExists();

Tạo thêm một queue mới nếu queue chưa tồn tại

  • Thêm một message mới vào queue:
queueClient.SendMessage(message);
  • Lấy message trong queue mà không cần xóa:
PeekedMessage[] peekedMessage = queueClient.PeekMessages();

PeekMessage có param maxMessages là số lượng message cần lấy, mặc định sẽ lấy 1 message

  • Thay đổi nội dung message trong hàng đợi:
QueueMessage[] message = queueClient.ReceiveMessages();
queueClient.UpdateMessage(message[0].MessageId, 
       message[0].PopReceipt, 
       "Updated contents",
       TimeSpan.FromSeconds(60.0)  // Make it invisible for another 60 seconds
       );
  • Dequeue message:
QueueMessage[] retrievedMessage = queueClient.ReceiveMessages();
Console.WriteLine($"Dequeued message: '{retrievedMessage[0].MessageText}'");
queueClient.DeleteMessage(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
  • Sử dụng Async-Await cho những Storage Queue API:
    Thêm Async cho những hàm có sẵn

  • Lấy độ dài queue:

QueueProperties properties = queueClient.GetProperties();
int cachedMessagesCount = properties.ApproximateMessagesCount;
  • Xóa queue:
queueClient.Delete();

Ngoài ra trong khi phát triển hoặc bị nghẽn queue hoặc trace log bạn có thể thao tác trực tiếp trên giao diện quản lý queue

Cảm ơn các bạn đã đọc bài viết!