Share via


Introduzione all’archiviazione di accodamento di Azure e ai servizi connessi di Visual Studio (progetti servizi cloud)

Suggerimento

Provare Esplora archivi Microsoft Azure

Microsoft Azure Storage Explorer è un'app autonoma gratuita di Microsoft che consente di rappresentare facilmente dati di Archiviazione di Azure in Windows, macOS e Linux.

Panoramica

Importante

Servizi cloud (versione classica) è ora deprecata per i nuovi clienti e verrà ritirata il 31 agosto 2024 per tutti i clienti. Le nuove distribuzioni devono usare il nuovo modello di distribuzione basato su Azure Resource Manager Azure Servizi cloud (supporto esteso).

Questo articolo descrive come iniziare a usare l'archiviazione code di Azure in Visual Studio dopo aver creato o fatto riferimento a un account di archiviazione di Azure in un progetto di servizi cloud usando la finestra di dialogo Aggiungi servizi connessi di Visual Studio.

Verrà mostrato come creare una coda nel codice. Infine verrà mostrato come eseguire operazioni relative alle code di base, come l'aggiunta, la modifica, la lettura e la rimozione di messaggi delle code. Gli esempi sono scritti nel codice C# e usano la libreria client Archiviazione di Microsoft Azure per .NET.

L'operazione Aggiungi servizi connessi consente di installare i pacchetti NuGet appropriati per accedere all'archiviazione di Azure nel progetto e di aggiungere la stringa di connessione per l'account di archiviazione ai file di configurazione del progetto.

Il servizio di archiviazione di accodamento di Azure consente di archiviare grandi quantità di messaggi ai quali è possibile accedere da qualsiasi parte del mondo mediante chiamate autenticate tramite HTTP o HTTPS. La dimensione massima di un singolo messaggio della coda è di 64 KB e una coda può contenere milioni di messaggi, nei limiti della capacità complessiva di un account di archiviazione.

Code di accesso nel codice

Per accedere alle code nei progetti Servizi cloud di Visual Studio, è necessario aggiungere i seguenti elementi a un file di origine C# che accede all’archiviazione di accodamento di Azure.

  1. Assicurarsi che le dichiarazioni dello spazio dei nomi all'inizio del file C# includano queste istruzioni using .

    using Microsoft.Framework.Configuration;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Queue;
    
  2. Ottenere un oggetto CloudStorageAccount che rappresenta le informazioni sull'account di archiviazione. Utilizzare il codice seguente per ottenere la stringa di connessione di archiviazione e le informazioni sull'account di archiviazione dalla configurazione del servizio di Azure.

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("<storage-account-name>_AzureStorageConnectionString"));
    
  3. Ottenere un oggetto CloudQueueClient per fare riferimento agli oggetti delle code nell'account di archiviazione.

    // Create the queue client.
    CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
    
  4. Ottenere un oggetto CloudQueue per fare riferimento a una coda specifica.

    // Get a reference to a queue named "messageQueue"
    CloudQueue messageQueue = queueClient.GetQueueReference("messageQueue");
    

NOTA: Usare tutto il codice precedente davanti al codice negli esempi seguenti.

Creare una coda in codice

Per creare la coda nel codice, è sufficiente aggiungere una chiamata a CreateIfNotExists.

// Create the CloudQueue if it does not exist
messageQueue.CreateIfNotExists();

Aggiungere un messaggio a una coda

Per inserire un messaggio in una coda esistente, creare un nuovo oggetto CloudQueueMessage, quindi chiamare il metodo AddMessage.

È possibile creare un oggetto CloudQueueMessage da una stringa in formato UTF-8 o da una matrice di byte.

Di seguito è riportato un esempio che inserisce il messaggio "Hello, World".

// Create a message and add it to the queue.
CloudQueueMessage message = new CloudQueueMessage("Hello, World");
messageQueue.AddMessage(message);

Leggere un messaggio in una coda

È possibile visualizzare il messaggio davanti a una coda senza rimuoverlo dalla coda chiamando il metodo PeekMessage .

// Peek at the next message
CloudQueueMessage peekedMessage = messageQueue.PeekMessage();

Leggere e rimuovere un messaggio in una coda

