Bagikan melalui


Sampel kode Azure Queue Storage menggunakan pustaka klien Java versi 8

Artikel ini memperlihatkan sampel kode yang menggunakan versi 8 dari pustaka klien Azure Queue Storage untuk Java.

Pada 31 Maret 2023, kami menghentikan dukungan untuk pustaka Azure SDK yang tidak sesuai dengan pedoman Azure SDK saat ini. Pustaka Azure SDK baru diperbarui secara berkala untuk mendorong pengalaman yang konsisten dan memperkuat postur keamanan Anda. Disarankan agar Anda beralih ke pustaka Azure SDK baru untuk memanfaatkan kemampuan baru dan pembaruan keamanan penting.

Meskipun pustaka yang lebih lama masih dapat digunakan melebihi 31 Maret 2023, pustaka tersebut tidak akan lagi menerima dukungan dan pembaruan resmi dari Microsoft. Untuk informasi selengkapnya, lihat pengumuman penghentian dukungan.

Untuk sampel kode menggunakan versi pustaka klien versi 12.x terbaru, lihat Mulai Cepat: Pustaka klien Azure Queue Storage untuk Java.

Buat antrean

Tambahkan arahan import berikut:

import com.microsoft.azure.storage.*;
import com.microsoft.azure.storage.queue.*;

Objek CloudQueueClient memungkinkan Anda mendapatkan objek referensi untuk antrean. Kode berikut membuat objek CloudQueueClient yang menyediakan referensi ke antrean yang ingin Anda gunakan. Anda dapat membuat antrean jika itu tidak ada.

Catatan

Ada cara lain untuk membuat CloudStorageAccount objek. Untuk informasi selengkapnya, lihat CloudStorageAccount di referensi SDK klien Azure Storage.)

try
{
    // Retrieve storage account from connection-string.
    CloudStorageAccount storageAccount =
       CloudStorageAccount.parse(storageConnectionString);

   // Create the queue client.
   CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

   // Retrieve a reference to a queue.
   CloudQueue queue = queueClient.getQueueReference("myqueue");

   // Create the queue if it doesn't already exist.
   queue.createIfNotExists();
}
catch (Exception e)
{
    // Output the stack trace.
    e.printStackTrace();
}

Kirim pesan ke antrean

Untuk menyisipkan pesan ke dalam antrean yang sudah ada, pertama-tama buat CloudQueueMessage baru. Selanjutnya, panggil metode addMessage. CloudQueueMessage dapat dibuat dari string (dalam format UTF-8) atau array byte. Contoh kode berikut membuat antrean (jika tidak ada) dan menyisipkan pesan Hello, World.

try
{
    // Retrieve storage account from connection-string.
    CloudStorageAccount storageAccount =
       CloudStorageAccount.parse(storageConnectionString);

    // Create the queue client.
    CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

    // Retrieve a reference to a queue.
    CloudQueue queue = queueClient.getQueueReference("myqueue");

    // Create the queue if it doesn't already exist.
    queue.createIfNotExists();

    // Create a message and add it to the queue.
    CloudQueueMessage message = new CloudQueueMessage("Hello, World");
    queue.addMessage(message);
}
catch (Exception e)
{
    // Output the stack trace.
    e.printStackTrace();
}

Intip pesan berikutnya

Anda dapat mengintip pesan di depan antrean tanpa menghapusnya dari antrean dengan memanggil peekMessage.

try
{
    // Retrieve storage account from connection-string.
    CloudStorageAccount storageAccount =
       CloudStorageAccount.parse(storageConnectionString);

    // Create the queue client.
    CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

    // Retrieve a reference to a queue.
    CloudQueue queue = queueClient.getQueueReference("myqueue");

    // Peek at the next message.
    CloudQueueMessage peekedMessage = queue.peekMessage();

    // Output the message value.
    if (peekedMessage != null)
    {
      System.out.println(peekedMessage.getMessageContentAsString());
   }
}
catch (Exception e)
{
    // Output the stack trace.
    e.printStackTrace();
}

