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 testo per tradurre, quindi mostra un elenco di traduzioni precedenti. La traduzione viene eseguita in background per evitare di bloccare la richiesta dell'utente.
Il seguente diagramma illustra il processo di richiesta di traduzione.
Ecco la sequenza degli eventi per come funziona l'app del tutorial:
- Visita la pagina web per visualizzare un elenco di traduzioni precedenti, archiviate inFistore.
- Richiedi una traduzione del testo inserendo un modulo HTML.
- La richiesta di traduzione viene pubblicata in Pub/Sub.
- Viene attivato un servizio Cloud Run sottoscritto a tale 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 conoscere l'elaborazione in background con Google Cloud. Non sono richieste esperienze precedenti con Pub/Sub, Firestore e Cloud Run. Tuttavia, per comprendere tutto il codice, è utile avere esperienza con Java e HTML.
Obiettivi
- Capire ed eseguire il deployment di un servizio Cloud Run.
- Prova l'app.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Firestore, Pub/Sub, and Cloud Translation APIs.
- Install the Google Cloud CLI.
-
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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Firestore, Pub/Sub, and Cloud Translation APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Aggiorna i componenti
gcloud
:gcloud components update
- Prepara l'ambiente di sviluppo.
Preparazione dell'app in corso...
Nella finestra del terminale, clona il repository dell'app di esempio nella 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 contenente il codice di esempio per l'elaborazione in background:
cd getting-started-java/background
Comprendere l'app
Esistono due componenti principali per l'app web:
- Un server HTTP Java per gestire le richieste web. Il server ha i seguenti due endpoint:
/translate
GET
(utilizzando un browser web): visualizza le 10 richieste di traduzione elaborate più di recente inviate dagli utenti.POST
(con un abbonamento 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 dal modulo web. Ci sono tre clienti che lavorano 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 i messaggi all'endpoint di Cloud Run che hai creato per eseguire le traduzioni.
- Traduzione: questo client gestisce le richieste Pub/Sub eseguendo le traduzioni.
- Firestore: quando la traduzione è stata completata, questo client
archivia i dati della richiesta insieme alla traduzione in
Firestore. Questo client legge anche le richieste più recenti sull'endpoint
/translate
principale.
Informazioni sul codice Cloud Run
L'app Cloud Run dipende dalle librerie, Translation e Pub/Sub.
I client globali di Firestore, Translation e Pub/Sub vengono inizializzati, quindi possono essere riutilizzati tra le chiamate. In questo modo, non dovrai inizializzare nuovi client per ogni chiamata, rallentando l'esecuzione.
Il gestore di indici (
/
) recupera tutte le traduzioni esistenti daFistore e inserisce un modello HTML con l'elenco:Per le nuove traduzioni viene inviato un modulo HTML. Il gestore di traduzione delle richieste, registrato all'indirizzo
/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 di Cloud Run, che analizza il messaggio Pub/Sub per ottenere la traduzione del testo e la lingua di destinazione desiderata. L'API Translation traduce la stringa nella lingua selezionata.
L'app archivia i dati di traduzione in un nuovo documento che crea inFirestore.
Deployment dell'app Cloud Run
Scegli un nome per l'argomento Pub/Sub e genera un token di verifica Pub/Sub utilizzando
uuidgen
oppure un generatore UUID online come uuidgenerator.net. Questo token garantirà che l'endpoint Cloud Run accetti solo le richieste dall'abbonamento 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_PROJECT
nel filepom.xml
con l'ID progetto Cloud.
- Sostituisci
Crea e sottoponi a deployment un'immagine del tuo codice in GCR (un repository di immagini) con il plug-in Jib Maven.
mvn clean package jib:build
Esegui 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 progetto cloud che hai creato. Questo comando genera l'endpoint in cui l'abbonamento Pub/Sub esegue il push delle 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 di Cloud Run che hai creato in precedenza.
C'è una pagina con un elenco di traduzioni vuoto e un modulo per richiedere nuove traduzioni.
Fai clic su + Richiedi traduzione, compila il modulo di richiesta e fai clic su Invia.
Il compito ti torna automaticamente al percorso
/translate
, ma la nuova traduzione potrebbe non essere ancora visualizzata. Per aggiornare la pagina, fai clic su Aggiorna refresh. C'è una nuova riga nell'elenco di traduzioni. Se non vedi una traduzione, attendi qualche secondo e riprova. Se non riesci ancora a visualizzare una traduzione, consulta la sezione successiva sul debug dell'app.
Esecuzione del debug dell'app
Se non riesci a connetterti al servizio Cloud Run o a non visualizzare nuove traduzioni, verifica quanto segue:
Controlla che il comando
gcloud run deploy
sia stato completato correttamente e che non abbia restituito errori. Se si sono verificati errori (ad esempio,message=Build failed
), correggili e riprova a eseguire l'esecuzione.Verifica la presenza di errori nei log:
In Google Cloud Console, vai alla pagina Cloud Run.
Fai clic sul nome del servizio
background
.Fai clic su Log.
Esegui la pulizia
Elimina il progetto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimina i servizi Cloud Run.
Elimina i servizi Cloud Run creati in questo tutorial:
gcloud run services delete --region=$region background
Passaggi successivi
- Scopri di più su Cloud Run.
- Prova Cloud Run, che consente di eseguire container stateless in un ambiente completamente gestito o nel tuo cluster Google Kubernetes Engine.