Pub/Sub-Nachrichten schreiben und beantworten

Regions-ID

REGION_ID ist ein abgekürzter Code, den Google anhand der Region zuweist, die Sie beim Erstellen Ihrer Anwendung ausgewählt haben. Der Code bezieht sich nicht auf ein Land oder eine Provinz, auch wenn einige Regions-IDs häufig verwendeten Länder- und Provinzcodes ähneln können. Das Einbinden von REGION_ID.r in App Engine-URLs ist für vorhandene Anwendungen optional und wird bald für alle neuen Anwendungen erforderlich sein.

Für einen reibungslosen Übergang wird App Engine nach und nach für die Verwendung von Regions-IDs aktualisiert. Wenn Ihr Google Cloud-Projekt noch nicht aktualisiert wurde, wird für Ihre Anwendung keine Regions-ID angezeigt. Da die ID für vorhandene Anwendungen optional ist, müssen Sie keine URLs aktualisieren oder andere Änderungen vornehmen, wenn die Regions-ID für Ihre vorhandenen Anwendungen verfügbar wird.

Hier finden Sie weitere Informationen zu Regions-IDs.

Pub/Sub bietet zuverlässiges und asynchrones m:n-Messaging zwischen Anwendungen. Publisher-Anwendungen können Nachrichten an ein bestimmtes Thema senden. Andere Anwendungen haben die Möglichkeit, dieses Thema zu abonnieren, um Nachrichten dazu zu erhalten.

In diesem Dokument wird beschrieben, wie Sie mit der Cloud-Clientbibliothek Pub/Sub-Nachrichten in einer .NET-Anwendung senden und empfangen.

Voraussetzungen

  • Folgen Sie der Anleitung unter „Hello, World!“ für .NET in App Engine, um eine Umgebung und ein Projekt einzurichten. Darin erfahren Sie auch mehr über die Strukturierung von .NET-Anwendungen in App Engine.
  • Notieren Sie sich Ihre Projekt-ID und bewahren Sie sie auf. Sie benötigen die ID zur Ausführung der in diesem Dokument beschriebenen Beispielanwendung.
* Wenn Sie die Anmeldedaten aus der Google Cloud Console herunterladen möchten, um ein Dienstkonto zu erstellen und Ihrer Anwendung den Dienstkontoschlüssel hinzuzufügen, führen Sie den auf GitHub beschriebenen Schritt 3 aus. *  Aktivieren Sie die Google Cloud Pub/Sub API.

Aktivieren Sie die API

Beispiel-App klonen

Kopieren Sie die Beispielanwendungen auf Ihren lokalen Computer und rufen Sie das Verzeichnis pubsub auf:

git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples
cd dotnet-docs-samples/appengine/flexible/pubsub

Thema und Abo erstellen

Erstellen Sie ein Thema und ein Abo, einschließlich des Endpunkts, an den der Pub/Sub-Server Anfragen senden soll:

gcloud pubsub topics create YOUR_TOPIC
gcloud pubsub subscriptions create YOUR_SUBSCRIPTION `
    --topic YOUR_TOPIC `
    --push-endpoint `
    https://YOUR_PROJECT_ID.REGION_ID.r.appspot.com/pubsub/push?token=YOUR_SECRET_TOKEN `
    --ack-deadline 10

Umgebungsvariablen festlegen

Legen Sie in der Datei appsettings.json die Projekt-ID fest:

{
  "Pubsub": {
    "ProjectId": "your-project-id",
    "VerificationToken": "your-secret-token",
    "TopicId": "your-topic",
    "SubscriptionId": "your-subscription"
  },

  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

Codeüberprüfung

In der Beispielanwendung kommt die Cloud-Clientbibliothek zum Einsatz.

[HttpGet]
[HttpPost]
public IActionResult Index(MessageForm messageForm)
{
    var model = new MessageList();
    if (!_options.HasGoodProjectId())
    {
        model.MissingProjectId = true;
        return View(model);
    }
    if (!string.IsNullOrEmpty(messageForm.Message))
    {
        // Publish the message.
        var pubsubMessage = new PubsubMessage()
        {
            Data = ByteString.CopyFromUtf8(messageForm.Message)
        };
        pubsubMessage.Attributes["token"] = _options.VerificationToken;
        _publisher.PublishAsync(pubsubMessage);
        model.PublishedMessage = messageForm.Message;
    }
    // Render the current list of messages.
    lock (s_lock) model.Messages = s_receivedMessages.ToArray();
    return View(model);
}

Beispiel lokal ausführen

Bei einer lokalen Ausführung können Sie sich über das Cloud SDK für die Nutzung von Google Cloud APIs authentifizieren. Wenn Sie Ihre Umgebung wie unter Vorbereitung beschrieben eingerichtet haben, ist die Authentifizierung bereits über den Befehl gcloud init erfolgt.

So führen Sie die Beispielanwendung lokal aus:

Visual Studio

  1. Öffnen Sie dotnet-docs-samples\appengine\flexible\AppEngineFlex.sln mit Visual Studio.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Pubsub und wählen Sie Debug > Neue Instanz starten aus.

Befehlszeile

  1. Führen Sie die folgenden Befehle im Verzeichnis dotnet-docs-samples\appengine\flexible\Pubsub aus:

    dotnet restore
    dotnet run
    
  2. Geben Sie im Webbrowser die folgende Adresse ein:

    http://localhost:5000/
    

Push-Benachrichtigungen simulieren

Die Anwendung kann Nachrichten lokal senden, aber keine Push-Nachrichten lokal empfangen. Sie können jedoch eine Push-Nachricht simulieren, wenn Sie eine HTTP-Anfrage an den lokalen Push-Benachrichtigungsendpunkt senden. Das Beispiel enthält die Datei sample_message.json.

So senden Sie eine HTTP-POST-Anfrage:

Get-Content -Raw .\sample_message.json | Invoke-WebRequest -Uri
http://localhost:5000/Push?token=your-secret-token -Method POST -ContentType
'text/json' -OutFile out.txt

Nachdem die Anfrage abgeschlossen ist, können Sie localhost:5000 aktualisieren und die Nachricht in der Liste der empfangenen Nachrichten sehen.

In App Engine ausführen

Führen Sie zum Bereitstellen der Demo-Anwendung in App Engine mit dem gcloud-Befehlszeilentool den folgenden Befehl in dem Verzeichnis aus, in dem sich die Datei app.yaml befindet:

Visual Studio

So stellen Sie die „Hello World“-Anwendung bereit:

  1. Öffnen Sie dotnet-docs-samples\appengine\flexible\AppEngineFlex.sln mit Visual Studio.
  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Pubsub und wählen Sie In Google Cloud veröffentlichen... aus.
  3. Klicken Sie auf App Engine Flex.
  4. Klicken Sie auf Veröffentlichen.

Befehlszeile

Führen Sie die folgenden Befehle im Verzeichnis dotnet-docs-samples\appengine\flexible\Pubsub aus:
dotnet restore
dotnet publish
cd bin\Debug\netcoreapp2.1\publish
gcloud app deploy

Sie können jetzt unter https://PROJECT_ID.REGION_ID.r.appspot.com auf die Anwendung zugreifen. Sie können das Formular zum Senden von Nachrichten verwenden, dabei ist jedoch nicht sicher, welche Instanz Ihrer Anwendung die Benachrichtigung erhält. Außerdem haben Sie die Möglichkeit, mehrere Nachrichten zu senden und die Seite zu aktualisieren, damit die empfangene Nachricht angezeigt wird.