Ubah konten pesan yang diantrekan

Contoh kode berikut mencari melalui antrean pesan, menemukan konten pesan pertama yang cocok dengan Hello, world, memodifikasi konten pesan, dan keluar.

try
{
    // Retrieve storage account from connection-string.
    CloudStorageAccount storageAccount =
        CloudStorageAccount.parse(storageConnectionString);

    // Create the queue client.
    CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

    // Retrieve a reference to a queue.
    CloudQueue queue = queueClient.getQueueReference("myqueue");

    // The maximum number of messages that can be retrieved is 32.
    final int MAX_NUMBER_OF_MESSAGES_TO_PEEK = 32;

    // Loop through the messages in the queue.
    for (CloudQueueMessage message : queue.retrieveMessages(MAX_NUMBER_OF_MESSAGES_TO_PEEK,1,null,null))
    {
        // Check for a specific string.
        if (message.getMessageContentAsString().equals("Hello, World"))
        {
            // Modify the content of the first matching message.
            message.setMessageContent("Updated contents.");
            // Set it to be visible in 30 seconds.
            EnumSet<MessageUpdateFields> updateFields =
                EnumSet.of(MessageUpdateFields.CONTENT,
                MessageUpdateFields.VISIBILITY);
            // Update the message.
            queue.updateMessage(message, 30, updateFields, null, null);
            break;
        }
    }
}
catch (Exception e)
{
    // Output the stack trace.
    e.printStackTrace();
}

Contoh kode berikut ini hanya memperbarui pesan pertama yang terlihat dalam antrean.

try
{
    // Retrieve storage account from connection-string.
    CloudStorageAccount storageAccount =
       CloudStorageAccount.parse(storageConnectionString);

    // Create the queue client.
    CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

    // Retrieve a reference to a queue.
    CloudQueue queue = queueClient.getQueueReference("myqueue");

    // Retrieve the first visible message in the queue.
    CloudQueueMessage message = queue.retrieveMessage();

    if (message != null)
    {
        // Modify the message content.
        message.setMessageContent("Updated contents.");
        // Set it to be visible in 60 seconds.
        EnumSet<MessageUpdateFields> updateFields =
            EnumSet.of(MessageUpdateFields.CONTENT,
            MessageUpdateFields.VISIBILITY);
        // Update the message.
        queue.updateMessage(message, 60, updateFields, null, null);
    }
}
catch (Exception e)
{
    // Output the stack trace.
    e.printStackTrace();
}

Dapatkan panjang antrean

Metode downloadAttributes mengambil beberapa nilai termasuk jumlah pesan yang saat ini dalam antrean. Jumlahnya hanya perkiraan karena pesan dapat ditambahkan atau dihapus setelah permintaan Anda. Metode getApproximateMessageCount mengembalikan nilai terakhir yang diambil oleh panggilan ke downloadAttributes, tanpa memanggil Azure Queue Storage.

try
{
    // Retrieve storage account from connection-string.
    CloudStorageAccount storageAccount =
       CloudStorageAccount.parse(storageConnectionString);

    // Create the queue client.
    CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

    // Retrieve a reference to a queue.
    CloudQueue queue = queueClient.getQueueReference("myqueue");

   // Download the approximate message count from the server.
    queue.downloadAttributes();

    // Retrieve the newly cached approximate message count.
    long cachedMessageCount = queue.getApproximateMessageCount();

    // Display the queue length.
    System.out.println(String.format("Queue length: %d", cachedMessageCount));
}
catch (Exception e)
{
    // Output the stack trace.
    e.printStackTrace();
}

Keluarkan pesan berikutnya dari antrean

