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

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Introduction

Ce tutoriel vous explique comment configurer un ensemble simple d'applications qui communiquent en envoyant des messages via Pub/Sub plutôt que via des RPC synchrones. En dissociant les applications:

  • 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. Connectez-vous à la console Google Cloud.

    Accédez à la console Google Cloud.

    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 la console Google Cloud, notez l'ID du projet. Cette valeur vous permet de définir votre projet Cloud Storage actuel pendant le processus d'initialisation de gcloud CLI. 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 la console Google Cloud.

    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

Ne procédez comme suit que si vous utilisez un compte de service:

  1. Créez un compte de service :

    1. Dans la console Google Cloud, accédez à la page Comptes de service.

      Accéder à la page "Comptes de service"

    2. Sélectionnez votre projet.

    3. Cliquez sur Créer un compte de service.

    4. Dans le champ Nom du compte de service, saisissez un nom, tel que pubsub-tutorial. La console Google Cloud remplit le champ ID du compte de service en fonction de ce nom.

    5. Facultatif : dans le champ Description du compte de service, saisissez une description du compte de service.

    6. Cliquez sur Créer et continuer.

    7. 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

    8. 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"

    9. Cliquez sur OK pour terminer la création du compte de service.

      Ne fermez pas la fenêtre de votre navigateur. Vous en aurez besoin lors de la tâche suivante.

  2. Téléchargez une clé JSON pour le compte de service que vous venez de créer. La bibliothèque cliente utilise la clé pour accéder à l'API Pub/Sub.

    1. Dans Google Cloud Console, cliquez sur l'adresse e-mail du compte de service que vous avez créé.
    2. Cliquez sur Keys (Clés).
    3. Cliquez sur Add key (Ajouter une clé), puis sur Create new key (Créer une clé).
    4. Cliquez sur Créer. Un fichier de clé JSON est téléchargé sur votre ordinateur.

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

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

    6. Cliquez sur Fermer.

Pour découvrir d'autres moyens de fournir des identifiants qui n'impliquent pas de compte de service, consultez la section Fournir des identifiants pour les identifiants par défaut de l'application.

Pour attribuer des rôles à votre compte Google, exécutez la commande suivante une fois pour chaque rôle IAM que vous souhaitez appliquer.

gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
  • Remplacez PROJECT_ID par l'ID du projet.
  • Remplacez EMAIL_ADDRESS par votre adresse e-mail.
  • Remplacez ROLE par chaque rôle individuel.

Installer Google Cloud CLI

  1. Suivez les instructions pour installer et initialiser Google Cloud CLI.

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

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

    Après avoir installé gcloud CLI, vous pouvez l’utiliser 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 :

    python -m pip install --user --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 l'ID de projet actuellement sélectionné et le définit en tant que variable:

    Bash

    export PROJECT=`gcloud config get-value project`
    

    PowerShell

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

    Pour vérifier que votre compte Google Cloud actuel est correctement enregistré en tant que variable:

    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 lui attribue un ID. 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.

Effectuer un nettoyage

  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 la console Google Cloud.

  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 d'autres exemples 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.

  • Faites vos premiers pas avec les bibliothèques clientes dans d'autres langages.