Como gravar e responder mensagens do Pub/Sub

O Cloud Pub/Sub transmite mensagens assíncronas confiáveis, de muitos para muitos, entre os aplicativos. Os aplicativos do editor podem enviar mensagens para um tópico e outros aplicativos podem se inscrever nele para receber as mensagens.

Este documento descreve como usar a Biblioteca de Cliente do Google Cloud para enviar e receber mensagens Cloud Pub/Sub em um aplicativo em PHP.

Pré-requisitos

  • Siga as instruções em "Hello, World!"para PHP no App Engine e configure o ambiente e o projeto, além de compreender como são estruturados os aplicativos PHP no App Engine.
  • Anote e salve o código do projeto. Você precisará dele para executar o aplicativo de amostra descrito neste documento.

Como clonar o aplicativo de amostra

Copie os aplicativos de amostra para sua máquina local e navegue até o diretório do pubsub:

git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
cd php-docs-samples/pubsub

Como criar um tópico e uma assinatura

Crie um tópico e uma assinatura. Isso inclui especificar o endpoint que receberá as solicitações do Pub/Sub:

gcloud pubsub topics create YOUR_TOPIC_NAME
gcloud pubsub subscriptions create YOUR_SUBSCRIPTION_NAME \
    --topic YOUR_TOPIC_NAME

Como definir variáveis de ambiente

Edite o arquivo index.php para definir as variáveis do ambiente para o tópico e a assinatura:

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

Revisão de código

O aplicativo de amostra usa as bibliotecas de cliente do Google Cloud.

O aplicativo de amostra utiliza os valores definidos no arquivo app.yaml para configurar as variáveis do ambiente. O gerenciador da solicitação de push usa esses valores para confirmar que a solicitação veio do Pub/Sub e foi originada de uma fonte confiável:

runtime: php
env: flex

O aplicativo de amostra mantém uma lista global para armazenar as mensagens recebidas por essa instância:

$messages = [];

O método pull recupera as mensagens do tópico que você criou e as adiciona à lista de mensagens:

// 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);
}

O método publish publica novas mensagens no tópico:

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);
}

Como executar a amostra no local

Ao executar no local, use o SDK do Cloud para fornecer autenticação de uso das APIs do Google Cloud. Se o ambiente tiver sido configurado conforme descrito em Pré-requisitos, o comando gcloud init, que fornece essa autenticação, já terá sido executado.

Instale as dependências usando o Composer:

composer install

Defina as variáveis de ambiente antes de iniciar o aplicativo:

Como simular notificações push

Pelo aplicativo, é possível enviar mensagens localmente, mas não é possível receber mensagens push localmente. É possível simular uma mensagem de push com uma solicitação HTTP para o endpoint da notificação local. A amostra inclui o arquivo sample_message.json.

Use o cliente curl ou httpie (em inglês) para enviar um pedido HTTP POST:

Ou

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

Resposta:

Após a conclusão da solicitação, atualize localhost:8080 e veja a mensagem na lista de mensagens recebidas.

Como executar no App Engine

Para implantar o aplicativo de demonstração no App Engine usando a ferramenta de linha de comando gcloud, execute o seguinte comando no diretório em que o arquivo app.yaml está localizado:

gcloud app deploy

Agora, acesse o aplicativo em https://[YOUR_PROJECT_ID].appspot.com. Use o formulário para enviar mensagens. No entanto, não há garantias sobre qual instância do seu aplicativo receberá a notificação. É possível enviar várias mensagens e atualizar a página para ver a mensagem recebida.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente flexível do App Engine para documentos em PHP