Viele Anwendungen müssen eine Hintergrundverarbeitung außerhalb des Kontexts einer Webanfrage ausführen. In dieser Anleitung wird eine Webanwendung erstellt, mit der Nutzer Text eingeben können, der übersetzt werden soll. Anschließend wird eine Liste früherer Übersetzungen angezeigt. Die Übersetzung erfolgt in einem Hintergrundprozess, um die Anfrage des Nutzers nicht zu blockieren.
Das folgende Diagramm veranschaulicht den Ablauf der Übersetzungsanfrage.
Wie die in dieser Anleitung verwendete Anwendung funktioniert, sehen Sie an der Abfolge der Ereignisse:
- Die Webseite wird aufgerufen, um eine Liste früherer Übersetzungen anzuzeigen, die in Firestore gespeichert sind.
- Die Übersetzung eines Textes wird angefordert. Dazu wird ein HTML-Formular ausgefüllt.
- Die Übersetzungsanfrage wird in Pub/Sub veröffentlicht.
- Ein Cloud Run-Dienst, der dieses Pub/Sub-Thema abonniert hat, wird ausgelöst.
- Der Cloud Run-Dienst übersetzt den Text mit Cloud Translation.
- Der Cloud Run-Dienst speichert das Ergebnis in Firestore.
Diese Anleitung richtet sich an alle, die mehr über die Hintergrundverarbeitung mit Google Cloud erfahren möchten. Es sind keine Vorkenntnisse in Pub/Sub, Firestore, App Engine oder Cloud Functions erforderlich. Etwas Erfahrung mit .NET, JavaScript und HTML ist allerdings hilfreich, um den gesamten Code zu verstehen.
Lernziele
- Cloud Run-Dienste verstehen und bereitstellen
- Anwendung testen
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweis
- 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, Cloud Run, 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, Cloud Run, Pub/Sub, and Cloud Translation APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Aktualisieren Sie die
gcloud
-Komponenten:gcloud components update
- Bereiten Sie die Entwicklungsumgebung vor.
Anwendung vorbereiten
Klonen Sie das Beispiel-App-Repository in Ihrem Terminalfenster auf Ihren lokalen Computer:
git clone https://github.com/GoogleCloudPlatform/getting-started-dotnet.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Wechseln Sie in das Verzeichnis, das den Beispielcode der Hintergrundaufgabe enthält:
cd getting-started-dotnet/BackgroundProcessing
Grundlegendes zum TranslateWorker
-Dienst
Der Dienst beginnt mit dem Import mehrerer Abhängigkeiten wie Firestore und Translation.
Die Firestore- und Translation-Clients werden initialisiert, damit sie zwischen Handleraufrufen wiederverwendet werden können. Auf diese Weise müssen Sie nicht bei jedem Aufruf neue Clients initialisieren, was die Ausführung verlangsamen würde.
Die Translation API übersetzt den String in die von Ihnen ausgewählte Sprache.
Der Konstruktor des Controllers empfängt die Firestore- und Pub/Sub-Clients.
Die Methode
Post
parst die Pub/Sub-Nachricht, um den zu übersetzenden Text abzurufen. Die Nachrichten-ID wird als eindeutiger Name für die Übersetzungsanfrage verwendet, um sicherzustellen, dass keine doppelten Übersetzungen gespeichert werden.
TranslateWorker
-Dienst bereitstellen
Führen Sie im Verzeichnis
BackgroundProcessing
das PowerShell-Skript aus, um den Dienst zu erstellen und in Cloud Run bereitzustellen:PublishTo-CloudRun.ps1
Grundlegendes zum PublishTo-CloudRun.ps1
-Skript
Das Skript PublishTo-CloudRun.ps1
veröffentlicht den Dienst in Cloud Run und schützt den TranslateWorker-Dienst vor Missbrauch. Wenn der Dienst alle eingehenden Verbindungen zulässt, könnte jeder beliebige Übersetzungsanfragen an den Controller senden und so Kosten verursachen. Daher richten Sie den Dienst so ein, dass er nur POST
-Anfragen von Pub/Sub akzeptiert.
Das Skript tut Folgendes:
- Erstellt die Anwendung lokal mit
dotnet publish
. - Erstellt einen Container, in dem die Anwendung mit Cloud Build ausgeführt wird.
- Stellt die Anwendung für Cloud Run bereit.
- Ermöglicht dem Projekt das Erstellen von Pub/Sub-Authentifizierungstokens.
- Erstellt ein Dienstkonto, das die Pub/Sub-Aboidentität darstellt.
- Gewährt dem Dienstkonto die Berechtigung, den Dienst
TranslateWorker
aufzurufen. Erstellt ein Pub/Sub-Thema und ein Abo.
Grundlegendes zum TranslateUI
-Dienst
Der Dienst TranslateUI
rendert eine Webseite, auf der aktuelle Übersetzungen angezeigt werden, und akzeptiert Anfragen für neue Übersetzungen.
Die Klasse
StartUp
konfiguriert eine ASP.NET-Anwendung und erstellt Pub/Sub- und Firestore-Clients.Der Index-Handler
Index
ruft alle vorhandenen Übersetzungen aus Firestore ab und füllt eineViewModel
mit der Liste:Neue Übersetzungen werden durch Senden eines HTML-Formulars angefordert. Der Übersetzungsanfrage-Handler validiert die Anfrage und veröffentlicht eine Nachricht an Pub/Sub:
TranslateUI
-Dienst bereitstellen
Führen Sie im Verzeichnis
BackgroundProcessing
das PowerShell-Skript aus, um den Dienst zu erstellen und in Cloud Run bereitzustellen:./PublishTo-CloudRun.ps1
Grundlegendes zum PublishTo-CloudRun.ps1
-Skript
Das Skript PublishTo-CloudRun.ps1
veröffentlicht die Anwendung in Cloud Run.
Das Skript tut Folgendes:
- Erstellt die Anwendung lokal mit
dotnet publish
. - Erstellt einen Container, in dem die Anwendung mit Cloud Build ausgeführt wird.
Stellt die Anwendung für Cloud Run bereit.
Anwendung testen
Fordern Sie nach erfolgreicher Ausführung des Skripts PublishTo-CloudRun.ps1
eine Übersetzung an.
Der letzte Befehl im Skript
PublishTo-CloudRun.ps1
gibt die URL für Ihren UI-Dienst an. Suchen Sie im Terminalfenster die URL für den DienstTranslateUI
:gcloud beta run services describe translate-ui --region $region --format="get(status.address.hostname)"
Rufen Sie in Ihrem Browser die URL aus dem vorherigen Schritt auf.
Sie sehen eine Seite mit einer leeren Liste von Übersetzungen und einem Formular zum Anfordern neuer Übersetzungen.
Geben Sie im Feld Text to translate (Zu übersetzender Text) einen Text ein, der übersetzt werden soll, z. B.
Hello, World.
.Klicken Sie auf Senden.
Klicken Sie zum Aktualisieren der Seite auf Aktualisierenrefresh. Die Übersetzungsliste enthält jetzt eine neue Zeile. Wenn Sie keine Übersetzung sehen, warten Sie einige Sekunden und versuchen es dann noch einmal. Ist immer noch keine Übersetzung zu sehen, lesen Sie den nächsten Abschnitt zum Debugging der Anwendung.
Fehler in der Anwendung beheben
Wenn Sie keine Verbindung zu Ihrem Cloud Run-Dienst herstellen können oder keine neuen Übersetzungen sehen, prüfen Sie Folgendes:
Prüfen Sie, ob das Skript
PublishTo-CloudRun.ps1
erfolgreich ausgeführt wurde und keine Fehler ausgegeben hat. Wenn Fehler aufgetreten sind (z. B.message=Build failed
), beheben Sie diese und versuchen Sie es noch einmal.Prüfen Sie die Logs auf Fehler:
Rufen Sie in der Google Cloud Console die Seite „Cloud Run“ auf.
Klicken Sie auf den Dienstnamen,
translate-ui
.Klicken Sie auf Logs.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Google Cloud-Projekt löschen
- 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.
Cloud Run-Dienste löschen.
Löschen Sie die Cloud Run-Dienste, die Sie in dieser Anleitung erstellt haben:
gcloud beta run services delete --region=$region translate-ui
gcloud beta run services delete --region=$region translate-worker