Per sviluppare e testare la tua applicazione in locale, puoi utilizzare Pub/Sub che fornisce l'emulazione locale del servizio Pub/Sub di produzione. Esegui Pub/Sub con Google Cloud CLI.
Per eseguire l'applicazione sull'emulatore, avvia innanzitutto e impostare le variabili di ambiente. La tua applicazione deve comunicare con l'emulatore anziché con il servizio Pub/Sub di produzione. La le risorse create e i messaggi pubblicati nell'emulatore vengono mantenuti della sessione dell'emulatore.
Prima di iniziare
Completa i seguenti prerequisiti prima di utilizzare Pub/Sub emulatore:
Configura un ambiente di sviluppo Python.
Installa un JDK.
Installa Google Cloud CLI.
Crea un'applicazione utilizzando le librerie client di Cloud.
Installa l'emulatore
Installa l'emulatore da un prompt dei comandi:
gcloud components install pubsub-emulator gcloud components update
Installa l'emulatore come immagine container
Per installare ed eseguire l'emulatore come container, scarica e installa immagine Docker gCloud.
Avvio dell'emulatore
Avvia l'emulatore richiamando pubsub start
da un prompt dei comandi. Prima del giorno
comando, sostituisci PUBSUB_PROJECT_ID con
ID progetto Google Cloud.
stringa. La stringa non deve necessariamente
rappresentano un vero e proprio progetto Google Cloud perché
L'emulatore Pub/Sub viene eseguito in locale.
gcloud beta emulators pubsub start --project=PUBSUB_PROJECT_ID [options]
Vedi gcloud beta emulators pubsub start
per un elenco completo delle segnalazioni.
Dopo aver avviato l'emulatore, viene visualizzato un messaggio simile al seguente:
... [pubsub] This is the Pub/Sub fake. [pubsub] Implementation may be incomplete or differ from the real system. ... [pubsub] INFO: Server started, listening on 8085
Questo messaggio indica che il server Pub/Sub viene eseguito nell'endpoint dell'emulatore sulla macchina locale anziché sull'endpoint Google Cloud. Tutte le operazioni avvengono localmente, tra cui:
- Creazione di un argomento o di una sottoscrizione
- In fase di pubblicazione
- Sottoscrizione in corso
Imposta le variabili di ambiente
Dopo aver avviato l'emulatore, devi impostare le variabili di ambiente in modo che si connette all'emulatore anziché a Pub/Sub. Imposta di queste variabili di ambiente sullo stesso computer che utilizzi per eseguire l'applicazione.
Devi impostare le variabili di ambiente a ogni avvio dell'emulatore. La dipendono da numeri di porta assegnati dinamicamente che potrebbero cambia quando riavvii l'emulatore.
Impostazione automatica delle variabili
Se la tua applicazione e l'emulatore vengono eseguiti sullo stesso computer, puoi impostare automaticamente le variabili di ambiente:
Linux / MacOS
Esegui env-init
utilizzando la sostituzione dei comandi:
$(gcloud beta emulators pubsub env-init)
Windows
Crea ed esegui un file batch utilizzando l'output da env-init
:
gcloud beta emulators pubsub env-init > set_vars.cmd && set_vars.cmd
La tua applicazione si connetterà all'emulatore Pub/Sub.
Impostare manualmente le variabili
Se la tua applicazione e l'emulatore sono eseguiti su macchine diverse, imposta il valore le variabili di ambiente manualmente:
Esegui il comando
env-init
:gcloud beta emulators pubsub env-init
Sulla macchina che esegue la tua applicazione, imposta
PUBSUB_EMULATOR_HOST
e variabile di ambiente valore come indicato dall'output dell'elementoenv-init
. Questa configurazione connette l'applicazione all'emulatore. Facoltativamente, puoi impostare l'ambientePUBSUB_PROJECT_ID
per il progetto che vuoi utilizzare per l'emulatore.Linux / MacOS export PUBSUB_EMULATOR_HOST=[::1]:8432 export PUBSUB_PROJECT_ID=my-project-id
Windows set PUBSUB_EMULATOR_HOST=[::1]:8432 set PUBSUB_PROJECT_ID=my-project-id
La tua applicazione si connetterà all'emulatore Pub/Sub.
Nota: se utilizzi l'API Python App Engine Standard locale di sviluppo software, devi passare questa variabile di ambiente alla riga di comando nel modo seguente:
dev_appserver.py app.yaml --env_var PUBSUB_EMULATOR_HOST=${PUBSUB_EMULATOR_HOST}
dev_appserver.py
è incluso in [PATH_TO_CLOUD_SDK]/google-cloud-sdk/bin/dev_appserver.py
.
Utilizzo dell'emulatore
Per utilizzare l'emulatore, devi avere un'applicazione creata utilizzando le librerie client di Cloud.
L'emulatore non supporta la console Google Cloud o gcloud pubsub
tramite comandi SQL.
L'esempio seguente mostra l'uso dell'emulatore e di un'applicazione che utilizza Libreria client Cloud Python per eseguire varie operazioni. Esempi di queste operazioni includono: creare un argomento, pubblicare e leggere messaggi.
Completa i seguenti passaggi sulla macchina in cui hai impostato l'emulatore variabili di ambiente:
Recupera gli esempi Python di Pub/Sub da GitHub clonando l'intero repository Python.
Nel repository clonato, vai alla directory
samples/snippets
. I passaggi rimanenti sono completati in questa directory.Dalla directory
samples/snippets
, installa le dipendenze necessarie per eseguire l'esempio:pip install -r requirements.txt
Crea un argomento:
python publisher.py PUBSUB_PROJECT_ID create TOPIC_ID
(Facoltativo) Se non disponi di un endpoint push locale Per testare le sottoscrizioni push nell'emulatore, completa i seguenti passaggi per crearne uno su
http://[::1]:3000/messages
.- Installa JSON Server.
npm install -g json-server
- Avvia JSON Server.
json-server --port 3000 --watch db.json
dovedb.json
contiene il seguente codice iniziale:{ "messages": [] }
- Nel prossimo passaggio, annota
http://[::1]:3000/messages
per PUSH_ENDPOINT.
- Installa JSON Server.
Crea una sottoscrizione all'argomento:
Crea una sottoscrizione pull:
python subscriber.py PUBSUB_PROJECT_ID create TOPIC_ID SUBSCRIPTION_ID
Crea una sottoscrizione push:
python subscriber.py PUBSUB_PROJECT_ID create-push TOPIC_ID SUBSCRIPTION_ID \ PUSH_ENDPOINT
Pubblica messaggi nell'argomento:
python publisher.py PUBSUB_PROJECT_ID publish TOPIC_ID
Leggi i messaggi pubblicati nell'argomento:
Recupera i messaggi dalla sottoscrizione pull:
python subscriber.py PUBSUB_PROJECT_ID receive SUBSCRIPTION_ID
Osserva i messaggi recapitati al tuo endpoint push locale. Ad esempio, i messaggi hanno questo aspetto:
{ "messages": [ { "subscription": "projects/PUBSUB_PROJECT_ID/subscriptions/SUBSCRIPTION_ID", "message": { "data": "TWVzc2FnZSBudW1iZXIgMQ==", "messageId": "10", "attributes": {} }, "id": 1 }, ... ] }
Accesso alle variabili di ambiente
In tutti i linguaggi, ad eccezione di Java e C#, se hai impostato PUBSUB_EMULATOR_HOST
come descritto in Impostare le variabili di ambiente,
le librerie client di Pub/Sub chiamano automaticamente l'API in esecuzione
locale anziché Pub/Sub.
Tuttavia, le librerie client C# e Java richiedono la modifica del codice per utilizzare emulatore:
C#
Prima di provare questo esempio, segui le istruzioni per la configurazione di C# nel Guida rapida di Pub/Sub con librerie client. Per ulteriori informazioni, consulta API Pub/Sub C# documentazione di riferimento.
Per eseguire l'autenticazione su Pub/Sub, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Java
Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nel Guida rapida di Pub/Sub con librerie client. Per ulteriori informazioni, consulta API Pub/Sub Java documentazione di riferimento.
Per eseguire l'autenticazione su Pub/Sub, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Arresto dell'emulatore
Per arrestare l'emulatore, premi Ctrl+C.
Dopo aver arrestato l'emulatore, esegui questo comando per rimuoverlo
la variabile di ambiente PUBSUB_EMULATOR_HOST
, in modo che l'applicazione
connettiti a Pub/Sub:
unset PUBSUB_EMULATOR_HOST
set PUBSUB_EMULATOR_HOST=
Argomenti della riga di comando dell'emulatore
Per maggiori dettagli sugli argomenti della riga di comando per l'emulatore Pub/Sub, consulta
gcloud beta emulators pubsub
Funzionalità supportate
L'emulatore supporta le seguenti funzionalità di Pub/Sub:
- Pubblicazione di messaggi
- Ricezione di messaggi da sottoscrizioni push e pull
- Ordinamento dei messaggi
- Ripetizione della visione dei messaggi
- Inoltro dei messaggi ad argomenti messaggi non recapitabili
- Nuovi criteri per la consegna dei messaggi
- Supporto di schema per Avro
Limitazioni note
- Le RPC
UpdateTopic
eUpdateSnapshot
non sono supportate. - Le operazioni IAM non sono supportate.
- La conservazione dei messaggi configurabile non è supportata. tutti i messaggi vengono conservati a tempo indeterminato.
- La scadenza dell'abbonamento non è supportata. Gli abbonamenti non hanno scadenza.
- I filtri non sono supportati.
- Supporto dello schema per i buffer di protocollo.
- È possibile creare sottoscrizioni BigQuery, ma non inviare messaggi a in BigQuery.
- La ricerca di un timestamp per gli abbonamenti ordinati non è supportata.
Per segnalare problemi, invia un Issue Tracker pubblico.
Passaggi successivi
- Per scoprire come utilizzare l'emulatore Pub/Sub con minikube, consulta questo post del blog.