Migrazione delle code in modalità pull a Pub/Sub

Questa pagina spiega come eseguire la migrazione del codice coda di pull da code di attività a Pub/Sub. Pub/Sub è ora il modo preferito per eseguire le operazioni di coda in App Engine.

Se la tua app utilizza sia code in modalità pull sia code in modalità push, utilizza questa guida per eseguire la migrazione delle code in modalità pull in Pub/Sub prima di eseguire la migrazione delle code in modalità push nel nuovo servizio Cloud Tasks per le code in modalità push. La migrazione delle code in modalità pull dopo la migrazione delle code in modalità push in Cloud Tasks non è consigliata perché l'utilizzo richiesto del file queue.yaml potrebbe causare comportamenti imprevisti con Cloud Tasks.

Funzionalità attualmente non disponibili in Pub/Sub

Le seguenti funzionalità di code di attività non sono attualmente disponibili in Pub/Sub:

  • Raggruppamento per tag
  • Deduplicazione automatica

Prezzi e quote

La migrazione delle code in modalità pull a Pub/Sub potrebbe influire sui prezzi e sulle quote per la tua app.

Prezzi

Pub/Sub ha i propri prezzi. Come con le code di attività, l'invio di richieste alla tua app App Engine con Pub/Sub può causare all'app incorrere in costi.

Quote

Le quote Pub/Sub sono diverse da quelle per le code di attività. Come con le code di attività, l'invio di richieste alla tua app App Engine da Pub/Sub potrebbe influire sulle quote delle richieste di App Engine.

Prima della migrazione

In questa sezione vengono trattati gli argomenti che ti servono prima di eseguire la migrazione delle code di pull in Pub/Sub.

Abilitazione dell'API Pub/Sub in corso...

Per abilitare l'API Pub/Sub, fai clic su Abilita nell'API Pub/Sub nella libreria API. Se vedi un pulsante Gestisci invece di un pulsante Abilita, significa che hai precedentemente abilitato l'API Pub/Sub per il tuo progetto e non è necessario farlo di nuovo.

Autenticazione della tua app nell'API Pub/Sub

Devi autenticare la tua app nell'API Pub/Sub. Questa sezione tratta l'autenticazione per due diversi casi d'uso.

Per sviluppare o testare la tua app localmente, ti consigliamo di usare un account di servizio. Per istruzioni sulla configurazione di un account di servizio e sul collegamento alla tua app, leggi l'articolo Ottenere e fornire manualmente le credenziali per l'account di servizio.

Per eseguire il deployment della tua applicazione su App Engine, non è necessario fornire una nuova autenticazione. Le credenziali predefinite dell'applicazione (ADC) deduceno i dettagli dell'autenticazione per le app di App Engine.

Download di Google Cloud CLI

Scarica e installa Google Cloud CLI per utilizzare l'interfaccia a riga di comando gcloud con l'API Pub/Sub se non l'hai installata in precedenza. Esegui questo comando nel terminale se hai già installato Google Cloud CLI.

gcloud components update

Importazione della libreria client Python

Segui questi passaggi per utilizzare la libreria client Python di Pub/Sub con la tua app App Engine:

  1. Crea una directory per archiviare le librerie di terze parti, ad esempio lib/:

    mkdir lib
  2. Copia le librerie necessarie.

    Ti consigliamo di utilizzare un file dei requisiti pip anziché installare le librerie una per volta dalla riga di comando. Crea un file requirements.txtnella stessa cartella in cui si trova il file app.yaml se non hai ancora un file requirements.txt. Aggiungi la seguente riga:

    google-cloud-pubsub
    

    Utilizza pip (versione 6 o successiva) con il flag -t <directory> per copiare la libreria Pub/Sub specificata nel file requirements.txt nella cartella creata nel passaggio precedente. Ad esempio:

    pip install -t lib -r requirements.txt
    
  3. Specifica la libreria RPC nella sezione libraries del file app.yaml:

    libraries:
    - name: grpcio
      version: 1.0.0
    
  4. Utilizza il modulo pkg_resources per assicurarti che la tua app utilizzi la giusta distribuzione della libreria client Python per Pub/Sub.

    Crea un file appengine_config.py nella stessa cartella del file app.yaml, se non ne hai già uno. Aggiungi quanto segue al tuo file appengine_config.py:

    # appengine_config.py
    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set path to your libraries folder.
    path = 'lib'
    # Add libraries installed in the path folder.
    vendor.add(path)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(path)

    Il file appengine_config.py riportato sopra presuppone che si trovi la directory di lavoro attuale dove si trova la cartella lib. In alcuni casi, ad esempio i test delle unità, la directory di lavoro corrente può essere diversa. Per evitare errori, puoi passare esplicitamente il percorso completo alla cartella lib utilizzando:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
  5. Importa la libreria client Python di Pub/Sub in qualsiasi file che utilizza code in modalità pull dall'API Task Queues:

    from google.cloud import pubsub_v1

