Buat dan kelola Azure Queue Storage dan pesan menggunakan .NET

Selesai

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:

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();
}