Cette page a été traduite par l'API Cloud Translation.
Switch to English

Créer un système Pub/Sub un à plusieurs

Introduction

Ce tutoriel vous accompagne dans la configuration d'un ensemble simple d'applications qui communiquent en envoyant des messages via Pub/Sub plutôt que via des RPC synchrones. En découplant les applications, la messagerie :

  • rend les applications plus robustes ;
  • peut simplifier le développement.

Par exemple, l'appelant (éditeur) n'a pas besoin du destinataire (abonné) pour être fonctionnel et disponible. Il se contente d'envoyer un message à Pub/Sub. L'éditeur n'a pas non plus besoin de savoir quelles applications d'abonnés ni combien d'entre elles doivent recevoir le message. Par conséquent, on peut compter sur le service pour remettre le message à une ou plusieurs applications d'abonné dès qu'elles sont disponibles.

Conditions requises :

  • Un compte Google
  • Jusqu'à une heure de temps pour terminer l'opération

Présentation du système

Dans ce tutoriel, vous démarrez une application d'éditeur qui envoie le message "Hello, World!" à deux abonnés utilisant la communication un à plusieurs, comme illustré ci-dessous :

Diagramme du sujet, des abonnements associés, et des applications d'éditeur et d'abonné qui envoient des messages et reçoivent des messages à partir de Cloud Pub/Sub

Les deux applications d'abonné utilisent le même code, mais vous les démarrez à des moments différents. Cela montre comment Pub/Sub permet la communication asynchrone. Pour créer ce système, procédez comme suit :

  1. Créez le sujet Pub/Sub et les abonnements nécessaires.
  2. Créez un compte de service que les applications utilisent pour l'authentification.
  3. Configurez les autorisations Cloud IAM.
  4. Démarrez trois applications indépendantes : un éditeur et deux abonnés.

Configuration du tutoriel

Configurer votre projet Google Cloud, ainsi que votre sujet et vos abonnements Pub/Sub

  1. Se connecter à Google Cloud Console

    Accéder à Google Cloud Console

    Si vous êtes un nouvel utilisateur du cloud, cliquez sur Activer et suivez les invites pour configurer votre compte Cloud.

  2. Sélectionnez un projet existant ou créez-en un. Un projet par défaut est créé pour vous lors de votre première utilisation de Google Cloud.

    Dans la section Accueil de Cloud Console, notez l'ID du projet. Cette valeur vous servira à définir votre projet Cloud Storage actuel au cours du processus d'initialisation du SDK Cloud. Vous transmettrez également cet ID au script Python lorsque vous démarrerez les applications éditeur et abonné.

  3. Accédez à la section Pub/Sub de Google Cloud Console.

    Accéder à la section Pub/Sub

    Suivez l'invite pour activer l'API.

  4. Cliquez sur Créer un sujet. Les applications de publication envoient des messages aux sujets. Utilisez hello_topic comme nom.

  5. Sur la page Détails du sujet, cliquez sur Créer un abonnement :

    1. Nommez l'abonnement sub_one. Ne modifiez aucun des paramètres par défaut. Vous êtes en train de créer un abonnement StreamingPull, qui est un type d'abonnement pull.

    2. Suivez la même procédure pour créer un autre abonnement associé à hello_topic, nommé sub_two.

      Vous pouvez cliquer sur le nom du sujet dans la vue Sujets pour voir les nouveaux abonnements ou vous pouvez passer à la vue Abonnements.

À ce stade, votre environnement Pub/Sub est prêt à gérer le flux de messages entre les applications de publication et d'abonnement.

