Guide de démarrage rapide : créer un système Pub/Sub fonctionnel

Présentation

Ce guide de démarrage rapide va vous accompagner 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.

Ce guide de démarrage rapide est destiné aux développeurs Python utilisant macOS.

Conditions requises :

  • Un compte Google
  • Un système macOS X avec Python et Git installés
  • Jusqu'à une heure de temps pour terminer l'opération

Présentation du système

Dans ce guide, vous démarrez une application d'éditeur qui envoie le message "Hello, World!" à deux abonnés, 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 rapide

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.

    Au moment de la création de ce guide de démarrage rapide, la première fraction de l'allocation mensuelle gratuite de données n'est pas facturée. Consultez la page sur la tarification Pub/Sub pour en savoir plus. Ce guide de démarrage rapide comprend également des instructions de nettoyage.

  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 du guide de démarrage rapide.

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

  4. Cliquez sur Créer.

  5. Pour le démarrage rapide, 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

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

    Boîte de dialogue

  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 guide de démarrage rapide, 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 guide de démarrage rapide 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 guide de démarrage rapide fournit un exemple d'utilisation. Vous n'avez donc pas besoin de suivre l'exemple présenté dans la section sur la configuration de l'environnement virtuel. Vous pouvez revenir à ce guide de démarrage rapide 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 guide de démarrage rapide. 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 démarrage rapide (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 :

      python -m venv pyenv-qs && source pyenv-qs/bin/activate
    • Dans les deux autres terminaux, la commande suivante est suffisante :

      source pyenv-qs/bin/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. Assurez-vous que vous utilisez l'environnement virtuel tel que décrit dans le guide de configuration :

    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.

    export GOOGLE_APPLICATION_CREDENTIALS=~/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 :

    export PROJECT=`gcloud config get-value project`

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

    echo $PROJECT
  5. Accédez au dossier de votre projet, puis au dossier d'exemple de démarrage rapide :

    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 :

python sub.py $PROJECT sub_one

Une fois lancée, cette application interroge l'abonnement Pub/Sub sub_one.

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 :

python pub.py $PROJECT hello_topic
  • L'application Éditeur envoie le message "Hello, World!" à Pub/Sub sans connaître les abonnements existants. Elle 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

Démarrer l'application Abonné 2

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

python sub.py $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 cela 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 démarrage rapide 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 guide de démarrage rapide, 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 guide de démarrage rapide, 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.