Code Pub/Sub e pull

Confronto delle funzioni

Pub/Sub invia il lavoro ai worker attraverso una relazione di publisher/abbonato. Una sottoscrizione pull in Pub/Sub è come una coda di pull in code di attività perché il sottoscrittore estrae il messaggio dall'argomento. Nella tabella seguente sono elencate la funzionalità principale per le code pull nelle code di attività e la funzionalità associata per le sottoscrizioni pull in Pub/Sub.

Funzionalità delle code di attività funzionalità Pub/Sub
Coda Argomento
Attività Messaggio
Worker Abbonato

Per ulteriori informazioni sull'architettura Pub/Sub, leggi Cloud Pub/Sub: A Google-Scale Messaging Service.

Confronto del flusso di lavoro

Di seguito è riportato un confronto tra un flusso di lavoro tipico per una coda pull in code di attività e una sottoscrizione pull in Pub/Sub.

Flusso di lavoro delle code di attività Flusso di lavoro di Pub/Sub
Crei la coda di pull Crei l'argomento e iscrivi il tuo abbonato (ovvero, lavoratore) all'argomento
Tu crei e accodati l'attività Crei il messaggio e lo pubblichi nell'argomento
Il worker concede in leasing l'attività Il sottoscrittore estrae il messaggio dall'argomento
Il worker elabora l'attività Il sottoscrittore elabora il messaggio
Il worker elimina l'attività dalla coda Il sottoscrittore conferma il messaggio
Il lease scade L'argomento elimina il messaggio quando tutti i suoi sottoscrittori lo hanno confermato

Creazione di sottoscrizioni pull in Pub/Sub

Puoi utilizzare una sottoscrizione pull Pub/Sub come una coda di pull di code di attività. Le sottoscrizioni ad un argomento non scadono e possono esistere contemporaneamente per più worker. Ciò significa che un messaggio può essere elaborato da più di un worker, che è uno dei casi d'uso principali di Pub/Sub. Per ricreare le code di attività delle code in modalità pull/sottoscrizioni Pub/Sub, crea un argomento per ogni worker e iscriviti solo all'argomento per il worker associato. In questo modo ti assicuri che ogni messaggio venga elaborato da un solo worker come in Code di attività. Per scoprire di più sulla creazione e la gestione delle sottoscrizioni pull, leggi informazioni sulla gestione di argomenti e sottoscrizioni.

Eliminazione delle code in modalità pull

Dopo aver eseguito la migrazione delle code di attività nelle code in modalità pull in sottoscrizioni pull Pub/Sub, eliminale dalle code di attività utilizzando il tuo file queue.yaml. Ti consigliamo di eliminare ogni coda di pull prima di eseguire la migrazione di quella successiva. Ciò impedisce alla tua app di duplicare il lavoro che riceve dalla nuova sottoscrizione pull Pub/Sub durante la migrazione delle altre code di pull. Tieni presente che l'eliminazione delle code di attività esegui una coda una alla volta anziché in un singolo deployment potrebbe avere un effetto maggiore sulla quota di deployment di App Engine.

Dopo aver eliminato tutte le code in modalità pull dalle code di attività, puoi omettere il file queue.yaml dai deployment futuri dell'app.

Se la tua app utilizza solo code in modalità pull, rimuovi nel codice eventuali riferimenti all'API Task Queues. Se la tua app utilizza sia code in modalità pull che code in modalità push, puoi rimuovere i riferimenti all'API Task Queues che si verificano nei file che utilizzano solo le code in modalità pull o attendere fino a quando non hai eseguito anche la migrazione delle code in modalità push e poi rimuovere i riferimenti all'API Task Queues da tutti i file.

Passaggi successivi