Il codice può rimuovere un messaggio da una coda in due passaggi.

  1. Chiamare GetMessage per ottenere il messaggio successivo in una coda. Un messaggio restituito da GetMessage diventa invisibile a qualsiasi altro codice che legge i messaggi da questa coda. Per impostazione predefinita, il messaggio rimane invisibile per 30 secondi.
  2. Per completare la rimozione del messaggio dalla coda, chiamare DeleteMessage.

Questo processo in due passaggi di rimozione di un messaggio assicura che, qualora l'elaborazione di un messaggio non riesca a causa di errori hardware o software, un'altra istanza del codice sia in grado di ottenere lo stesso messaggio e di riprovare. Il codice seguente chiama DeleteMessage immediatamente dopo l'elaborazione del messaggio.

// Get the next message in the queue.
CloudQueueMessage retrievedMessage = messageQueue.GetMessage();

// Process the message in less than 30 seconds

// Then delete the message.
await messageQueue.DeleteMessage(retrievedMessage);

Utilizzare opzioni aggiuntive per elaborare e rimuovere i messaggi in coda

È possibile personalizzare il recupero di messaggi da una coda in due modi.

  • È possibile recuperare un batch di messaggi (massimo 32).
  • È possibile impostare un timeout di invisibilità più lungo o più breve assegnando al codice più o meno tempo per l'elaborazione completa di ogni messaggio. Nell'esempio di codice seguente viene utilizzato il metodo GetMessages per recuperare 20 messaggi con una sola chiamata. Quindi, ogni messaggio viene elaborato con un ciclo foreach . Per ogni messaggio, inoltre, il timeout di invisibilità viene impostato su cinque minuti. Si noti che i 5 minuti iniziano per tutti i messaggi contemporaneamente, quindi dopo 5 minuti dalla chiamata a GetMessages, tutti i messaggi che non sono stati eliminati diventeranno nuovamente visibili.

Ecco un esempio:

foreach (CloudQueueMessage message in messageQueue.GetMessages(20, TimeSpan.FromMinutes(5)))
{
    // Process all messages in less than 5 minutes, deleting each message after processing.

    // Then delete the message after processing
    messageQueue.DeleteMessage(message);

}

Recuperare la lunghezza della coda

È possibile ottenere una stima sul numero di messaggi presenti in una coda. Il metodo FetchAttributes chiede al servizio di accodamento di recuperare gli attributi della coda, incluso il numero di messaggi. La proprietà ApproximateMethodCount restituisce l'ultimo valore recuperato dal metodo FetchAttributes, senza chiamare il servizio di accodamento.

// Fetch the queue attributes.
messageQueue.FetchAttributes();

// Retrieve the cached approximate message count.
int? cachedMessageCount = messageQueue.ApproximateMessageCount;

// Display number of messages.
Console.WriteLine("Number of messages in queue: " + cachedMessageCount);

Utilizzare il modello Async-Await con le API comuni di accodamento di Azure.

In questo esempio viene illustrato come utilizzare il modello Async-Await con API di accodamento di Azure comuni. L'esempio chiama la versione asincrona di ognuno dei metodi specificati, che può essere visualizzata dalla correzione post-correzione asincrona di ogni metodo. Quando un metodo asincrono viene utilizzato, il modello async-await sospende l'esecuzione locale fino al completamento della chiamata. Questo comportamento consente al thread corrente di eseguire altre attività per evitare colli di bottiglia delle prestazioni e migliora la velocità di risposta complessiva dell'applicazione. Per altre informazioni sull'uso del modello di Async-Await in .NET, vedere Async and Await (C# e Visual Basic)

// Create a message to put in the queue
CloudQueueMessage cloudQueueMessage = new CloudQueueMessage("My message");

// Add the message asynchronously
await messageQueue.AddMessageAsync(cloudQueueMessage);
Console.WriteLine("Message added");

// Async dequeue the message
CloudQueueMessage retrievedMessage = await messageQueue.GetMessageAsync();
Console.WriteLine("Retrieved message with content '{0}'", retrievedMessage.AsString);

// Delete the message asynchronously
await messageQueue.DeleteMessageAsync(retrievedMessage);
Console.WriteLine("Deleted message");

Eliminare una coda

Per eliminare una coda e tutti i messaggi che contiene, chiamare il metodo Elimina sull'oggetto coda.

// Delete the queue.
messageQueue.Delete();

Passaggi successivi

A questo punto, dopo aver appreso le nozioni di base dell'archiviazione delle code, visitare i collegamenti seguenti per altre informazioni sulle attività di archiviazione più complesse.