Pour développer et tester votre application localement, vous pouvez utiliser l'émulateur Pub/Sub, qui fournit une émulation locale du service de production Pub/Sub. L'exécution de l'émulateur Pub/Sub s'effectue à l'aide de l'outil de ligne de commande gcloud
.
Pour exécuter votre application sur l'émulateur, vous devez d'abord démarrer l'émulateur et définir des variables d'environnement afin que votre application communique avec l'émulateur, et non avec le service de production Pub/Sub.
Prérequis
Afin d'utiliser l'émulateur Pub/Sub, vous devez remplir les conditions suivantes :
Configurer correctement l'environnement de développement Python (consultez ce guide pour en savoir plus)
Avoir installé Java JRE (version 7 ou ultérieure)
Avoir installé le SDK Google Cloud Le SDK Cloud contient l'outil de ligne de commande
gcloud
.Disposer d'une application développée à l'aide des bibliothèques clientes Google Cloud
Installer l'émulateur
Installez l'émulateur depuis une invite de commande :
gcloud components install pubsub-emulator gcloud components update
Démarrer l'émulateur
Pour démarrer l'émulateur, exécutez la commande pubsub start
à partir d'une invite de commande : Avant d'exécuter la commande, remplacez PUBSUB_PROJECT_ID par une chaîne correspondant à un ID de projet Google Cloud valide. La chaîne n'a pas besoin de représenter un véritable projet Google Cloud, car l'émulateur Pub/Sub s'exécute localement.
gcloud beta emulators pubsub start --project=PUBSUB_PROJECT_ID [options]
Pour obtenir la liste complète des options, consultez la page gcloud beta emulators pubsub start
.
Une fois l'émulateur démarré, un message semblable aux lignes suivantes doit s'afficher :
... [pubsub] This is the Pub/Sub fake. [pubsub] Implementation may be incomplete or differ from the real system. ... [pubsub] INFO: Server started, listening on 8085
Cela indique que le serveur Pub/Sub s'exécute au niveau du point de terminaison de l'émulateur sur votre ordinateur local, et non sur le point de terminaison de Google Cloud. Toutes les opérations sont effectuées localement, y compris :
- Créer un sujet ou un abonnement
- Publication…
- Abonnement
Définir des variables d'environnement
Après le démarrage de l'émulateur, vous devez définir des variables d'environnement afin que votre application se connecte à l'émulateur, et non à Pub/Sub. Définissez ces variables d'environnement sur la même machine que celle utilisée pour exécuter votre application.
Les variables d'environnement doivent être définies chaque fois que vous démarrez l'émulateur. Elles dépendent des numéros de port attribués de manière dynamique, qui sont susceptibles d'être modifiés lorsque vous redémarrez l'émulateur.
Définir les variables automatiquement
Si votre application et l'émulateur s'exécutent sur la même machine, vous pouvez définir les variables d'environnement automatiquement comme suit :
Linux/macOS
Exécutez env-init
à l'aide de la substitution de commande :
$(gcloud beta emulators pubsub env-init)
Windows
Créez et exécutez un fichier batch à l'aide du résultat de la commande env-init
:
gcloud beta emulators pubsub env-init > set_vars.cmd && set_vars.cmd
Votre application se connecte alors à l'émulateur Pub/Sub.
Définir les variables manuellement
Si votre application et l'émulateur s'exécutent sur des machines différentes, définissez les variables d'environnement manuellement :
Exécutez la commande
env-init
:gcloud beta emulators pubsub env-init
Sur la machine qui exécute votre application, définissez la variable d'environnement
PUBSUB_EMULATOR_HOST
ainsi que sa valeur, comme indiqué par le résultat de la commandeenv-init
. Vous pouvez également définir la variable d'environnementPUBSUB_PROJECT_ID
pour le projet que vous souhaitez utiliser dans l'émulateur, mais vous devez alors uniquement définirPUBSUB_EMULATOR_HOST
pour que votre application se connecte à l'émulateur. Exemple :Linux/macOS export PUBSUB_EMULATOR_HOST=localhost:8432 export PUBSUB_PROJECT_ID=my-project-id
Windows set PUBSUB_EMULATOR_HOST=localhost:8432 set PUBSUB_PROJECT_ID=my-project-id
Votre application se connecte alors à l'émulateur Pub/Sub.
Remarque : Si vous utilisez le serveur de développement local standard Python App Engine, vous devez transmettre les variables d'environnement via la ligne de commande comme suit :
Python
dev_appserver.py app.yaml --env_var PUBSUB_EMULATOR_HOST=${PUBSUB_EMULATOR_HOST}
Utiliser l'émulateur
Pour utiliser l'émulateur, vous devez disposer d'une application créée à l'aide des bibliothèques clientes Google Cloud.
L'émulateur n'est pas compatible avec les commandes de Cloud Console ou de gcloud pubsub
.
L'exemple ci-dessous illustre la procédure à suivre pour créer un sujet, publier des messages et consulter des messages à l'aide de l'émulateur et d'une application utilisant la bibliothèque cliente Google Cloud pour Python.
Suivez les étapes ci-dessous sur la machine sur laquelle vous avez défini les variables d'environnement de l'émulateur :
Récupérez les fichiers d'exemple Python pour Pub/Sub depuis GitHub en clonant l'intégralité du dépôt Python.
Dans votre dépôt cloné, accédez au répertoire
samples/snippets
. Vous allez effectuer les étapes restantes dans ce répertoire.Depuis le répertoire
samples/snippets
, installez les dépendances nécessaires à l'exécution de l'exemple :pip install -r requirements.txt
Créez un sujet :
python publisher.py PUBSUB_PROJECT_ID create TOPIC_ID
(Facultatif) Si vous ne disposez pas d'un point de terminaison push local pour tester les abonnements push dans l'émulateur, procédez comme suit pour en créer un à l'adresse suivante :
http://localhost:3000/messages
.- Installez le serveur JSON.
npm install -g json-server
- Démarrez le serveur JSON.
json-server --port 3000 --watch db.json
oùdb.json
contient le code de démarrage suivant :{ "messages": [] }
- Notez
http://localhost:3000/messages
pour PUSH_ENDPOINT lors de l'étape suivante.
- Installez le serveur JSON.
Créez un abonnement associé au sujet :
Créez un abonnement pull :
python subscriber.py PUBSUB_PROJECT_ID create TOPIC_ID SUBSCRIPTION_ID
Créez un abonnement push :
python subscriber.py PUBSUB_PROJECT_ID create-push TOPIC_ID SUBSCRIPTION_ID \ PUSH_ENDPOINT
Publiez des messages sur le sujet :
python publisher.py PUBSUB_PROJECT_ID publish TOPIC_ID
Consultez les messages publiés sur le sujet :
Récupérez les messages de votre abonnement pull :
python subscriber.py PUBSUB_PROJECT_ID receive SUBSCRIPTION_ID
Observez les messages envoyés à votre point de terminaison push local. Par exemple, les messages se présentent sous la forme suivante :
{ "messages": [ { "subscription": "projects/PUBSUB_PROJECT_ID/subscriptions/SUBSCRIPTION_ID", "message": { "data": "TWVzc2FnZSBudW1iZXIgMQ==", "messageId": "10", "attributes": {} }, "id": 1 }, ... ] }
Accéder aux variables d'environnement
Dans tous les langages, à l'exception de Java et C#, les bibliothèques clientes Pub/Sub appellent automatiquement l'API s'exécutant dans l'instance locale plutôt que Pub/Sub, si vous avez défini PUBSUB_EMULATOR_HOST
tel que décrit dans la section Définir des variables d'environnement.
Toutefois, afin d'utiliser l'émulateur, vous devez modifier votre code pour les bibliothèques clientes pour C# et Java :
C#
Avant d'essayer cet exemple, suivez les instructions de configuration de C# décrites dans le Guide de démarrage rapide de Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour C#.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration de Java décrites dans le Guide de démarrage rapide de Pub/Sub – Utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Java.
Arrêter l'émulateur
Pour arrêter l'émulateur, appuyez sur les touches Ctrl+C.
Une fois l'émulateur arrêté, exécutez la commande suivante pour supprimer la variable d'environnement PUBSUB_EMULATOR_HOST
, afin que votre application se connecte à Pub/Sub :
unset PUBSUB_EMULATOR_HOST
set PUBSUB_EMULATOR_HOST=
Arguments de ligne de commande de l'émulateur
Pour en savoir plus sur les arguments de ligne de commande de l'émulateur Pub/Sub, consultez la page gcloud beta emulators pubsub
.
Fonctionnalités compatibles
L'émulateur est compatible avec les fonctionnalités Pub/Sub suivantes :
- Publier des messages
- Recevoir des messages des abonnements push et pull
- Trier des messages
- Rouvrir des messages
- Transférer des messages vers des sujets de lettres mortes
- Nouvelles règles concernant la distribution des messages
- Compatibilité des schémas avec Avro
Limites connues
- Les RPC UpdateTopic et UpdateSnapshot ne sont pas compatibles.
- Les opérations IAM ne sont pas compatibles.
- La conservation configurable des messages n'est pas compatible. Tous les messages sont conservés indéfiniment.
- Il n'est pas possible de définir une date d'expiration pour l'abonnement. Les abonnements n'arrivent pas à expiration.
- Le filtrage n'est pas compatible.
- Compatibilité du schéma avec les tampons de protocole.
Pour signaler les éventuels problèmes rencontrés, consultez le forum Pub/Sub.