Molte app devono eseguire l'elaborazione in background al di fuori del contesto di una richiesta web. Questo tutorial crea un'app web che consente agli utenti di inserire il testo da tradurre e poi visualizza un elenco delle traduzioni precedenti. La traduzione viene eseguita in un processo in background per evitare di bloccare la richiesta dell'utente.
Il seguente diagramma illustra la procedura di richiesta di traduzione.
Di seguito è riportata la sequenza di eventi che descrive il funzionamento dell'app tutorial:
- Visita la pagina web per visualizzare un elenco delle traduzioni precedenti, archiviate in Firestore.
- Richiedi la traduzione di un testo inserendo un modulo HTML.
- La richiesta di traduzione viene pubblicata su Pub/Sub.
- Viene attivato un servizio Cloud Run iscritto a quell'argomento Pub/Sub.
- Il servizio Cloud Run utilizza Cloud Translation per tradurre il testo.
- Il servizio Cloud Run archivia il risultato in Firestore.
Questo tutorial è rivolto a chiunque sia interessato a scoprire di più sull'elaborazione in background con Google Cloud. Non è richiesta alcuna esperienza pregressa con Pub/Sub, Firestore e Cloud Run. Tuttavia, per comprendere tutto il codice, è utile avere una certa esperienza con Java e HTML.
Obiettivi
- Comprendere ed eseguire il deployment di un servizio Cloud Run.
- Prova l'app.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.
Prima di iniziare
- Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore, Pub/Sub, and Cloud Translation APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore, Pub/Sub, and Cloud Translation APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init -
Aggiorna i componenti di
gcloud:gcloud components update
- Prepara l'ambiente di sviluppo.
Preparazione dell'app
Nella finestra del terminale, clona il repository dell'app di esempio sulla tua macchina locale:
git clone https://github.com/GoogleCloudPlatform/getting-started-java.git
In alternativa puoi scaricare l'esempio come file ZIP ed estrarlo.
Passa alla directory che contiene il codice campione di elaborazione in background:
cd getting-started-java/background
Informazioni sull'app
L'app web è composta da due componenti principali:
- Un server HTTP Java per gestire le richieste web. Il server ha i seguenti due
endpoint:
/translateGET(utilizzando un browser web): mostra le 10 richieste di traduzione elaborate più recenti inviate dagli utenti.POST(con una sottoscrizione Pub/Sub): elabora le richieste di traduzione utilizzando l'API Cloud Translation e archivia i risultati in Firestore.
/create: Il modulo per inviare nuove richieste di traduzione.
- Client di servizio che elaborano le richieste di traduzione inviate tramite il modulo web. Esistono tre client che funzionano insieme:
- Pub/Sub: quando il modulo web viene inviato da un utente, il client Pub/Sub pubblica un messaggio con i dettagli della richiesta. Una sottoscrizione creata in questo tutorial inoltra questi messaggi all'endpoint Cloud Run che crei per eseguire le traduzioni.
- Traduzione: questo client gestisce le richieste Pub/Sub eseguendo le traduzioni.
- Firestore: al termine della traduzione, questo client
memorizza i dati della richiesta insieme alla traduzione in
Firestore. Questo client legge anche le richieste più recenti
sull'endpoint
/translateprincipale.
Informazioni sul codice Cloud Run
L'app Cloud Run ha dipendenze da Firestore, Translation e Pub/Sub.
I client globali Firestore, Translation e Pub/Sub vengono inizializzati in modo da poter essere riutilizzati tra le invocazioni. In questo modo, non devi inizializzare nuovi client per ogni chiamata, il che rallenterebbe l'esecuzione.
Il gestore dell'indice (
/) recupera tutte le traduzioni esistenti da Firestore e compila un modello HTML con l'elenco:Le nuove traduzioni vengono richieste inviando un modulo HTML. Il gestore della traduzione delle richieste, registrato in
/create, analizza l'invio del modulo, convalida la richiesta e pubblica un messaggio in Pub/Sub:La sottoscrizione Pub/Sub che crei inoltra queste richieste all'endpoint Cloud Run, che analizza il messaggio Pub/Sub per ottenere il testo da tradurre e la lingua di destinazione desiderata. L'API Translation traduce quindi la stringa nella lingua selezionata.
L'app archivia i dati di traduzione in un nuovo documento creato in Firestore.
Deployment dell'app Cloud Run
Scegli un nome argomento Pub/Sub e genera un token di verifica Pub/Sub utilizzando
uuidgeno un generatore UUID online come uuidgenerator.net. Questo token garantirà che l'endpoint Cloud Run accetti solo le richieste dalla sottoscrizione Pub/Sub che crei.export PUBSUB_TOPIC=background-translate export PUBSUB_VERIFICATION_TOKEN=your-verification-token
Crea un argomento Pub/Sub:
gcloud pubsub topics create $PUBSUB_TOPIC- Sostituisci
MY_PROJECTnel filepom.xmlcon l'ID progetto Google Cloud .
- Sostituisci
Crea e implementa un'immagine del tuo codice in GCR (un repository di immagini) con il plug-in Maven Jib.
mvn clean package jib:buildFai il deployment dell'app su Cloud Run:
gcloud run deploy background --image gcr.io/MY_PROJECT/background \ --platform managed --region us-central1 --memory 512M \ --update-env-vars PUBSUB_TOPIC=$PUBSUB_TOPIC,PUBSUB_VERIFICATION_TOKEN=$PUBSUB_VERIFICATION_TOKEN
Dove
MY_PROJECTè il nome del progettoGoogle Cloud che hai creato. Questo output comando restituisce l'endpoint a cui l'abbonamento Pub/Sub invia le richieste di traduzione. Prendi nota di questo endpoint, perché ti servirà per creare l'abbonamento Pub/Sub e lo visiterai in un browser per richiedere una nuova traduzione.
Test dell'app
Dopo aver eseguito il deployment del servizio Cloud Run, prova a richiedere una traduzione.
Per visualizzare l'app nel browser, vai all'endpoint Cloud Run che hai creato in precedenza.
Viene visualizzata una pagina con un elenco vuoto di traduzioni e un modulo per richiedere nuove traduzioni.
Fai clic su + Richiedi traduzione, compila il modulo di richiesta, quindi fai clic su Invia.
L'invio ti riporta automaticamente al percorso
/translate, ma la nuova traduzione potrebbe non essere ancora visualizzata. Per aggiornare la pagina, fai clic su Aggiorna refresh. Nell'elenco delle traduzioni è presente una nuova riga. Se non vedi una traduzione, attendi qualche altro secondo e riprova. Se continui a non vedere una traduzione, consulta la sezione successiva sul debug dell'app.
Debug dell'app
Se non riesci a connetterti al servizio Cloud Run o non vedi nuove traduzioni, controlla quanto segue:
Verifica che il comando
gcloud run deploysia stato completato correttamente e non abbia generato errori. Se sono stati rilevati errori (ad esempio,message=Build failed), correggili e riprova a eseguire il comando.Controlla la presenza di errori nei log:
Nella console Google Cloud , vai alla pagina Cloud Run.
Fai clic sul nome del servizio,
background.Fai clic su Log.
Esegui la pulizia
Elimina il progetto
- Nella console Google Cloud , vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
Elimina i servizi Cloud Run.
Elimina i servizi Cloud Run che hai creato in questo tutorial:
gcloud run services delete --region=$region background
Passaggi successivi
- Scopri di più su Cloud Run.
- Prova Cloud Run, che ti consente di eseguire container stateless in un ambiente completamente gestito o nel tuo cluster Google Kubernetes Engine.