Azure Queue Storage-kódminták Java 8-es verziójú ügyfélkódtárak használatával

Ez a cikk olyan kódmintákat mutat be, amelyek a Java Azure Queue Storage ügyfélkódtárának 8-es verzióját használják.

2023. március 31-én megszüntettük az Azure SDK-kódtárak támogatását, amelyek nem felelnek meg a jelenlegi Azure SDK-irányelveknek. Az új Azure SDK-kódtárak rendszeresen frissülnek az egységes felületek kialakításának elősegítése és a biztonsági helyzetének megerősítése érdekében. Ajánlott áttérni az új Azure SDK-kódtárakra, hogy kihasználhassa az új képességeket és a kritikus biztonsági frissítéseket.

Bár a régebbi kódtárak 2023. március 31-e után is használhatók, a Microsoft már nem nyújt hozzájuk hivatalos támogatást és frissítéseket. További információkért lásd a támogatási nyugdíjazási bejelentést.

A legújabb, 12.x-es ügyfélkódtár-verziót használó kódmintákért tekintse meg a Java Azure Queue Storage ügyfélkódtárának rövid útmutatóját.

Várakozási sor létrehozása

Adja hozzá a következő import irányelveket:

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

Egy CloudQueueClient objektum lehetővé teszi az üzenetsorok referenciaobjektumainak lekérését. Az alábbi kód létrehoz egy CloudQueueClient objektumot, amely a használni kívánt üzenetsorra mutató hivatkozást tartalmaz. Ha nem létezik, létrehozhatja az üzenetsort.

Feljegyzés

Más módokon is létrehozhat CloudStorageAccount objektumokat. További információkért tekintse meg CloudStorageAccount az Azure Storage-ügyfél SDK-referenciáját.)

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

Üzenet hozzáadása üzenetsorhoz

Ha egy üzenetet be szeretne szúrni egy meglévő üzenetsorba, először hozzon létre egy újat CloudQueueMessage. Ezután hívja meg a metódust addMessage . A CloudQueueMessage létrehozható egy sztringből (UTF-8 formátumban) vagy egy bájttömbből. Az alábbi példakód egy üzenetsort hoz létre (ha nem létezik), és beszúrja az üzenetet 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();
}

Betekintés a következő üzenetbe

Az üzenetsor elején lévő üzenetbe anélkül is betekinthet, hogy a hívással peekMessageeltávolítaná azt az üzenetsorból.

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

Üzenetsorban található üzenet tartalmának módosítása

Az alábbi kódminta megkeresi az üzenetsorban az első üzenettartalmat, amely egyezik a Hello, world kifejezéssel, módosítja az üzenet tartalmát, és kilép.

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

Az alábbi kódminta csak az üzenetsor első látható üzenetét frissíti.

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

Az üzenetsor hosszának lekérése

A downloadAttributes metódus több értéket kér le, köztük az üzenetsorban lévő üzenetek számát is. A szám csak hozzávetőleges, mert az üzenetek a kérés után hozzáadhatók vagy eltávolíthatók. A getApproximateMessageCount metódus a Queue Storage meghívása nélkül adja vissza a hívás downloadAttributesáltal lekért utolsó értéket.

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

A következő üzenet kiolvasása

A kód két lépésben lekérdez egy üzenetet egy üzenetsorból. Amikor felhívja retrieveMessage, megkapja a következő üzenetet egy sorban. A visszaadott retrieveMessage üzenet láthatatlanná válik az üzenetsorból érkező üzeneteket olvasó többi kód számára. Alapértelmezés szerint az üzenet 30 másodpercig marad láthatatlan. Az üzenet üzenetsorból való eltávolításának befejezéséhez meg kell hívnia a deleteMessage-t is. Ha a kód nem tud feldolgozni egy üzenetet, ez a kétlépéses folyamat biztosítja, hogy ugyanazt az üzenetet kapja, és próbálkozzon újra. A kód közvetlenül az üzenet feldolgozása után hívja a 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();
}

További lehetőségek az üzenetek törlésére

Az alábbi példakód 20 üzenet lekérésére használja a retrieveMessages metódust egy hívásban. Ezután for egy hurok használatával dolgozza fel az üzeneteket. Emellett a láthatatlanság időtúllépését öt percre (300 másodpercre) állítja az egyes üzenetekhez. Az időkorlát az összes üzenetnél egyszerre kezdődik. Ha a hívás retrieveMessagesóta öt perc telt el, a nem törölt üzenetek újra láthatók lesznek.

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

Az üzenetsorok listázása

Az aktuális üzenetsorok listájának lekéréséhez hívja meg a CloudQueueClient.listQueues() metódust, amely egy objektumgyűjteményt CloudQueue ad vissza.

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

Sor törlése

Ha törölni szeretne egy üzenetsort és az abban található összes üzenetet, hívja meg az deleteIfExists objektum metódusát 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();
}