ID regione
REGION_ID
è un codice abbreviato assegnato da Google in base alla regione selezionata al momento della creazione dell'app. Non corrisponde a un paese o a una provincia, anche se alcuni ID regione possono apparire simili ai codici di paese e provincia di uso comune. Per le app create dopo febbraio 2020, REGION_ID.r
è incluso negli URL di 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 messaggi asincroni affidabili, many-to-many, tra le applicazioni. Le applicazioni del publisher possono inviare messaggi a un argomento, mentre le altre applicazioni possono sottoscrivere quell'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 nella sezione "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.
- Prendi nota 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 nella 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, che includa la specifica dell'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 del secret. L'endpoint push utilizza questo metodo 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 Google-managed service account # `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'indirizzo email del tuo [account di servizio](/appengine/docs/pdfs/configure-service-accounts). ### Impostazione delle variabili di ambiente {: edit_appyaml} 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 Cloud](https://googleapis.dev/java/google-cloud-clients/latest/index.html){: class="external"}. 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 provenga da Pub/Sub e che abbia avuto origine da una fonte attendibile: String pubsubVerificationToken = System.getenv("PUBSUB_VERIFICATION_TOKEN"); L'app di esempio gestisce un'istanza di database Cloud Datastore per archiviare i messaggi. Il servlet "PubSubPush" riceve i messaggi inviati tramite push e li aggiunge all'istanza di database "messageRepository": Il servlet "PubSubPubblica" interagisce con l'app web App Engine per pubblicare nuovi messaggi e visualizzare i messaggi ricevuti: ## Esecuzione dell'esempio in locale {: #run_the_sample_locally} Quando viene eseguita in locale, puoi utilizzare Google Cloud CLI per fornire l'autenticazione per l'utilizzo delle API Google Cloud. Supponendo che tu abbia configurato l'ambiente come descritto nella sezione [Prerequisiti](#prerequisites), 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_Verifica_TOKEN=[your-verification-token] esportazione PUBSUB_TOPIC=[your-topic] mvn appengine:run ### Simulazione di notifiche push {: simulate_push_notifications} L'applicazione può inviare messaggi in locale, ma non è in grado di ricevere le notifiche push in locale. Tuttavia, puoi simulare un messaggio push inviando una richiesta HTTP all'endpoint di notifica push locale. L'esempio include il file "sample_message.json" e il client "sample_message.json" per inviare una richiesta HTTP 'POST1': curl -H "Content-Type: application/token0" -i --data @sample_message8.8 per inviare una richiesta HTTP 'POST1': curl -H "Content-Type: application/token0" -i --data @sample_message8.8 ## Esecuzione su App Engine {: #run_on_app_engine} Per eseguire il deployment dell'app demo in App Engine utilizzando lo strumento a riga di comando "gcloud", esegui questo comando dalla directory in cui si trova il file "pom.xml":
mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID
Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud. Se il file pom.xml
specifica già il tuo ID progetto, non è necessario 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 vi è alcuna garanzia di quale istanza della tua richiesta riceverà la notifica. Puoi inviare più messaggi e aggiornare la pagina per vedere il messaggio ricevuto.