Écrire des messages Pub/Sub et y répondre

Cloud Pub/Sub fournit une messagerie asynchrone fiable de type "plusieurs à plusieurs" entre applications. Les applications de type "éditeur" peuvent envoyer des messages à un sujet et d'autres applications peuvent s'abonner à ce sujet pour recevoir les messages.

Ce document explique comment utiliser la bibliothèque cliente Google Cloud pour envoyer et recevoir des messages Cloud Pub/Sub dans une application exécutée dans l'environnement flexible.

Prérequis

  • Suivez les instructions de la section "Hello, World!" pour .NET sur App Engine afin de configurer votre environnement et votre projet. Ces instructions vous permettront également de comprendre la structure des applications .NET dans App Engine.
  • Notez et enregistrez l'ID de votre projet. Vous en aurez besoin pour exécuter l'exemple d'application décrit dans ce document.
* Pour télécharger les identifiants depuis la console Google Cloud Platform afin de créer un compte de service et d'ajouter la clé de compte de service à votre application, suivez l'étape 3 décrite dans GitHub. * Activez Google Cloud Pub/Sub API.

Activez API

Cloner l'exemple d'application

Copiez les exemples d'applications sur votre ordinateur local et accédez au répertoire pubsub :

git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples
cd dotnet-docs-samples/appengine/flexible/pubsub

Créer un sujet et un abonnement

Créez un sujet et un abonnement, pour lesquels vous devez spécifier le point de terminaison auquel le serveur Pub/Sub doit envoyer des requêtes :

gcloud pubsub topics create YOUR_TOPIC
gcloud pubsub subscriptions create YOUR_SUBSCRIPTION `
    --topic YOUR_TOPIC `
    --push-endpoint `
    https://YOUR_PROJECT_ID.appspot.com/pubsub/push?token=YOUR_SECRET_TOKEN `
    --ack-deadline 10

Définir des variables d'environnement

Modifiez le fichier appsettings.json afin de définir l'ID de votre projet :

{
  "Pubsub": {
    "ProjectId": "your-project-id",
    "VerificationToken": "your-secret-token",
    "TopicId": "your-topic",
    "SubscriptionId": "your-subscription"
  },

  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

Réviser le code

L'exemple d'application utilise les bibliothèques clientes Google Cloud.

[HttpGet]
[HttpPost]
public IActionResult Index(MessageForm messageForm)
{
    var model = new MessageList();
    if (!_options.HasGoodProjectId())
    {
        model.MissingProjectId = true;
        return View(model);
    }
    if (!string.IsNullOrEmpty(messageForm.Message))
    {
        // Publish the message.
        var topicName = new TopicName(_options.ProjectId,
            _options.TopicId);
        lock(s_lock) CreateTopicAndSubscriptionOnce(_publisher, topicName);
        var pubsubMessage = new PubsubMessage()
        {
            Data = ByteString.CopyFromUtf8(messageForm.Message)
        };
        pubsubMessage.Attributes["token"] = _options.VerificationToken;
        _publisher.Publish(topicName, new[] { pubsubMessage });
        model.PublishedMessage = messageForm.Message;
    }
    // Render the current list of messages.
    lock (s_lock) model.Messages = s_receivedMessages.ToArray();
    return View(model);
}

Exécuter l'exemple en local

Lorsque vous exécutez l'exemple en local, vous pouvez recourir au SDK Cloud pour fournir les éléments d'authentification permettant d'utiliser les API Google Cloud. Si vous avez configuré votre environnement conformément à la procédure décrite dans la section Prérequis, vous avez déjà exécuté la commande gcloud init, qui fournit ces éléments d'authentification.

Pour exécuter l'exemple d'application localement, procédez comme suit :

Visual Studio

  1. Ouvrez dotnet-docs-samples\appengine\flexible\AppEngineFlex.sln avec Visual Studio.

  2. Dans Solution Explorer (Explorateur de solutions), faites un clic droit sur Pubsub, puis choisissez Debug (Débogage) > Start new instance (Démarrer une nouvelle instance).

Ligne de commande

  1. Exécutez les commandes suivantes à partir du répertoire dotnet-docs-samples\appengine\flexible\Pubsub :

    dotnet restore
    dotnet run
    
  2. Dans votre navigateur Web, saisissez l'adresse suivante :

    http://localhost:5000/
    

Simuler des notifications push

L'application peut envoyer des messages en local, mais ne peut pas recevoir de messages push en local. Vous pouvez toutefois simuler un message push en adressant une requête HTTP au point de terminaison de notification push local. L'exemple comprend le fichier sample_message.json.

Pour envoyer une requête POST HTTP, procédez comme suit :

Get-Content -Raw .\sample_message.json | Invoke-WebRequest -Uri
http://localhost:5000/Push?token=your-secret-token -Method POST -ContentType
'text/json' -OutFile out.txt

Une fois la requête traitée, vous pouvez actualiser localhost:5000 pour afficher le message dans la liste des messages reçus.

Exécuter sur App Engine

Pour déployer l'application de démonstration sur App Engine à l'aide de l'outil de ligne de commande gcloud, exécutez la commande suivante à partir du répertoire où se trouve votre fichier app.yaml :

Visual Studio

Pour déployer l'application Hello World, procédez comme suit :

  1. Ouvrez dotnet-docs-samples\appengine\flexible\AppEngineFlex.sln avec Visual Studio.
  2. Dans Solution Explorer, faites un clic droit sur Pubsub, puis cliquez sur Publish to Google Cloud… (Publier dans Google Cloud…).
  3. Cliquez sur App Engine Flex.
  4. Cliquez sur Publish (Publier).

Ligne de commande

Exécutez les commandes suivantes à partir du répertoire dotnet-docs-samples\appengine\flexible\Pubsub :
dotnet restore
dotnet publish
cd bin\Debug\netcoreapp2.1\publish
gcloud app deploy

Vous pouvez maintenant accéder à l'application à l'adresse https://[YOUR_PROJECT_ID].appspot.com, Vous pouvez utiliser le formulaire pour envoyer des messages (mais vous ne pourrez pas forcément savoir quelle instance de votre application recevra la notification). Vous pouvez envoyer plusieurs messages et actualiser la page pour afficher le message reçu.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Environnement flexible App Engine pour les documents .NET