Créer les identifiants du compte de service

  1. Accédez à la section Comptes de service de la console.

    Accéder à la page Comptes de service IAM

  2. Sélectionnez votre projet, puis cliquez sur Créer un compte de service.

  3. Saisissez un nom de compte de service, tel que pubsub-tutorial.

  4. Cliquez sur Créer.

  5. Pour le tutoriel, le compte de service nécessite des autorisations de publication et d'abonnement. Utilisez la liste déroulante Select a role (Sélectionner un rôle) pour ajouter le rôle Pub/Sub Publisher (Éditeur Pub/Sub).

    Boîte de dialogue "Autorisations de compte de service", utilisant la chaîne "pub" pour filtrer les rôles Pub/Sub

  6. Cliquez sur Add another role (Ajouter un autre rôle), puis ajoutez Pub/Sub Subscriber (Abonné Pub/Sub).

    Boîte de dialogue "Autorisations de compte de service" avec Éditeur Pub/Sub et Abonné Pub/Sub avant de cliquer sur le bouton "Continuer"

  7. Cliquez sur Continuer. Il n'est pas nécessaire d'octroyer aux utilisateurs l'accès à ce compte de service.

  8. Cliquez sur Créer une clé. La bibliothèque cliente se sert de la clé pour accéder à l'API Pub/Sub.

  9. Sélectionnez JSON, puis cliquez sur Créer.

    La clé est envoyée dans votre dossier Téléchargements. Pour les besoins de ce tutoriel, vous pouvez la laisser à cet emplacement.

  10. Remplacez le nom du fichier de clé par ~/Downloads/key.json.

Installer le SDK Cloud

  1. Suivez les instructions pour installer et initialiser le SDK Cloud.

    • Lors de l'initialisation du SDK Cloud, sélectionnez l'option permettant d'indiquer un ID de projet et saisissez l'ID du projet que vous avez créé ou choisi dans la section de configuration.

    • Vous pouvez revenir à ce tutoriel après avoir installé et initialisé le SDK Cloud. Vous n'avez pas besoin d'installer d'autres composants, ni de télécharger les bibliothèques clientes Cloud.

    Une fois que vous avez installé le SDK Cloud, vous pouvez utiliser l'outil de ligne de commande gcloud pour effectuer des opérations Pub/Sub dans Compute Engine.

  2. Lancez un nouveau terminal, puis exécutez les commandes gcloud suivantes :

    gcloud pubsub topics list
    gcloud pubsub subscriptions list
    

    Vous pouvez également utiliser gcloud config set project PROJECT_ID pour modifier le projet par rapport à celui que vous avez configuré lors de l'initialisation.

Obtenir Python et configurer un environnement virtuel

Ce tutoriel fournissant un exemple d'utilisation, vous n'avez pas besoin de suivre l'exemple présenté dans la section portant sur la configuration de l'environnement virtuel. Vous pouvez revenir à ce tutoriel après avoir installé l'environnement virtuel.

Découvrir le code de l'éditeur et de l'abonné

  1. Créez un dossier de projet contenant les fichiers Pub/Sub Python nécessaires à ce tutoriel. Ensuite, accédez-y et téléchargez le code suivant :

     git clone https://github.com/googleapis/python-pubsub.git
    
  2. Fermez tous les terminaux ouverts avant de continuer.

Configurer trois terminaux

  1. Démarrez un terminal pour chaque application de tutoriel (un éditeur et deux abonnés). Dans chacun des terminaux, effectuez toutes les opérations décrites dans cette section. Pour plus de commodité, nous désignons ces terminaux comme suit :

    • terminal publisher (éditeur)
    • terminal sub_one (abonné_1)
    • terminal sub_two (abonné_2)
  2. Créez un environnement virtuel Python, puis activez-le.

    Dans le premier terminal, exécutez la commande suivante pour créer et activer un environnement virtuel nommé pyenv-qs :

    Bash

    python -m venv pyenv-qs
    source pyenv-qs/bin/activate
    

    PowerShell

    py -m venv pyenv-qs
    .\pyenv-qs\Scripts\activate
    

    Sur les deux autres terminaux, exécutez la commande suivante :

    Bash

    source pyenv-qs/bin/activate
    

    PowerShell

    .\pyenv-qs\Scripts\activate
    

    Une fois que vous avez exécuté la commande d'activation, votre invite de commande doit inclure (pyenv-qs) $.

    Vous pouvez également diriger votre environnement virtuel vers une version différente de Python.

  3. Installez la bibliothèque cliente Python pour Pub/Sub à l'aide de pip :

    pip install --upgrade google-cloud-pubsub

    Associez la clé JSON au compte de service. Vous avez attribué les principaux rôles Pub/Sub lors de la création des identifiants du compte de service. Les bibliothèques clientes Pub/Sub accèdent à la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS et se voient attribuer les rôles et les autorisations associés au compte de service.

    Bash

    export GOOGLE_APPLICATION_CREDENTIALS=~/Downloads/key.json
    

    PowerShell

    $env:GOOGLE_APPLICATION_CREDENTIALS="$HOME\Downloads\key.json"
    
  4. Configurez une variable d'environnement avec votre ID de projet actuel. Cette commande gcloud détermine votre ID de projet actuellement sélectionné et le définit comme une variable :

    Bash

    export PROJECT=gcloud config get-value project
    

    PowerShell

    $env:PROJECT=$(gcloud config get-value project)
    

    Pour vérifier que votre GCP actuel est correctement enregistré comme étant cette variable, exécutez cette commande :

    Bash

    echo $PROJECT
    

    PowerShell

    $env:PROJECT
    
  5. Accédez au dossier de votre projet, puis au dossier d'exemple de tutoriel :

    cd python-pubsub/samples/snippets/quickstart/
    

