Cómo 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 del 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 utilizar 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 de "Hola, mundo" para PHP en App Engine a fin de configurar tu entorno y proyecto, y comprender cómo están estructuradas las aplicaciones de PHP de App Engine.
  • Anota y guarda tu ID del proyecto, ya que lo necesitarás para ejecutar la aplicación de muestra que se describe en este documento.

Cómo 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/php-docs-samples
cd php-docs-samples/appengine/flexible/pubsub

Cómo 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_NAME
gcloud pubsub subscriptions create YOUR_SUBSCRIPTION_NAME \
    --topic YOUR_TOPIC_NAME

Cómo configurar variables de entorno

Edita el archivo index.php para establecer las variables del entorno de tu tema y suscripción:

$app['topic'] = 'php-example-topic';
$app['subscription'] = 'php-example-subscription';

Revisión de código

La aplicación de muestra usa la Biblioteca cliente de Google Cloud.

La app de muestra utiliza los valores que estableciste en el archivo app.yaml para configurar las variables del entorno. El controlador de solicitudes push utiliza estos valores para confirmar que la solicitud provenga de Pub/Sub y que se originó de una fuente confiable:

runtime: php
env: flex

La app de muestra mantiene una lista global a fin de almacenar los mensajes recibidos por esta instancia:

$messages = [];

El método pull recupera los mensajes del tema que creaste y los agrega a la lista de mensajes:

// get PULL pubsub messages
$pubsub = new PubSubClient([
    'projectId' => $projectId,
]);
$subscription = $pubsub->subscription($subscriptionName);
$pullMessages = [];
foreach ($subscription->pull(['returnImmediately' => true]) as $pullMessage) {
    $pullMessages[] = $pullMessage;
    $messages[] = $pullMessage->data();
}
// acknowledge PULL messages
if ($pullMessages) {
    $subscription->acknowledgeBatch($pullMessages);
}

El método publish publica los mensajes nuevos en el tema:

if ($message = $app['request']->get('message')) {
    // Publish the pubsub message to the topic
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $topic = $pubsub->topic($topicName);
    $response = $topic->publish(['data' => $message]);
    return new Response('', 204);
}

Cómo ejecutar la muestra de manera local

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

Instala las dependencias con Composer:

composer install

A continuación, establece las variables del entorno antes de iniciar tu aplicación:

Cómo 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 de HTTP al extremo de notificación push local. La muestra incluye el archivo sample_message.json.

Puedes utilizar curl o httpie para enviar una solicitud HTTP POST:

O

http POST ":8080/pubsub/push?token=[your-token]" < sample_message.json

Respuesta:

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

Cómo ejecutar en App Engine

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

gcloud app deploy

Ahora puedes acceder a la aplicación en https://[YOUR_PROJECT_ID].appspot.com. Puedes utilizar 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 de PHP