Escribe y responde mensajes de Pub/Sub

ID de región

REGION_ID es un código abreviado que Google asigna en función de la región que seleccionas cuando creas la app. El código no corresponde a un país ni a una provincia, aunque algunos ID de región puedan parecer similares a los códigos de país y provincia que se suelen usar. En el caso de las apps creadas después de febrero de 2020, REGION_ID.r se incluye en las URL de App Engine. En el caso de las apps existentes creadas antes de esta fecha, el ID de región es opcional en la URL.

Obtén más información acerca de los ID de región.

Pub/Sub proporciona mensajería asíncrona, confiable y de varios a varios entre aplicaciones. 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 Cloud para enviar y recibir mensajes de Pub/Sub en una app .NET.

Requisitos previos

Clona la app de muestra

Copia las apps 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

Crea 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.REGION_ID.r.appspot.com/pubsub/push?token=YOUR_SECRET_TOKEN `
    --ack-deadline 10

Configura variables de entorno

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

{
  "Pubsub": {
    "ProjectId": "your-project-id",
    "VerificationToken": "your-secret-token",
    "TopicId": "your-topic",
    "SubscriptionId": "your-subscription",
    "AuthSubscriptionId": "your-auth-subscription",
    "ServiceAccountEmail": "your-service-account-email"
  },

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

Revisión de código

La app de muestra usa la biblioteca cliente de 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.
    model.Messages = s_receivedMessages.ToArray();
    model.AuthMessages = s_authenticatedMessages.ToArray();
    return View(model);
}

Ejecuta la muestra de forma local

En la ejecución local, puedes usar la CLI de Cloud para proporcionar autenticación a fin de emplear las API de Google Cloud. Si configuraste tu entorno como se describe en Requisitos, ya ejecutaste el comando gcloud init que proporciona esta autenticación.

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.

Ejecuta en App Engine

Para implementar la app de demostración en App Engine mediante la herramienta de línea de comandos de gcloud, debes ejecutar el comando siguiente desde el directorio en el que se encuentra el archivo app.yaml:

Visual Studio

Para implementar la app de Hello World, sigue estos pasos:

  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://PROJECT_ID.REGION_ID.r.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.