Cette page a été traduite par l'API Cloud Translation.
Switch to English

Tester des applications localement avec l'émulateur

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 :

  1. Exécutez la commande env-init :

     gcloud beta emulators pubsub env-init

  2. 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 commande env-init. Vous pouvez également définir la variable d'environnement PUBSUB_PROJECT_ID pour le projet que vous souhaitez utiliser dans l'émulateur, mais vous devez alors uniquement définir PUBSUB_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 :

  1. Récupérez les fichiers d'exemple Python pour Pub/Sub depuis GitHub en clonant l'intégralité du dépôt Python.

  2. Dans votre dépôt cloné, accédez au répertoire samples/snippets. Vous allez effectuer les étapes restantes dans ce répertoire.

  3. Depuis le répertoire samples/snippets, installez les dépendances nécessaires à l'exécution de l'exemple :

    pip install -r requirements.txt
    
  4. Créez un sujet :

     python publisher.py PUBSUB_PROJECT_ID create TOPIC_ID
    
  5. (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.

    1. Installez le serveur JSON.
      npm install -g json-server
      
    2. Démarrez le serveur JSON.
      json-server --port 3000 --watch db.json
      
      db.json contient le code de démarrage suivant :
      {
         "messages": []
      }
      
    3. Notez http://localhost:3000/messages pour PUSH_ENDPOINT lors de l'étape suivante.
  6. 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
      
  7. Publiez des messages sur le sujet :

     python publisher.py PUBSUB_PROJECT_ID publish TOPIC_ID
    
  8. 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#.

// For example, "localhost:8615"
string emulatorHostAndPort = Environment.GetEnvironmentVariable("PUBSUB_EMULATOR_HOST");

PublisherServiceApiClient client = new PublisherServiceApiClientBuilder
{
    Endpoint = emulatorHostAndPort,
    ChannelCredentials = ChannelCredentials.Insecure
}.Build();
client.CreateTopic(new TopicName("project", "topic"));
foreach (var topic in client.ListTopics(new ProjectName("project")))
{
    Console.WriteLine(topic.Name);
}

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.

String hostport = System.getenv("PUBSUB_EMULATOR_HOST");
ManagedChannel channel = ManagedChannelBuilder.forTarget(hostport).usePlaintext().build();
try {
  TransportChannelProvider channelProvider =
      FixedTransportChannelProvider.create(GrpcTransportChannel.create(channel));
  CredentialsProvider credentialsProvider = NoCredentialsProvider.create();

  // Set the channel and credentials provider when creating a `TopicAdminClient`.
  // Similarly for SubscriptionAdminClient
  TopicAdminClient topicClient =
      TopicAdminClient.create(
          TopicAdminSettings.newBuilder()
              .setTransportChannelProvider(channelProvider)
              .setCredentialsProvider(credentialsProvider)
              .build());

  TopicName topicName = TopicName.of("my-project-id", "my-topic-id");
  // Set the channel and credentials provider when creating a `Publisher`.
  // Similarly for Subscriber
  Publisher publisher =
      Publisher.newBuilder(topicName)
          .setChannelProvider(channelProvider)
          .setCredentialsProvider(credentialsProvider)
          .build();
} finally {
  channel.shutdown();
}

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 :

Linux/macOS
unset PUBSUB_EMULATOR_HOST
Windows
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.