Sdílet prostřednictvím


Ukázky kódu azure Queue Storage s využitím klientských knihoven Java verze 8

Tento článek ukazuje ukázky kódu, které používají verzi 8 klientské knihovny Azure Queue Storage pro Javu.

31. března 2023 jsme vyřadili podporu knihoven sady Azure SDK, které nevyhovují aktuálním pokynům sady Azure SDK. Nové knihovny sady Azure SDK se pravidelně aktualizují, aby poskytovaly konzistentní prostředí a posilovaly zabezpečení. Doporučujeme přejít na nové knihovny sady Azure SDK, abyste mohli využívat nové funkce a důležité aktualizace zabezpečení.

I když starší knihovny je možné používat i po 31. březnu 2023, nebudou už od Microsoftu dostávat oficiální podporu a aktualizace. Další informace najdete v oznámení o vyřazení podpory.

Ukázky kódu využívající nejnovější verzi klientské knihovny 12.x najdete v rychlém startu: Klientská knihovna Azure Queue Storage pro Javu.

Vytvořit frontu

Přidejte následující import direktivy:

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

Objekt CloudQueueClient umožňuje získat referenční objekty pro fronty. Následující kód vytvoří CloudQueueClient objekt, který poskytuje odkaz na frontu, kterou chcete použít. Frontu můžete vytvořit, pokud neexistuje.

Poznámka:

Existují i další způsoby, jak vytvářet CloudStorageAccount objekty. Další informace najdete v referenčních informacích CloudStorageAccount k klientské sadě SDK služby 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();
}

Přidání zprávy do fronty

Chcete-li vložit zprávu do existující fronty, nejprve vytvořte novou CloudQueueMessage. Dále zavolejte metodu addMessage . Lze CloudQueueMessage vytvořit z řetězce (ve formátu UTF-8) nebo bajtového pole. Následující příklad kódu vytvoří frontu (pokud neexistuje) a vloží zprávu 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();
}

Zobrazení náhledu další zprávy

Zprávu můžete zobrazit před frontou, aniž byste ji odebrali z fronty voláním 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();
}

Změna obsahu zpráv zařazených ve frontě

Následující vzorový kód prohledává frontu zpráv, vyhledá první obsah zprávy, který odpovídá Hello, world, upraví obsah zprávy a ukončí.

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

Následující ukázka kódu aktualizuje pouze první viditelnou zprávu ve frontě.

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

Získání délky fronty

Metoda downloadAttributes načte několik hodnot, včetně počtu zpráv aktuálně ve frontě. Počet je pouze přibližný, protože zprávy je možné přidat nebo odebrat po požadavku. Metoda getApproximateMessageCount vrátí poslední hodnotu načtenou voláním downloadAttributes, bez volání 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();
}

Vyřazení další zprávy z fronty

Kód vyřadí zprávu z fronty ve dvou krocích. Když zavoláte retrieveMessage, zobrazí se další zpráva ve frontě. Zpráva vrácená z retrieveMessage této fronty se stane neviditelnou pro jakýkoli jiný kód, který čte zprávy z této fronty. Ve výchozím nastavení tato zpráva zůstává neviditelná po dobu 30 sekund. Chcete-li dokončit odebrání zprávy z fronty, musíte také volat deleteMessage. Pokud se vašemu kódu nepodaří zpracovat zprávu, tento dvoustupňový proces zajistí, že můžete získat stejnou zprávu a zkusit to znovu. Volání kódu deleteMessage hned po zpracování zprávy.

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

Další možnosti vyřazení zpráv z fronty

Následující příklad kódu používá metodu retrieveMessages k získání 20 zpráv v jednom volání. Potom zpracuje každou zprávu pomocí smyčky for . Také nastaví časový limit nevisibility na pět minut (300 sekund) pro každou zprávu. Časový limit se spustí pro všechny zprávy najednou. Když od volání retrieveMessagesuplynulo pět minut, všechny zprávy, které se neodstraní, se znovu zobrazí.

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

Výpis front

Chcete-li získat seznam aktuálních front, zavolejte metodu CloudQueueClient.listQueues() , která vrátí kolekci CloudQueue objektů.

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

Odstranění fronty

Pokud chcete odstranit frontu a všechny zprávy obsažené v ní, zavolejte metodu deleteIfExists objektu 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();
}