Condividi tramite


Come usare Archiviazione code di Azure da Python

Panoramica

Questo articolo illustra gli scenari comuni che usano il servizio Archiviazione code di Azure. Gli scenari trattati includono inserimento, visualizzazione, recupero ed eliminazione di messaggi della coda. Viene anche trattato il codice per la creazione e l'eliminazione di code.

Gli esempi in questo articolo sono scritti in Python e usano la libreria client di Archiviazione code di Azure per Python. Per altre informazioni sulle code, vedere la sezione Passaggi successivi .

Che cos'è l'archiviazione code?

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. L'archiviazione code viene spesso usata per creare un backlog di lavoro da elaborare in modo asincrono.

Concetti del servizio di accodamento

Il servizio di accodamento di Azure contiene i componenti seguenti:

Componenti del servizio code di Azure

  • Account di archiviazione: Tutti gli accessi ad Archiviazione di Azure vengono eseguiti tramite un account di archiviazione. Per altre informazioni sugli account di archiviazione, vedere Panoramica dell'account di archiviazione.

  • Coda: una coda contiene un set di messaggi. Tutti i messaggi devono essere inclusi in una coda. Si noti che il nome della coda deve essere in lettere minuscole. Per altre informazioni, vedere Denominazione di code e metadati.

  • Messaggio: un messaggio, in qualsiasi formato, con dimensioni massime di 64 KB. Il tempo massimo che un messaggio può rimanere nella coda è di 7 giorni. Per la versione 2017-07-29 o successive, la durata massima consentita può essere un numero positivo qualsiasi o -1, a indicare che il messaggio non scade. Se questo parametro viene omesso, la durata predefinita è di sette giorni.

  • Formato URL: Le code sono indirizzabili usando il formato URL seguente: http://<storage account>.queue.core.windows.net/<queue>

    L'URL seguente fa riferimento a una delle code nel diagramma:

    http://myaccount.queue.core.windows.net/incoming-orders

Creare un account di archiviazione di Azure

Il modo più semplice per creare il primo account di archiviazione di Azure consiste nell'usare il portale di Azure. Per altre informazioni, vedere Creare un account di archiviazione.

È anche possibile creare un account di archiviazione di Azure usando Azure PowerShell, l'interfaccia della riga di comando di Azure o il provider di risorse di archiviazione di Azure per .NET.

Se in questo momento non si preferisce creare un account di archiviazione in Azure, è anche possibile usare l'emulatore di archiviazione Azurite per eseguire e testare il codice in un ambiente locale. Per altre informazioni, vedere Usare l'emulatore Azurite per lo sviluppo locale di Archiviazione di Azure.

Scaricare e installare Azure Storage SDK per Python

Azure Storage SDK per Python richiede Python v2.7, v3.3 o versione successiva.

Eseguire l'installazione tramite PyPI

Per eseguire l'installazione tramite Python Package Index (PyPI), digitare:

pip install azure-storage-queue

Nota

Se si esegue l'aggiornamento da Azure Storage SDK per Python v0.36 o versioni precedenti, disinstallare l'SDK precedente usando pip uninstall azure-storage prima di installare il pacchetto più recente.

Per metodi di installazione alternativi, vedere Azure SDK per Python.

Copiare le credenziali dal portale di Azure

Le richieste effettuate dall'applicazione di esempio ad Archiviazione di Azure devono essere autorizzate. Per autorizzare una richiesta, aggiungere all'applicazione le credenziali dell'account di archiviazione sotto forma di stringa di connessione. Per visualizzare le credenziali dell'account di archiviazione, seguire questa procedura:

  1. Accedere al portale di Azure.

  2. Individuare l'account di archiviazione.

  3. Nel riquadro dei menu dell'account di archiviazione, in Sicurezza e rete selezionare Chiavi di accesso. Qui è possibile visualizzare le chiavi di accesso dell'account e la stringa di connessione completa per ogni chiave.

    Screenshot che mostra dove si trovano le impostazioni della chiave di accesso nel portale di Azure

  4. Nel riquadro Chiavi di accesso selezionare Mostra chiavi.

  5. Nella sezione key1 individuare il valore stringa di connessione . Selezionare l'icona Copia negli Appunti per copiare la stringa di connessione. Il valore della stringa di connessione verrà aggiunto a una variabile di ambiente nella sezione successiva.

    Screenshot che mostra come copiare una stringa di connessione dal portale di Azure

Configurare la stringa di connessione di archiviazione

Dopo aver copiato la stringa di connessione, scriverla in una nuova variabile di ambiente nel computer locale che esegue l'applicazione. Per impostare la variabile di ambiente, aprire una finestra della console e seguire le istruzioni per il sistema operativo specifico. Sostituire <yourconnectionstring> con la stringa di connessione effettiva.

setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"

Dopo aver aggiunto la variabile di ambiente in Windows, è necessario avviare una nuova istanza della finestra di comando.

Riavviare i programmi

Dopo aver aggiunto la variabile di ambiente, riavviare gli eventuali programmi in esecuzione che dovranno leggerla. Ad esempio, riavviare l'ambiente di sviluppo o l'editor prima di continuare.

Configurazione dell'applicazione per l’accesso ad Archiviazione di accodamento

L'oggetto QueueClient consente di usare una coda. Aggiungere il codice seguente nella parte superiore di qualsiasi file Python in cui si vuole accedere a livello di codice a una coda di Azure:

