Como gravar e responder mensagens do Pub/Sub

ID da região

O REGION_ID é um código que o Google atribui com base na região selecionada ao criar o aplicativo. A inclusão de REGION_ID.r nos URLs do App Engine é opcional para aplicativos atuais e em breve será obrigatória para todos os aplicativos novos.

Para garantir uma transição tranquila, estamos atualizando lentamente o App Engine para usar IDs da região. Se ainda não tivermos atualizado seu projeto do Google Cloud, você não verá um ID da região para o aplicativo. Como o ID é opcional para os aplicativos atuais, não é necessário atualizar os URLs ou fazer outras alterações quando o ID da região está disponível para os aplicativos já existentes.

Saiba mais sobre IDs da região.

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

Neste documento, descrevemos como usar a biblioteca de cliente do Cloud para enviar e receber mensagens do Pub/Sub em um aplicativo PHP.

Pré-requisitos

  • Siga as instruções em "Hello, World!" para PHP no Google App Engine para configurar seu ambiente e projeto, e entender como os aplicativos PHP do Google App Engine são estruturados.
  • Anote e salve o ID do projeto. Você precisará dele para executar o aplicativo de amostra descrito neste documento.

Como clonar o app de amostra

Copie os aplicativos de amostra para sua máquina local e navegue até o diretório 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 seu arquivo index.php para configurar as variáveis de ambiente para seu tópico e sua assinatura:

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

Revisão de código

O aplicativo de exemplo usa a Biblioteca de cliente do Cloud .

O aplicativo de amostra usa os valores definidos no arquivo app.yaml para configurar variáveis de 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 = $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

Durante uma execução no local, é possível usar o SDK do Cloud para fornecer autenticação para usar as 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 notification endpoint de push local. A amostra inclui o sample_message.json do arquivo.

É possível usar curl ou um cliente httpie para enviar uma solicitação POST HTTP:

Ou

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

Resposta:

Após a conclusão da solicitação, é possível atualizar localhost:8080 e ver 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 comando a seguir no diretório em que seu arquivo app.yaml está localizado:

gcloud app deploy

Agora é possível acessar o aplicativo em https://PROJECT_ID.REGION_ID.r.appspot.com. Use o formulário para enviar mensagens, mas não há garantias de 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.