Questa pagina spiega come eseguire la migrazione del codice delle code in coda in modalità pull dalle code di attività a Pub/Sub. Pub/Sub è ora il modo consigliato per gestire le code in modalità pull in App Engine.
Se la tua app utilizza sia le code in modalità pull sia le code in modalità push, usa questa guida per eseguire la migrazione delle code in modalità pull a Pub/Sub prima di eseguire la migrazione delle code in modalità push al nuovo servizio di coda in modalità push Cloud Tasks. La migrazione delle code in modalità pull dopo la migrazione delle code in modalità push a Cloud Tasks non è consigliata perché l'utilizzo obbligatorio del file queue.yaml potrebbe causare un comportamento imprevisto con Cloud Tasks.
Funzionalità non attualmente disponibili in Pub/Sub
Le seguenti funzionalità delle code di attività non sono attualmente disponibili in Pub/Sub:
- Batching per tag
- Deduplicazione automatica
Prezzi e quote
La migrazione delle code in modalità pull a Pub/Sub potrebbe influire sui prezzi e sulle quote della tua app.
Prezzi
Pub/Sub ha prezzi propri. Come per le code di attività, l'invio di richieste alla tua app App Engine con Pub/Sub può comportare costi per l'app.
Quote
Le quote di Pub/Sub quotas sono diverse dalle quote delle code di attività. Come per le code di attività, l'invio di richieste alla tua app App Engine da Pub/Sub potrebbe influire sulle quote di richieste di App Engine richieste.
Prima della migrazione
Se non l'hai ancora fatto, configura il tuo ambiente di sviluppo Python in modo da utilizzare una versione di Python compatibile con Google Cloud, e installa gli strumenti di test per creare ambienti Python isolati.Le sezioni seguenti illustrano i passaggi di configurazione prima di eseguire la migrazione delle code in modalità pull a Pub/Sub.
Abilitazione dell'API Pub/Sub
Per abilitare l'API Pub/Sub, fai clic su Abilita nell' API Pub/Sub nella libreria API. Se vedi un pulsante Gestisci anziché un pulsante Abilita, significa che hai già abilitato l'API Pub/Sub per il tuo progetto e non devi farlo di nuovo.
Autenticazione dell'app nell'API Pub/Sub
Devi autenticare la tua app nell'API Pub/Sub. Questa sezione illustra l'autenticazione per due casi d'uso diversi.
Per sviluppare o testare l'app in locale, ti consigliamo di utilizzare un account di servizio. Per istruzioni su come configurare un account di servizio e connetterlo alla tua app, leggi Ottenere e fornire manualmente le credenziali dell'account di servizio.
Per eseguire il deployment dell'app su App Engine, non devi fornire una nuova autenticazione. Le credenziali predefinite dell'applicazione (ADC) deducono i dettagli di autenticazione per le app App Engine.
Download di Google Cloud CLI
Scarica e installa il Google Cloud CLI per utilizzare il gcloud CLI con l'API Pub/Sub se non l'hai installato in precedenza. Esegui il seguente comando dal terminale se hai già installato Google Cloud CLI.
gcloud components update
Importazione delle librerie client di Cloud
Segui questi passaggi per utilizzare la libreria client Python di Pub/Sub con l'app App Engine esistente:
Aggiorna il file
app.yaml. Segui le istruzioni per la tua versione di Python:Python 2
Per le app Python 2, aggiungi le versioni più recenti della libreria
grpcio.Di seguito è riportato un esempio di file
app.yaml:runtime: python27 threadsafe: yes api_version: 1 libraries: - name: grpcio version: latestPython 3
Per le app Python 3, specifica l'elemento
runtimenel fileapp.yamlcon una versione di Python 3 supportata. Ad esempio:runtime: python310 # or another support versionIl runtime Python 3 installa automaticamente le librerie, quindi non devi specificare le librerie integrate del runtime Python 2 precedente. Se la tua app Python 3 utilizza altri servizi in bundle legacy durante la migrazione, puoi continuare a specificare le librerie integrate necessarie. In caso contrario, puoi eliminare le righe non necessarie nel file
app.yaml.Aggiorna il file
requirements.txt. Segui le istruzioni per la tua versione di Python:Python 2
Aggiungi le librerie client di Cloud per Pub/Sub all'elenco delle dipendenze nel file
requirements.txt.google-cloud-pubsubQuindi esegui
pip install -t lib -r requirements.txtper aggiornare l'elenco delle librerie disponibili per la tua app.Python 3
Aggiungi le librerie client di Cloud per Pub/Sub all'elenco delle dipendenze nel file
requirements.txt.google-cloud-pubsubApp Engine installa automaticamente queste dipendenze durante il deployment dell'app nel runtime Python 3, quindi elimina la cartella
libse ne esiste una.Per le app Python 2, se la tua app utilizza librerie integrate o copiate, devi specificare questi percorsi nel file
appengine_config.py, che si trova nella stessa cartella del fileapp.yaml: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.pyriportato sopra presuppone che la directory di lavoro corrente sia quella in cui si trova la cartellalib. In alcuni casi, ad esempio nei test unità, la directory di lavoro corrente può essere diversa. Per evitare errori, puoi passare esplicitamente il percorso completo alla cartellalibutilizzando:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
Importa la libreria client Python di Pub/Sub in tutti i file che utilizzano le code in modalità pull dall'API delle code di attività:
from google.cloud import pubsub
Pub/Sub e code in modalità pull
Confronto delle funzioni
Pub/Sub invia il lavoro ai worker tramite una relazione publisher/sottoscrittore. Una sottoscrizione pull in Pub/Sub è simile a una coda in modalità pull nelle code di attività perché il sottoscrittore esegue il pull del messaggio dall'argomento. La tabella seguente elenca la funzionalità principale per le code in modalità pull nelle code di attività e la funzionalità associata per le sottoscrizioni in modalità pull in Pub/Sub.
| Funzionalità delle code di attività | Funzionalità di Pub/Sub |
|---|---|
| Coda | Argomento |
| Attività | Messaggio |
| Worker | Sottoscrittore |
Per saperne di più sull'architettura di Pub/Sub, leggi Cloud Pub/Sub: un servizio di messaggistica su scala Google.
Confronto dei flussi di lavoro
Di seguito è riportato un confronto tra un tipico workflow per una coda in modalità 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 in modalità pull | Crei l'argomento e sottoscrivi il sottoscrittore (ovvero il worker) a l'argomento |
| Crei e accodi l'attività | Crei il messaggio e lo pubblichi nell'argomento |
| Il worker acquisisce la lease dell'attività | Il sottoscrittore esegue il pull del 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 |
| La lease scade | L'argomento elimina il messaggio quando tutti i sottoscrittori lo hanno confermato |
Creazione di sottoscrizioni in modalità pull in Pub/Sub
Puoi utilizzare una sottoscrizione pull di Pub/Sub come una coda in modalità pull delle code di attività. Le sottoscrizioni a 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 in modalità pull delle code di attività come sottoscrizioni in modalità pull di Pub/Sub, crea un argomento per ogni worker e sottoscrivi solo il worker associato all'argomento. In questo modo, ogni messaggio viene elaborato da un solo worker, come nelle code di attività. Per scoprire come creare e gestire le sottoscrizioni in modalità pull, leggi Gestire argomenti e sottoscrizioni.
Eliminazione delle code in modalità pull
Dopo aver eseguito la migrazione delle code in modalità pull delle code di attività alle sottoscrizioni in modalità pull di Pub/Sub, eliminale dalle code di attività utilizzando il file queue.yaml. Ti consigliamo di eliminare ogni coda in modalità pull prima di eseguire la migrazione della successiva. In questo modo, l'app non duplica il lavoro ricevuto dalla nuova sottoscrizione in modalità pull di Pub/Sub durante la migrazione delle altre code in modalità pull. Tieni presente che l'eliminazione delle code in modalità pull delle code di attività una alla volta anziché in un singolo deployment potrebbe avere un impatto maggiore sulla quota di deployment di App Engine deployment.
Dopo aver eliminato tutte le code in modalità pull dalle code di attività, puoi omettere il file queue.yaml dai deployment futuri della tua app.
Se la tua app utilizza solo le code in modalità pull, rimuovi tutti i riferimenti all'API delle code di attività nel codice. Se la tua app utilizza sia le code in modalità pull sia le code in modalità push, puoi rimuovere i riferimenti all'API delle code di attività che si trovano nei file che utilizzano solo le code in modalità pull oppure attendere di aver eseguito la migrazione anche delle code in modalità push e poi rimuovere i riferimenti all'API delle code di attività da tutti i file.
Passaggi successivi
- Documentazione di Pub/Sub
- Migrazione delle code in modalità push
- Per un tutorial pratico, consulta il codelab Eseguire la migrazione dalle code in modalità pull delle code di attività di App Engine a Pub/Sub.