Kode Anda akan menghapus pesan dari antrean dalam dua langkah. Saat Anda memanggil retrieveMessage, Anda mendapat pesan berikutnya dalam antrean. Pesan yang dberikan oleh retrieveMessage menjadi tidak terlihat oleh pesan pembacaan kode lainnya dari antrean ini. Secara default, pesan ini tetap tidak terlihat selama 30 detik. Untuk menyelesaikan penghapusan pesan dari antrean, Anda juga harus memanggil deleteMessage. Jika kode Anda gagal memproses pesan, proses dua langkah ini memastikan bahwa Anda bisa mendapatkan pesan yang sama, lalu coba lagi. Kode Anda memanggil deleteMessage tepat setelah pesan diproses.

try
{
    // Retrieve storage account from connection-string.
    CloudStorageAccount storageAccount =
        CloudStorageAccount.parse(storageConnectionString);

    // Create the queue client.
    CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

    // Retrieve a reference to a queue.
    CloudQueue queue = queueClient.getQueueReference("myqueue");

    // Retrieve the first visible message in the queue.
    CloudQueueMessage retrievedMessage = queue.retrieveMessage();

    if (retrievedMessage != null)
    {
        // Process the message in less than 30 seconds, and then delete the message.
        queue.deleteMessage(retrievedMessage);
    }
}
catch (Exception e)
{
    // Output the stack trace.
    e.printStackTrace();
}

Opsi tambahan untuk menghapus antrean pesan

Contoh kode berikut ini menggunakan metode retrieveMessages untuk mendapat 20 pesan dalam satu panggilan. Kemudian, ini memproses setiap pesan menggunakan loop for. Ini juga mengatur batas waktu tidak terlihat menjadi lima menit (300 detik) untuk setiap pesan. Batas waktu dimulai untuk semua pesan secara bersamaan. Ketika lima menit telah berlalu sejak panggilan ke retrieveMessages, pesan apa pun yang tidak dihapus menjadi terlihat lagi.

try
{
    // Retrieve storage account from connection-string.
    CloudStorageAccount storageAccount =
        CloudStorageAccount.parse(storageConnectionString);

    // Create the queue client.
    CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

    // Retrieve a reference to a queue.
    CloudQueue queue = queueClient.getQueueReference("myqueue");

    // Retrieve 20 messages from the queue with a visibility timeout of 300 seconds.
    for (CloudQueueMessage message : queue.retrieveMessages(20, 300, null, null)) {
        // Do processing for all messages in less than 5 minutes,
        // deleting each message after processing.
        queue.deleteMessage(message);
    }
}
catch (Exception e)
{
    // Output the stack trace.
    e.printStackTrace();
}

Mencantumkan antrean

Untuk mendapatkan daftar antrean saat ini, panggil CloudQueueClient.listQueues() metode , yang mengembalikan kumpulan CloudQueue objek.

try
{
    // Retrieve storage account from connection-string.
    CloudStorageAccount storageAccount =
        CloudStorageAccount.parse(storageConnectionString);

    // Create the queue client.
    CloudQueueClient queueClient =
        storageAccount.createCloudQueueClient();

    // Loop through the collection of queues.
    for (CloudQueue queue : queueClient.listQueues())
    {
        // Output each queue name.
        System.out.println(queue.getName());
    }
}
catch (Exception e)
{
    // Output the stack trace.
    e.printStackTrace();
}

Menghapus antrean

Untuk menghapus antrean dan semua pesan yang terkandung di dalamnya, panggil metode deleteIfExists pada objek CloudQueue.

try
{
    // Retrieve storage account from connection-string.
    CloudStorageAccount storageAccount =
        CloudStorageAccount.parse(storageConnectionString);

    // Create the queue client.
    CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

    // Retrieve a reference to a queue.
    CloudQueue queue = queueClient.getQueueReference("myqueue");

    // Delete the queue if it exists.
    queue.deleteIfExists();
}
catch (Exception e)
{
    // Output the stack trace.
    e.printStackTrace();
}