Java バージョン 8 クライアント ライブラリを使用する Azure Queue Storage のコード サンプル

この記事では、Java 用の Azure Queue Storage クライアント ライブラリのバージョン 8 を使用するコード サンプルを示します。

2023 年 3 月 31 日に、現在の Azure SDK ガイドラインに準拠していない Azure SDK ライブラリのサポートは廃止されました。 新しい Azure SDK ライブラリは、一貫したエクスペリエンスを促進し、セキュリティ態勢を強化するために定期的に更新されます。 新しい機能と重要なセキュリティ更新を利用するために、新しい Azure SDK ライブラリに移行することをお勧めします。

以前のライブラリは 2023 年 3 月 31 日以降も引き続き使用できますが、Microsoft から公式のサポートと更新情報は提供されなくなります。 詳細については、サポート廃止のお知らせに関するページを参照してください。

最新バージョンの 12.x クライアント ライブラリ バージョンを使用するコード サンプルについては、「クイック スタート: Java 用 Azure Queue Storage クライアント ライブラリ」 を参照してください。

キューを作成する

次の import ディレクティブを追加します。

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

CloudQueueClient オブジェクトを使用すると、キューの参照オブジェクトを取得できます。 次のコードでは、使用するキューの参照を与える CloudQueueClient オブジェクトが作成されます。 キューが存在しない場合は作成できます。

Note

CloudStorageAccount オブジェクトは他の方法でも作成できます。 詳細については、Azure Storage クライアント SDK リファレンス ドキュメントの「CloudStorageAccount」を参照してください。

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

メッセージをキューに追加する

既存のキューにメッセージを挿入するには、最初に新しい CloudQueueMessage を作成します。 次に、addMessage メソッドを呼び出します。 CloudQueueMessage は、文字列 (UTF-8 形式) またはバイト配列で作成できます。 次のコード例では、キューが作成され (それが存在しない場合)、メッセージ 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();
}

次のメッセージをピークする

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

キューに配置されたメッセージの内容を変更する

次のコード サンプルでは、メッセージのキューを検索し、内容が 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");

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

次のコード サンプルでは、キューで最初に参照したメッセージのみが更新されます。

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

キューの長さを取得する

downloadAttributes メソッドでは、キューに現在置かれているメッセージの数など、いくつかの値が取得されます。 要求の後でメッセージが追加または削除される可能性があるため、これらの値はあくまでも概数です。 getApproximateMessageCount メソッドからは、Queue Storage を呼び出さず、downloadAttributes を呼び出すことで取得された最後の値が返されます。

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

次のメッセージをデキューする

コードでは、2 つの手順でキューからメッセージをデキューします。 retrieveMessageを呼び出すと、キュー内の次のメッセージを取得します。 retrieveMessage から返されたメッセージは、このキューからメッセージを読み取る他のコードから参照できなくなります。 既定では、このメッセージを参照できない状態は 30 秒間続きます。 また、キューからのメッセージの削除を完了するには、deleteMessage を呼び出す必要があります。 コードでのメッセージの処理が失敗した場合でも、この 2 段階のプロセスにより、同じメッセージを取得して再試行できます。 ご自分のコードで、メッセージが処理された直後に deleteMessage を呼び出します。

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

メッセージのデキュー用の追加オプション

次のコード例では、retrieveMessages メソッドを使用して、1 回の呼び出しで 20 個のメッセージを取得します。 その後、for ループを使用して、各メッセージを処理します。 また、各メッセージの非表示タイムアウトを 5 分 (300 秒) に設定します。 タイムアウトは、すべてのメッセージに対して同時に開始されます。 retrieveMessages を呼び出してから 5 分経過すると、削除されていないメッセージは再び見えるようになります。

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

キューを一覧表示する

現在のキューの一覧を取得するには、CloudQueueClient.listQueues() メソッドを呼び出します。このメソッドは、CloudQueue オブジェクトのコレクションを返します。

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

キューを削除する

キューおよびそれに格納されているすべてのメッセージを削除するには、CloudQueue オブジェクトの deleteIfExists メソッドを呼び出します。

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