Come usare l'archiviazione code da Ruby

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

In questa guida viene illustrato come eseguire scenari comuni del servizio di archiviazione di accodamento di Microsoft Azure. Gli esempi sono scritti usando l'API Ruby di Azure. Gli scenari illustrati includono inserimento, visualizzazione, recupero ed eliminazione dei messaggi in coda, oltre alla creazione ed eliminazione di code.

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.

Creare un'applicazione Ruby

Creare un'applicazione Ruby. Per istruzioni, vedere Creare un'applicazione Ruby in Servizio app in Linux.

Configurare l'applicazione per l'accesso all'archiviazione

Per usare Archiviazione di Azure, è necessario scaricare e usare il pacchetto Ruby Azure, che include un set di librerie utili che comunicano con i servizi REST di archiviazione.

Utilizzare RubyGems per ottenere il pacchetto

  1. Usare un'interfaccia della riga di comando, ad esempio PowerShell (Windows), Terminal (Mac) o Bash (Unix).
  2. Digitare gem install azure nella finestra di comando per installare la gemma e le dipendenze.

Importare il pacchetto

Usando l'editor di testo preferito aggiungere quanto segue alla parte superiore del file Ruby dove si intende usare l'archiviazione:

require "azure"

Configurare una connessione di Archiviazione di Azure

Il modulo di Azure leggerà le variabili AZURE_STORAGE_ACCOUNT di ambiente e AZURE_STORAGE_ACCESS_KEY per informazioni necessarie per connettersi all'account di archiviazione di Azure. Se queste variabili di ambiente non sono impostate, è necessario specificare le informazioni sull'account prima di usare Azure::QueueService con il codice seguente:

Azure.config.storage_account_name = "<your azure storage account>"
Azure.config.storage_access_key = "<your Azure storage access key>"

Per ottenere questi valori da un account di archiviazione classico o di Resource Manager nel portale di Azure:

  1. Accedere al Portale di Azure.
  2. Passare all'account di archiviazione che si desidera utilizzare.
  3. Nel pannello Impostazioni a destra fare clic su Chiavi di accesso.
  4. Nel pannello Chiavi di accesso visualizzato verrà visualizzato il tasto di scelta 1 e la chiave di accesso 2. È possibile usare una di queste indifferentemente.
  5. Fare clic sull'icona Copia per copiare la chiave negli Appunti.

Procedura: creare una coda

Il codice seguente crea un Azure::QueueService oggetto che consente di usare le code.

azure_queue_service = Azure::QueueService.new

Usare il create_queue() metodo per creare una coda con il nome specificato.

begin
  azure_queue_service.create_queue("test-queue")
rescue
  puts $!
end

Procedura: inserire un messaggio in una coda

Per inserire un messaggio in una coda, usare il create_message() metodo per creare un nuovo messaggio e aggiungerlo alla coda.

azure_queue_service.create_message("test-queue", "test message")

Procedura: visualizzare il messaggio successivo

È possibile visualizzare il messaggio davanti a una coda senza rimuoverlo dalla coda chiamando il peek_messages() metodo . Per impostazione predefinita, peek_messages() visualizza un singolo messaggio. È anche possibile specificare il numero di messaggi che si desidera visualizzare.

result = azure_queue_service.peek_messages("test-queue",
  {:number_of_messages => 10})

Procedura: rimuovere il messaggio successivo dalla coda

È possibile rimuovere un messaggio da una coda in due passaggi.

  1. Quando si chiama list_messages(), viene visualizzato il messaggio successivo in una coda per impostazione predefinita. È anche possibile specificare il numero di messaggi che si desidera ottenere. I messaggi restituiti da list_messages() diventano invisibili a qualsiasi altro codice che legge i messaggi da questa coda. Passare il timeout di visibilità in secondi come parametro.
  2. Per completare la rimozione del messaggio dalla coda, è necessario chiamare anche delete_message().

Questo processo in due passaggi di rimozione di un messaggio assicura che, qualora l'elaborazione di un messaggio abbia esito negativo 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 chiama delete_message() subito dopo l'elaborazione del messaggio.

messages = azure_queue_service.list_messages("test-queue", 30)
azure_queue_service.delete_message("test-queue",
  messages[0].id, messages[0].pop_receipt)

Procedura: cambiare il contenuto di un messaggio accodato

È possibile cambiare il contenuto di un messaggio inserito nella coda. Il codice seguente usa il update_message() metodo per aggiornare un messaggio. Il metodo restituirà una tupla che contiene la ricevuta popup del messaggio della coda e un valore UTC DateTime che rappresenta quando il messaggio sarà visibile nella coda.

message = azure_queue_service.list_messages("test-queue", 30)
pop_receipt, time_next_visible = azure_queue_service.update_message(
  "test-queue", message.id, message.pop_receipt, "updated test message",
  30)

Procedura: Opzioni aggiuntive per la rimozione della coda dei messaggi

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

  1. È possibile recuperare un batch di messaggi.
  2. È 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 list_messages() metodo per ottenere 15 messaggi in una sola chiamata. Quindi, ogni messaggio viene stampato ed eliminato. Per ogni messaggio, inoltre, il timeout di invisibilità viene impostato su cinque minuti.

azure_queue_service.list_messages("test-queue", 300
  {:number_of_messages => 15}).each do |m|
  puts m.message_text
  azure_queue_service.delete_message("test-queue", m.id, m.pop_receipt)
end

Procedura: recuperare la lunghezza delle code

È possibile ottenere una stima sul numero di messaggi presenti in una coda. Il get_queue_metadata() metodo restituisce il conteggio approssimativo dei messaggi e altri metadati della coda.

message_count, metadata = azure_queue_service.get_queue_metadata(
  "test-queue")

Procedura: eliminare una coda

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

azure_queue_service.delete_queue("test-queue")

Passaggi successivi

Dopo aver appreso le nozioni di base di Archiviazione code, seguire questi collegamenti per informazioni sulle attività di archiviazione più complesse.

Per un confronto tra Archiviazione code di Azure descritte in questo articolo e bus di servizio di Azure code descritte in Come usare le code del bus di servizio, vedere Archiviazione code di Azure e code del bus di servizio - confrontate e contrastate