Écrire des messages Pub/Sub et y répondre

Cloud Pub/Sub fournit une messagerie asynchrone fiable de type "plusieurs à plusieurs" entre applications. Les applications de type "éditeur" peuvent envoyer des messages dans un sujet et d'autres applications peuvent s'abonner à ce sujet pour recevoir les messages.

Ce document explique comment utiliser la bibliothèque cliente Google Cloud pour envoyer et recevoir des messages Cloud Pub/Sub dans une application exécutée dans l'environnement flexible.

Prérequis

  • Suivez les instructions de la section "Hello, World!" pour PHP sur App Engine afin de configurer votre environnement et votre projet et pour comprendre comment sont structurées les applications PHP App Engine.
  • Retenez et enregistrez votre ID de projet. Il vous servira à exécuter l'exemple d'application décrite dans ce document.

    Cloner l'exemple d'application

    Copiez les exemples d'applications sur votre ordinateur local et accédez au répertoire pubsub :

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

    Créez un sujet et un abonnement

    Créez un sujet et un abonnement, dans lesquels vous devez spécifier le point de terminaison auquel le serveur Pub/Sub doit envoyer des requêtes :

    gcloud pubsub topics create YOUR_TOPIC_NAME
    gcloud pubsub subscriptions create YOUR_SUBSCRIPTION_NAME \
        --topic YOUR_TOPIC_NAME
    

    Modifier le fichier php.index

    Modifiez le fichier php.index pour définir les variables d'environnement du sujet et de l'abonnement :

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

    Révision de code

    L'exemple d'application utilise les bibliothèques clientes Google Cloud.

    L'exemple d'application utilise les valeurs que vous avez définies dans le fichier app.yaml pour configurer les variables d'environnement. Le gestionnaire de requêtes push utilise ces valeurs pour confirmer que la requête provient de Pub/Sub et qu'une source de confiance est à l'origine de cette requête :

    runtime: php
    env: flex
    

    L'exemple d'application utilise une liste globale pour stocker les messages reçus par cette instance :

    $messages = [];
    

    La méthode pull récupère les messages du sujet que vous avez créé et les ajoute à la liste des messages :

    // 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);
    }

    La méthode publish publie des messages dans le sujet :

    if ($message = $app['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);
    }

    Exécuter l'exemple en local

    Lorsque vous exécutez l'exemple en local, vous pouvez utiliser le SDK Cloud pour fournir les éléments d'authentification permettant d'utiliser les API Google Cloud. Si vous avez configuré votre environnement conformément à la procédure décrite dans les Conditions préalables, vous avez déjà exécuté la commande gcloud init, qui permet de fournir ces éléments d'authentification.

    Installez les dépendances à l'aide de Composer :

    composer install
    

    Définissez ensuite les variables d'environnement avant de démarrer votre application :

    Simuler des notifications push

    L'application peut envoyer des messages en local, mais ne peut pas recevoir de messages en mode push. Vous pouvez toutefois simuler un message push en adressant une requête HTTP au point de terminaison de notification push local. L'exemple comprend le fichier sample_message.json.

    Vous pouvez utiliser curl ou httpie pour envoyer une requête HTTP POST :

    Ou

    http POST ":8080/pubsub/push?token=[your-token]" < sample_message.json
    

    Réponse :

    Une fois la requête traitée, vous pouvez actualiser localhost:8080 pour afficher le message dans la liste des messages reçus.

    Exécuter sur App Engine

    Pour déployer l'application de démonstration sur App Engine à l'aide de l'outil de ligne de commande gcloud, exécutez la commande suivante à partir du répertoire dans lequel se trouve le fichier app.yaml :

    gcloud app deploy
    

    Vous pouvez maintenant accéder à l'application à partir de l'adresse suivante : https://[YOUR_PROJECT_ID].appspot.com. Vous pouvez utiliser le formulaire pour envoyer des messages, mais vous ne pourrez pas savoir quelle instance de votre application recevra la notification. Vous pouvez envoyer plusieurs messages et actualiser la page pour afficher le message reçu.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Environnement flexible App Engine pour les documents PHP