ID regione
Il REGION_ID
è un codice abbreviato che Google assegna
in base alla regione selezionata durante la creazione dell'app. Il codice non
corrisponde a un paese o a una provincia, anche se alcuni ID regione possono sembrare
simili ai codici di paesi e province di uso comune. Per le app create dopo
febbraio 2020, REGION_ID.r
è incluso negli
URL App Engine. Per le app esistenti create prima di questa data, l'ID regione è facoltativo nell'URL.
Scopri di più sugli ID regione.
Pub/Sub fornisce una messaggistica asincrona affidabile e many-to-many tra le applicazioni. Le applicazioni publisher possono inviare messaggi a un argomento e altre applicazioni possono iscriversi all'argomento per ricevere i messaggi.
Questo documento descrive come utilizzare la libreria client Cloud per inviare e ricevere messaggi Pub/Sub in un'app Java 8.
Prerequisiti
- Segui le istruzioni riportate in "Hello, World!" per Java 8 su App Engine per configurare l'ambiente e il progetto e per capire come sono strutturate le app Java 8 di App Engine.
- Annota e salva l'ID progetto, perché ti servirà per eseguire l'applicazione di esempio descritta in questo documento.
Clonazione dell'app di esempio
Copia le app di esempio sulla tua macchina locale e vai alla directory pubsub
:
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/appengine-java8/pubsub
Creazione di un argomento e di una sottoscrizione
Crea un argomento e una sottoscrizione, specificando l'endpoint a cui il server Pub/Sub deve inviare le richieste:
bv # Configure the topic gcloud pubsub topics create YOUR_TOPIC_NAME # Configure the push subscription gcloud pubsub subscriptions create YOUR_SUBSCRIPTION_NAME \ --topic=YOUR_TOPIC_NAME \ --push-endpoint=https://YOUR_PROJECT_ID.REGION_ID.r.appspot.com/push-handlers/receive_messages?token=YOUR_TOKEN \ --ack-deadline=10
Sostituisci YOUR_TOKEN
con un token casuale segreto. L'endpoint push lo utilizza per verificare le richieste.
Per utilizzare Pub/Sub con l'autenticazione, crea un'altra sottoscrizione:
# Configure the push subscription gcloud pubsub subscriptions create YOUR_SUBSCRIPTION_NAME \ --topic=YOUR_TOPIC_NAME \ --push-auth-service-account=YOUR-SERVICE-ACCOUNT-EMAIL\ --push-auth-token-audience=OPTIONAL_AUDIENCE_OVERRIDE\ --push-endpoint=https://YOUR_PROJECT_ID.REGION_ID.r.appspot.com/push-handlers/receive_messages?token=YOUR_TOKEN \ --ack-deadline=10 # Your service agent # `service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com` needs to have the # `iam.serviceAccountTokenCreator` role. PUBSUB_SERVICE_ACCOUNT="service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${PUBSUB_SERVICE_ACCOUNT}"\ --role='roles/iam.serviceAccountTokenCreator'
Sostituisci YOUR-SERVICE-ACCOUNT-EMAIL
con l'email del tuo service account.
Imposta le variabili di ambiente
Modifica il file
appengine-web.xml
per impostare le variabili di ambiente per l'argomento
e il token di verifica:
Revisione del codice
L'app di esempio utilizza la libreria client di Cloud.L'app di esempio utilizza i valori impostati nel file
appengine-web.xml
per
configurare le variabili di ambiente. Il gestore delle richieste push utilizza questi valori per
confermare che la richiesta proviene da Pub/Sub e da una fonte attendibile:
String pubsubVerificationToken = System.getenv("PUBSUB_VERIFICATION_TOKEN");
L'app di esempio gestisce un'istanza del database Cloud Datastore per archiviare i messaggi.
La servlet PubSubPush
riceve i messaggi push e li aggiunge all'istanza del database messageRepository
:
La servlet PubSubPublish
interagisce con l'app web App Engine per
pubblicare nuovi messaggi e visualizzare i messaggi ricevuti:
Esecuzione del campione in locale
Quando esegui l'app localmente, puoi utilizzare Google Cloud CLI per fornire l'autenticazione
per utilizzare le API Google Cloud. Supponendo che tu abbia configurato l'ambiente come descritto in
Prerequisiti, hai già eseguito il comando gcloud init
,
che fornisce questa autenticazione.
mvn clean package
Quindi imposta le variabili di ambiente prima di avviare l'applicazione:
export PUBSUB_VERIFICATION_TOKEN=[your-verification-token]
export PUBSUB_TOPIC=[your-topic]
mvn appengine:run
Simulazione delle notifiche push
L'applicazione può inviare messaggi localmente, ma non è in grado di ricevere notifiche push
localmente. Tuttavia, puoi simulare un messaggio push effettuando una richiesta HTTP
all'endpoint di notifica push locale. Il campione include il file
sample_message.json
.
Puoi utilizzare curl
o
un client httpie
per
inviare una richiesta HTTP POST
:
curl -H "Content-Type: application/json" -i --data @sample_message.json "localhost:8080/pubsub/push?token=[your-token]"
Oppure
http POST ":8080/pubsub/push?token=[your-token]" < sample_message.json
Risposta:
HTTP/1.1 200 OK
Date: Wed, 26 Apr 2017 00:03:28 GMT
Content-Length: 0
Server: Jetty(9.3.8.v20160314)
Al termine della richiesta, puoi aggiornare localhost:8080
e visualizzare il messaggio nell'elenco dei messaggi ricevuti.
Esecuzione su App Engine
Per eseguire il deployment dell'app demo in App Engine utilizzando lo strumento a riga di comando gcloud
, esegui il comando seguente dalla directory in cui si trova pom.xml
:
mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID
Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud . Se il
tuo file pom.xml
specifica già
l'ID progetto, non devi includere la proprietà -Dapp.deploy.projectId
nel
comando che esegui.
Ora puoi accedere all'applicazione all'indirizzo
https://PROJECT_ID.REGION_ID.r.appspot.com
.
Puoi utilizzare il modulo per inviare messaggi, ma non è garantito quale
istanza della tua applicazione riceverà la notifica. Puoi inviare
più messaggi e aggiornare la pagina per visualizzare il messaggio ricevuto.