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

Ce tutoriel vous accompagne dans la configuration d'un ensemble 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. L'éditeur envoie un message à Pub/Sub. L'éditeur n'a pas 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.

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é dans le schéma suivant :

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 un compte de service IAM que les applications utilisent pour l'authentification.
  2. Configurez les autorisations Cloud IAM.
  3. Créez un sujet et un abonnement Pub/Sub.
  4. Démarrez trois applications indépendantes : un éditeur et deux abonnés.

Avant de commencer

  1. Connectez-vous à votre Google Cloud compte. Si vous n'avez jamais utilisé Google Cloud, créez un compte pour évaluer les performances de nos produits dans des scénarios réels. Les nouveaux clients bénéficient également de 300 $de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  2. Installez la Google Cloud CLI.

  3. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  4. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  5. Créez ou sélectionnez un Google Cloud projet.

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionner un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous avez besoin du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • Créez un Google Cloud projet :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du Google Cloud projet que vous créez.

    • Sélectionnez le Google Cloud projet que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre Google Cloud projet.

  6. Vérifiez que la facturation est activée pour votre Google Cloud projet.

  7. Activez l'API Pub/Sub :

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin du rôle IAM Administrateur d'utilisation du service (roles/serviceusage.serviceUsageAdmin), qui contient l' serviceusage.services.enable autorisation. Découvrez comment attribuer des rôles.

    gcloud services enable pubsub.googleapis.com
  8. Créez des identifiants d'authentification locaux pour votre compte utilisateur :

    gcloud auth application-default login

    Si une erreur d'authentification est renvoyée et que vous utilisez un fournisseur d'identité (IdP) externe, vérifiez que vous vous êtes connecté à la gcloud CLI avec votre identité fédérée.

  9. Attribuez des rôles à votre compte utilisateur. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants : roles/pubsub.publisher, roles/pubsub.subscriber

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet
    • USER_IDENTIFIER : identifiant de votre compte utilisateur Par exemple, myemail@example.com.
    • ROLE : rôle IAM que vous attribuez à votre compte utilisateur
  10. Installez la Google Cloud CLI.

  11. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  12. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  13. Créez ou sélectionnez un Google Cloud projet.

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionner un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous avez besoin du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • Créez un Google Cloud projet :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du Google Cloud projet que vous créez.

    • Sélectionnez le Google Cloud projet que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre Google Cloud projet.

  14. Vérifiez que la facturation est activée pour votre Google Cloud projet.

  15. Activez l'API Pub/Sub :

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin du rôle IAM Administrateur d'utilisation du service (roles/serviceusage.serviceUsageAdmin), qui contient l' serviceusage.services.enable autorisation. Découvrez comment attribuer des rôles.

    gcloud services enable pubsub.googleapis.com
  16. Créez des identifiants d'authentification locaux pour votre compte utilisateur :

    gcloud auth application-default login

    Si une erreur d'authentification est renvoyée et que vous utilisez un fournisseur d'identité (IdP) externe, vérifiez que vous vous êtes connecté à la gcloud CLI avec votre identité fédérée.

  17. Attribuez des rôles à votre compte utilisateur. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants : roles/pubsub.publisher, roles/pubsub.subscriber

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet
    • USER_IDENTIFIER : identifiant de votre compte utilisateur Par exemple, myemail@example.com.
    • ROLE : rôle IAM que vous attribuez à votre compte utilisateur

Installer Python

Ce tutoriel utilise les bibliothèques clientes Pub/Sub, qui nécessitent Python 3.7 ou une version ultérieure. Suivez les instructions pour installer Python.

Configurer votre projet Pub/Sub

Pour gérer le flux de messages entre les applications de publication et d'abonnement, créez un sujet et deux abonnements différents.

Créer un sujet Pub/Sub

Créez un sujet avec l'ID hello_topic :

gcloud pubsub topics create hello_topic

Créer un abonnement Pub/Sub

Créez deux abonnements et associez-les à votre sujet.

Ces abonnements sont un abonnement StreamingPull, qui est un type d'abonnement pull.

Abonnement 1

Créez un abonnement avec l'ID sub_one et associez-le à hello_topic.

gcloud pubsub subscriptions create sub_one --topic=hello_topic

Abonnement 2

Créez un abonnement avec l'ID sub_two et associez-le à hello_topic.

gcloud pubsub subscriptions create sub_two --topic=hello_topic

Créer le système un à plusieurs

Télécharger le code de l'éditeur et de l'abonné

  1. Téléchargez les fichiers Pub/Sub Python nécessaires à ce tutoriel.

     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). Pour plus de commodité, ce tutoriel appelle ces terminaux :

    • terminal publisher (éditeur)
    • terminal sub_one (abonné_1)
    • sub_two (abonné_2)
  2. Dans le terminal publisher, créez et activez un environnement virtuel Python nommé pyenv-qs.

    Bash

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

    PowerShell

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

    Dans les terminaux sub_one et sub_two, exécutez la commande suivante :

    Bash

    source pyenv-qs/bin/activate

    PowerShell

    .\pyenv-qs\Scripts\activate

    Une fois la commande d'activation exécutée, l'invite de commandes inclut la valeur suivante : (pyenv-qs) $.

  3. Dans le terminal publisher, installez la bibliothèque cliente Python pour Pub/Sub à l'aide de pip :

    python -m pip install --upgrade google-cloud-pubsub
  4. Dans les trois terminaux, configurez une variable d'environnement avec votre ID de projet actuel. Cette commande gcloud détermine votre ID de projet 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)
  5. Dans les trois terminaux, accédez au chemin d'accès du projet contenant l'exemple de code.

    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. 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 de l'exemple de code de votre environnement local.
  3. Supprimez le sujet.

    gcloud pubsub topics delete hello_topic
  4. Supprimez les abonnements.

    gcloud pubsub subscriptions delete sub_one
    gcloud pubsub subscriptions delete sub_two
  5. Arrêtez le projet de tutoriel dans la section IAM et administration de la Google Cloud console.

  6. Facultatif : Révoquez les identifiants d'authentification que vous avez créés et supprimez le fichier d'identifiants local.

    gcloud auth application-default revoke
  7. Facultatif : Révoquez les identifiants de gcloud CLI.

    gcloud auth revoke

Étape suivante

Voici certaines choses que vous pouvez essayer :

  • Examinez les codes pub.py et sub.py du tutoriel, puis parcourez les 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 qui déclenchent des points de terminaison App Engine ou des 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 à nouveau le message "Hello, World!". La fonctionnalité de réouverture vous permet de configurer des abonnements pour recevoir des messages après confirmation de leur réception.

  • Premiers pas avec les bibliothèques clientes dans d'autres langages.