Pub/Sub-Nachrichten schreiben und beantworten

Regions-ID

REGION_ID ist ein Abkürzungscode, den Google basierend auf 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 Regionen-IDs den häufig verwendeten Länder- und Provinzcodes ähneln. 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 wir Ihr Google Cloud-Projekt noch nicht aktualisiert haben, 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, sobald die Regions-ID für Ihre vorhandenen Anwendungen verfügbar ist.

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-Client-Bibliothek Pub/Sub-Nachrichten in einer PHP-App senden und empfangen können.

Vorbereitung

  • Folgen Sie der Anleitung unter "Hello, World!" für PHP in App Engine, um eine Umgebung und ein Projekt einzurichten. Darin erfahren Sie auch mehr über die Strukturierung von PHP-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.

Beispielanwendung klonen

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

git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
cd php-docs-samples/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_NAME
gcloud pubsub subscriptions create YOUR_SUBSCRIPTION_NAME \
    --topic YOUR_TOPIC_NAME

Umgebungsvariablen festlegen

Bearbeiten Sie die Datei index.php, um die Umgebungsvariablen für Ihr Thema und das Abo festzulegen:

$app['topic'] = 'php-example-topic';
$app['subscription'] = 'php-example-subscription';

Codeüberprüfung

In der Beispielanwendung kommt die Cloud-Clientbibliothek zum Einsatz.

Die Beispielanwendung verwendet die in der Datei app.yaml festgelegten Werte zum Konfigurieren von Umgebungsvariablen. Anhand dieser Werte bestätigt der Push-Anfragen-Handler, dass die Anfrage von Pub/Sub kommt und aus einer vertrauenswürdigen Quelle stammt:

runtime: php
env: flex

Die Beispielanwendung verwaltet eine globale Liste zum Speichern der von dieser Instanz empfangenen Nachrichten:

$messages = [];

Mit der pull-Methode werden Nachrichten aus dem von Ihnen erstellten Thema abgerufen und der Nachrichtenliste hinzugefügt:

// get PULL pubsub messages
$pubsub = new PubSubClient([
    'projectId' => $projectId,
]);
$subscription = $pubsub->subscription($subscriptionName);
$pullMessages = [];
foreach ($subscription->pull(['returnImmediately' => true]) as $pullMessage) {
    $pullMessages[] = $pullMessage;
    $messages[] = $pullMessage->data();
}
// acknowledge PULL messages
if ($pullMessages) {
    $subscription->acknowledgeBatch($pullMessages);
}

Mit der Methode publish werden neue Nachrichten für das Thema veröffentlicht:

if ($message = $request->get('message')) {
    // Publish the pubsub message to the topic
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $topic = $pubsub->topic($topicName);
    $response = $topic->publish(['data' => $message]);
    return new Response('', 204);
}

Beispiel lokal ausführen

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

Installieren Sie Abhängigkeiten mithilfe von Composer:

composer install

Legen Sie dann Umgebungsvariablen fest, bevor Sie Ihre Anwendung starten:

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.

Sie verwenden curl oder einen httpie-Client, um eine HTTP-Anfrage vom Typ POST zu senden:

Antwort

Nachdem die Anfrage abgeschlossen ist, können Sie localhost:8080 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:

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.