from azure.storage.queue import (
        QueueClient,
        BinaryBase64EncodePolicy,
        BinaryBase64DecodePolicy
)

import os, uuid

Il os pacchetto fornisce supporto per recuperare una variabile di ambiente. Il uuid pacchetto fornisce il supporto per la generazione di un identificatore univoco per un nome di coda.

Creare una coda

La stringa di connessione viene recuperata dalla AZURE_STORAGE_CONNECTION_STRING variabile di ambiente impostata in precedenza.

Il codice seguente crea un QueueClient oggetto usando la stringa di connessione di archiviazione.

# Retrieve the connection string from an environment
# variable named AZURE_STORAGE_CONNECTION_STRING
connect_str = os.getenv("AZURE_STORAGE_CONNECTION_STRING")

# Create a unique name for the queue
q_name = "queue-" + str(uuid.uuid4())

# Instantiate a QueueClient object which will
# be used to create and manipulate the queue
print("Creating queue: " + q_name)
queue_client = QueueClient.from_connection_string(connect_str, q_name)

# Create the queue
queue_client.create_queue()

I messaggi della coda di Azure vengono archiviati come testo. Per archiviare i dati binari, configurare le funzioni di codifica e decodifica Base64 prima di inserire un messaggio nella coda.

Configurare le funzioni di codifica e decodifica Base64 durante la creazione dell'oggetto client.

# Setup Base64 encoding and decoding functions
base64_queue_client = QueueClient.from_connection_string(
                            conn_str=connect_str, queue_name=q_name,
                            message_encode_policy = BinaryBase64EncodePolicy(),
                            message_decode_policy = BinaryBase64DecodePolicy()
                        )

Inserire un messaggio in una coda

Per inserire un messaggio in una coda, usare il send_message metodo .

message = u"Hello World"
print("Adding message: " + message)
queue_client.send_message(message)

Visualizzare in anteprima i messaggi

È possibile visualizzare i messaggi senza rimuoverli dalla coda chiamando il peek_messages metodo . Per impostazione predefinita, questo metodo visualizza un singolo messaggio.

# Peek at the first message
messages = queue_client.peek_messages()

for peeked_message in messages:
    print("Peeked message: " + peeked_message.content)

Cambiare il contenuto di un messaggio in coda

È possibile cambiare il contenuto di un messaggio inserito nella coda. Se il messaggio rappresenta un'attività, è possibile usare questa funzionalità per aggiornare lo stato dell'attività.

Il codice seguente usa il update_message metodo per aggiornare un messaggio. Il timeout di visibilità è impostato su 0. Ciò significa che il messaggio viene visualizzato immediatamente e il contenuto viene aggiornato.

messages = queue_client.receive_messages()
list_result = next(messages)

message = queue_client.update_message(
        list_result.id, list_result.pop_receipt,
        visibility_timeout=0, content=u'Hello World Again')

print("Updated message to: " + message.content)

Recuperare la lunghezza della coda

È possibile ottenere una stima sul numero di messaggi presenti in una coda.

Il metodo get_queue_properties restituisce le proprietà della coda, incluso .approximate_message_count

properties = queue_client.get_queue_properties()
count = properties.approximate_message_count
print("Message count: " + str(count))

Il risultato è approssimativo perché i messaggi possono essere aggiunti o rimossi dopo che il servizio risponde alla richiesta.

Rimuovere dalla coda i messaggi

Rimuovere un messaggio da una coda in due passaggi. Se il codice non riesce a elaborare un messaggio, questo processo in due passaggi garantisce che sia possibile ottenere lo stesso messaggio e riprovare. Chiamare delete_message dopo l'elaborazione del messaggio.

Quando si chiama receive_messages, viene visualizzato il messaggio successivo nella coda per impostazione predefinita. Un messaggio restituito da receive_messages diventa invisibile a qualsiasi altro elemento di codice che legge i messaggi di questa coda. Per impostazione predefinita, il messaggio rimane invisibile per 30 secondi. Per completare la rimozione del messaggio dalla coda, è necessario chiamare anche delete_message.

messages = queue_client.receive_messages()

for message in messages:
    print("Dequeueing message: " + message.content)
    queue_client.delete_message(message.id, message.pop_receipt)

È possibile personalizzare il recupero di messaggi da una coda in due modi. Innanzitutto, è possibile recuperare un batch di messaggi (massimo 32). In secondo luogo, è 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 usato il receive_messages metodo per ottenere messaggi in batch. Elabora quindi ogni messaggio all'interno di ogni batch usando un ciclo annidato for . Per ogni messaggio, inoltre, il timeout di invisibilità viene impostato su cinque minuti.

messages = queue_client.receive_messages(messages_per_page=5, visibility_timeout=5*60)

for msg_batch in messages.by_page():
   for msg in msg_batch:
      print("Batch dequeue message: " + msg.content)
      queue_client.delete_message(msg)

Eliminare una coda

Per eliminare una coda e tutti i messaggi contenuti in esso, chiamare il delete_queue metodo .

print("Deleting queue: " + queue_client.queue_name)
queue_client.delete_queue()

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.

Passaggi successivi

Dopo aver appreso le nozioni di base di Archiviazione code, seguire questi collegamenti per altre informazioni.

Per esempi di codice correlati che usano SDK Python versione 2 deprecati, vedere Esempi di codice con Python versione 2.