Ce tutoriel vous explique comment configurer un ensemble d'applications qui communiquent en envoyant des messages via Pub/Sub plutôt que via des RPC synchrones. En dissociant 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:
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 un compte de service IAM que les applications utilisent pour l'authentification.
- Configurez les autorisations Cloud IAM.
- Créez un sujet et un abonnement Pub/Sub.
- Démarrez trois applications indépendantes : un éditeur et deux abonnés.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Pub/Sub API:
gcloud services enable pubsub.googleapis.com
-
Create local authentication credentials for your user account:
gcloud auth application-default login
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/pubsub.publisher, roles/pubsub.subscriber
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Pub/Sub API:
gcloud services enable pubsub.googleapis.com
-
Create local authentication credentials for your user account:
gcloud auth application-default login
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/pubsub.publisher, roles/pubsub.subscriber
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
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, vous devez créer 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 des abonnements StreamingPull, qui sont 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é
Téléchargez les fichiers Python Pub/Sub nécessaires à ce tutoriel.
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). Pour plus de commodité, ce tutoriel appelle ces terminaux comme suit:
- terminal publisher (éditeur)
- terminal sub_one (abonné_1)
- terminal sub_two (abonné_2)
Dans le terminal de l'éditeur, 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 que vous avez exécuté la commande d'activation, votre invite de commande inclut la valeur
(pyenv-qs) $
suivante.Dans le terminal de l'éditeur, installez la bibliothèque cliente Python pour Pub/Sub à l'aide de
pip
:python -m pip install --upgrade google-cloud-pubsub
Dans les trois terminaux, configurez une variable d'environnement avec votre ID de projet actuel. Cette commande gcloud détermine l'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)
Dans les trois terminaux, accédez au chemin d'accès du projet qui contient 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.
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 de l'exemple de code de votre environnement local.
Supprimez le sujet.
gcloud pubsub topics delete hello_topic
Supprimez les abonnements.
gcloud pubsub subscriptions delete sub_one
gcloud pubsub subscriptions delete sub_two
Arrêtez le projet de tutoriel dans la section IAM et administration de la console Google Cloud.
-
Optional: Revoke the authentication credentials that you created, and delete the local credential file.
gcloud auth application-default revoke
-
Optional: Revoke credentials from the gcloud CLI.
gcloud auth revoke
Étape suivante
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 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 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.Familiarisez-vous avec les bibliothèques clientes dans d'autres langues.