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 :
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 :
- Créez le sujet Pub/Sub et les abonnements nécessaires.
- Créez un compte de service que les applications utilisent pour l'authentification.
- Configurez les autorisations Cloud IAM.
- 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
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.
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é.
Accédez à la section Pub/Sub de Google Cloud Console.
Suivez l'invite pour activer l'API.
Cliquez sur Créer un sujet. Les applications de publication envoient des messages aux sujets. Utilisez hello_topic comme nom.
Sur la page Détails du sujet, cliquez sur Créer un abonnement :
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.
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
Accédez à la section Comptes de service de la console.
Sélectionnez votre projet, puis cliquez sur Créer un compte de service.
Saisissez un nom de compte de service, tel que pubsub-tutorial.
Cliquez sur Créer.
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).
Cliquez sur Add another role (Ajouter un autre rôle), puis ajoutez Pub/Sub Subscriber (Abonné Pub/Sub).
Cliquez sur Continuer. Il n'est pas nécessaire d'octroyer aux utilisateurs l'accès à ce compte de service.
Cliquez sur Créer une clé. La bibliothèque cliente se sert de la clé pour accéder à l'API Pub/Sub.
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.
Remplacez le nom du fichier de clé par ~/Downloads/key.json.
Installer le SDK Cloud
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.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
Suivez les instructions pour installer Python 3 sur macOS.
(Facultatif) Configurez 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é
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
Fermez tous les terminaux ouverts avant de continuer.
Configurer trois terminaux
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)
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.
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"
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
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.
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.
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.
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
Arrêtez toutes les applications en cours d'exécution.
Supprimez le répertoire
~/pubsub-quickstart
de votre environnement local.Arrêtez le projet de tutoriel dans la section IAM et administration de Google Cloud Console.
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
etsub.py
du tutoriel, puis parcourez les autres exemples de Pub/Sub sur GitHub. À titre d'exercice, créez une version depub.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.