Démarrer les applications et observer le flux de messages

Démarrer l'application Abonné 1

Dans le terminal sub_one, démarrez Abonné 1 :

Bash

python sub.py $PROJECT sub_one

PowerShell

py sub.py $env:PROJECT sub_one

Une fois lancée, cette application ouvre une connexion de streaming bidirectionnelle avec le serveur. Pub/Sub distribue les messages via le flux.

L'application Abonné 1 commence à écouter les messages sur l'abonnement sub_one.

Démarrer l'application Éditeur

Dans le terminal publisher, démarrez l'application Éditeur :

Bash

python pub.py $PROJECT hello_topic

PowerShell

py pub.py $env:PROJECT hello_topic

Une fois l'application d'éditeur démarrée, le système Pub/Sub effectue les opérations suivantes :

  • L'application Éditeur envoie le message "Hello, World!" à Pub/Sub sans connaître les abonnements existants. Le serveur attribue également un ID de message.

  • L'application Abonné 1 reçoit le message "Hello World", l'imprime et envoie un accusé de réception à Pub/Sub.

  • L'application Éditeur imprime l'accusé de réception. Celui-ci indique à Pub/Sub que le message a bien été traité et qu'il n'a pas besoin d'être réexpédié à cet abonné sub_one ou à un autre.

Pub/Sub supprime le message de sub_one.

L'application Éditeur publie le message et attribue un ID de message. L'application Abonné 1 reçoit le message "Hello World" et envoie un accusé de réception.

Démarrer l'application Abonné 2

Dans le terminal sub_two, démarrez Abonné 2 :

Bash

python sub.py $PROJECT sub_two

PowerShell

py sub.py $env:PROJECT sub_two

Cet abonné reçoit les messages remis à l'abonnement sub_two. Abonné 2 réutilise le script sub.py. La différence est qu'Abonné 2 n'est pas démarré avant que l'application Éditeur ait envoyé le message au sujet et aux abonnements. Lorsque l'application Éditeur appelait directement Abonné 2, l'application de publication devait attendre qu'Abonné 2 soit créé, sans quoi elle expirait. Pub/Sub gère cela en enregistrant le message pour Abonné 2.

Abonné 2 commence à écouter et reçoit le message qui l'attendait dans sub_two

Vous êtes maintenant prêt à développer avec Pub/Sub !

Comment ça s'est passé ?

Des ressources et des liens supplémentaires sont disponibles sur la page d'assistance Pub/Sub.

Nettoyer

  1. Arrêtez toutes les applications en cours d'exécution.

  2. Supprimez le répertoire ~/pubsub-quickstart de votre environnement local.

  3. Arrêtez le projet de tutoriel dans la section IAM et administration de Google Cloud Console.

  4. Supprimez les identifiants du compte de service : rm ~/Downloads/key.json

Étapes suivantes

Voici certaines choses que vous pouvez essayer :

  • Examinez les codes pub.py et sub.py du tutoriel, puis parcourez les autres exemples de Pub/Sub sur GitHub. À titre d'exercice, créez une version de pub.py qui publie l'heure locale toutes les secondes.

  • Apprenez à traiter des messages par lot.

  • À l'aide des abonnements push, recevez des messages déclenchant des points de terminaison App Engine ou Cloud Functions.

  • Récupérez les messages précédemment confirmés à l'aide de la fonctionnalité de réouverture. Par défaut, Pub/Sub supprime les messages confirmés des abonnements. Dans ce tutoriel, par exemple, vous ne pourrez pas réexécuter sub.py pour recevoir le message "Hello, World!" à nouveau. La fonctionnalité de réouverture vous permet de configurer des abonnements pour recevoir des messages après confirmation de leur réception.