使用 Java 8 版用戶端程式庫的 Azure 佇列儲存體程式碼範例
本文將說明使用了 Azure 佇列儲存體用戶端程式庫的程式碼範例 (適用於 Java 8 版)。
在 2023 年 3 月 31 日,我們已淘汰不符合目前 Azure SDK 指導方針的 Azure SDK 程式庫支援。 新的 Azure SDK 程式庫會定期更新,以促進一致的體驗並加強您的安全性態勢。 建議您轉換至新的 Azure SDK 程式庫,以利用新功能和重大安全性更新。
雖然較舊的程式庫仍可在 2023 年 3 月 31 日之後使用,但它們將不再收到 Microsoft 的官方支援和更新。 如需詳細資訊,請參閱支援淘汰公告。
如需使用最新 12.x 版用戶端程式庫的程式碼範例,請參閱快速入門:適用於 Java 的 Azure 佇列儲存體用戶端程式庫。
建立佇列
新增下列 import
指示詞:
import com.microsoft.azure.storage.*;
import com.microsoft.azure.storage.queue.*;
CloudQueueClient
物件可讓您取得佇列的參考物件。 下列程式碼會建立 CloudQueueClient
物件,為要使用的佇列提供參考。 如果佇列不存在,您可以建立佇列。
注意
還有其他方法可以建立 CloudStorageAccount
物件。 如需詳細資訊,請參閱 Azure 儲存體用戶端 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
方法。 您可以從字串 (採用 UTF-8 格式) 或位元組陣列建立 CloudQueueMessage
。 下列程式碼範例會建立佇列 (如果不存在) 並插入訊息 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
方法會傳回呼叫 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();
}
清除佇列中的下一則訊息
您的程式碼可以使用兩個步驟來清除佇列訊息。 呼叫 retrieveMessage
時會取得佇列中的下一則訊息。 讀取此佇列訊息的任何其他程式碼皆無法看到從 retrieveMessage
傳回的訊息。 依預設,此訊息會隱藏 30 秒。 若要完成移除佇列訊息,您也必須呼叫 deleteMessage
。 如果您的程式碼無法處理訊息,則此兩步驟程序可確保您可以取得相同的訊息,然後再試一次。 已處理訊息後,程式碼便會立即呼叫 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
方法,在一次呼叫中取得 20 個訊息。 接著其會使用 for
迴圈處理每個訊息。 它也會將可見度逾時設定為每個訊息五分鐘 (300 秒)。 所有訊息的逾時都是同時啟動的。 呼叫 retrieveMessages
之後過了五分鐘,任何未刪除的訊息都會重新顯示。
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();
}