Escribir y responder mensajes de Pub/Sub

Cloud Pub/Sub proporciona mensajería asíncrona entre aplicaciones de varios a varios de forma confiable. Las aplicaciones de publicador pueden enviar mensajes a un tema, y otras aplicaciones pueden suscribirse a ese tema para recibir los mensajes.

En este documento, se describe cómo usar la Biblioteca cliente de Google Cloud para enviar y recibir mensajes de Cloud Pub/Sub en una aplicación que se ejecuta en el entorno flexible.

Requisitos previos

  • Sigue las instrucciones que aparecen en "Hello, World!" para .NET en App Engine para configurar tu entorno y proyecto, y comprender cómo están estructuradas las aplicaciones .NET de App Engine.
  • Anota y guarda el ID del proyecto porque lo necesitarás para ejecutar la aplicación de muestra que se describe en este documento.
* Para descargar las credenciales de Google Cloud Platform Console a fin de crear una cuenta de servicio y agregar la clave de la cuenta de servicio a tu aplicación, sigue el paso 3 descrito en GitHub. * Habilita las Google Cloud Pub/Sub API necesarias.

Habilita las API

Clonar la app de muestra

Copia las aplicaciones de muestra en tu máquina local y navega hasta el directorio pubsub:

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

Crear un tema y una suscripción

Crea un tema y una suscripción que incluyan la especificación del extremo al que el servidor Pub/Sub debe enviar solicitudes:

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

Configurar variables del entorno

Edita el archivo appsettings.json para configurar tu ID del proyecto:

{
  "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"
    }
  }
}

Revisión de código

La aplicación de muestra usa la Biblioteca cliente de 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 pubsubMessage = new PubsubMessage()
        {
            Data = ByteString.CopyFromUtf8(messageForm.Message)
        };
        pubsubMessage.Attributes["token"] = _options.VerificationToken;
        _publisher.PublishAsync(pubsubMessage);
        model.PublishedMessage = messageForm.Message;
    }
    // Render the current list of messages.
    lock (s_lock) model.Messages = s_receivedMessages.ToArray();
    return View(model);
}

Ejecutar la muestra de forma local

Cuando se ejecuta localmente, puedes usar el SDK de Cloud a fin de proporcionar autenticación para usar las API de Google Cloud. Suponiendo que configuraste tu entorno como se describe en Requisitos previos, ya ejecutaste el comando gcloud init, que proporciona esta autenticación.

Sigue estos pasos para ejecutar la aplicación de muestra localmente:

Visual Studio

  1. Abre dotnet-docs-samples\appengine\flexible\AppEngineFlex.sln con Visual Studio.

  2. En el Explorador de soluciones, haz clic con el botón derecho en Pubsub y selecciona Depuración > Iniciar instancia nueva

Línea de comandos

  1. Ejecuta los siguientes comandos desde el directorio dotnet-docs-samples\appengine\flexible\Pubsub:

    dotnet restore
    dotnet run
    
  2. En el navegador web, ingresa la siguiente dirección:

    http://localhost:5000/
    

Simular notificaciones push

La aplicación puede enviar mensajes de forma local, pero no puede recibir mensajes push localmente. Sin embargo, puedes simular un mensaje push; para ello, envía una solicitud HTTP al extremo de notificación push local. La muestra incluye el archivo sample_message.json.

Para enviar una solicitud HTTP POST:

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

Una vez completada la solicitud, puedes actualizar localhost:5000 y ver el mensaje en la lista de mensajes recibidos.

Ejecución en App Engine

Para implementar la aplicación de demostración en App Engine con la herramienta de línea de comandos de gcloud, ejecuta el siguiente comando desde el directorio que contiene tu archivo app.yaml:

Visual Studio

Para implementar la app de Hello World:

  1. Abre dotnet-docs-samples\appengine\flexible\AppEngineFlex.sln con Visual Studio.
  2. En el Explorador de soluciones, haz clic con el botón derecho en Pubsub y elige Publicar en Google Cloud…
  3. Haz clic en App Engine Flex.
  4. Haz clic en Publicar.

Línea de comandos

Ejecuta los siguientes comandos desde el directorio dotnet-docs-samples\appengine\flexible\Pubsub:
dotnet restore
dotnet publish
cd bin\Debug\netcoreapp2.1\publish
gcloud app deploy

Ahora puedes acceder a la aplicación en https://[YOUR_PROJECT_ID].appspot.com. Puedes usar el formulario para enviar mensajes, pero no hay forma de garantizar qué instancia de tu aplicación recibirá la notificación. Puedes enviar varios mensajes y actualizar la página para ver el mensaje recibido.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno flexible de App Engine para documentos .NET