Buat dan kelola Azure Queue Storage dan pesan menggunakan .NET
Dalam unit ini kita membahas cara membuat antrean dan mengelola pesan di Azure Queue Storage dengan menampilkan cuplikan kode dari proyek .NET.
Contoh kode bergantung pada paket NuGet berikut:
- Pustaka Azure.Core untuk .NET: Paket ini menyediakan primitif, abstraksi, dan pembantu bersama untuk pustaka klien .NET Azure SDK modern.
- Pustaka klien Azure.Storage.Common untuk .NET: Paket ini menyediakan infrastruktur yang dibagikan oleh pustaka klien Azure Storage lainnya.
- Pustaka klien Azure.Storage.Queues untuk .NET: Paket ini memungkinkan bekerja dengan Azure Queue Storage untuk menyimpan pesan yang diakses oleh klien.
- Pustaka System.Configuration.ConfigurationManager untuk .NET: Paket ini menyediakan akses ke file konfigurasi untuk aplikasi klien.
Membuat klien layanan Antrean
Kelas QueueClient
memungkinkan Anda untuk mengambil antrean yang disimpan di penyimpanan Antrean. Berikut ini adalah salah satu cara untuk membuat klien layanan:
QueueClient queueClient = new QueueClient(connectionString, queueName);
Membuat antrean
Contoh ini menunjukkan cara membuat antrean jika belum ada:
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to create and manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
// Create the queue
queueClient.CreateIfNotExists();
Sisipkan pesan ke antrean
Untuk menyisipkan pesan ke dalam antrean yang sudah ada, panggil metode SendMessage
. Pesan dapat berupa string (dalam format UTF-8) atau array byte. Kode berikut membuat antrean (jika tidak ada) dan menyisipkan pesan:
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to create and manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
// Create the queue if it doesn't already exist
queueClient.CreateIfNotExists();
if (queueClient.Exists())
{
// Send a message to the queue
queueClient.SendMessage(message);
}
Intip pesan berikutnya
Anda dapat mengintip pesan dalam antrean tanpa menghapusnya dari antrean dengan memanggil metode PeekMessages
. Jika Anda tidak meneruskan nilai untuk parameter maxMessages
, defaultnya adalah mengintip satu pesan.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Peek at the next message
PeekedMessage[] peekedMessage = queueClient.PeekMessages();
}
Ubah konten pesan yang diantrekan
Anda dapat mengubah konten pesan di tempat dalam antrean. Jika pesan itu mewakili tugas kerja, Anda bisa menggunakan fitur ini untuk memperbarui status tugas kerja. Kode berikut memperbarui pesan antrean dengan konten baru, dan mengatur batas waktu visibilitas untuk memperpanjang 60 detik lagi. Ini menyimpan status pekerjaan yang terkait dengan pesan, dan memberi klien waktu satu menit lagi untuk terus mengerjakan pesan.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Get the message from the queue
QueueMessage[] message = queueClient.ReceiveMessages();
// Update the message contents
queueClient.UpdateMessage(message[0].MessageId,
message[0].PopReceipt,
"Updated contents",
TimeSpan.FromSeconds(60.0) // Make it invisible for another 60 seconds
);
}
Keluarkan pesan berikutnya dari antrean
Keluarkan pesan dari antrean dalam dua langkah. Saat Anda memanggil ReceiveMessages
, Anda mendapatkan pesan berikutnya dalam antrean. Pesan yang dikembalikan dari ReceiveMessages
menjadi tidak terlihat oleh pesan pembacaan kode lainnya dari antrean ini. Secara default, pesan ini tetap tidak terlihat selama 30 detik. Untuk menyelesaikan menghapus pesan dari antrean, Anda juga harus memanggil DeleteMessage
. Adanya proses dua langkah menghapus pesan ini memastikan bahwa jika kode Anda gagal memproses pesan karena kegagalan perangkat keras atau perangkat lunak, instans lain dari kode Anda bisa mendapat pesan yang sama dan mencoba lagi. Kode Anda memanggil DeleteMessage
tepat setelah pesan telat diproses.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Get the next message
QueueMessage[] retrievedMessage = queueClient.ReceiveMessages();
// Process (i.e. print) the message in less than 30 seconds
Console.WriteLine($"Dequeued message: '{retrievedMessage[0].Body}'");
// Delete the message
queueClient.DeleteMessage(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
}
Dapatkan panjang antrean
Anda bisa mendapat estimasi jumlah pesan dalam antrean. Metode GetProperties
ini memberi properti antrean termasuk jumlah pesan. Properti ApproximateMessagesCount
berisi perkiraan jumlah pesan dalam antrean. Jumlah ini tidak lebih rendah dari jumlah pesan aktual dalam antrean, tetapi bisa lebih tinggi.
/// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
QueueProperties properties = queueClient.GetProperties();
// Retrieve the cached approximate message count.
int cachedMessagesCount = properties.ApproximateMessagesCount;
// Display number of messages.
Console.WriteLine($"Number of messages in queue: {cachedMessagesCount}");
}
Menghapus antrean
Untuk menghapus antrean dan semua pesan yang terkandung di dalamnya, panggil metode Delete
pada objek antrean.
/// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Delete the queue
queueClient.Delete();
}