Como gravar e responder mensagens do Pub/Sub

ID da região

O REGION_ID é um código abreviado que o Google atribui com base na região que você selecionou ao criar o aplicativo. O código não corresponde a um país ou estado, ainda que alguns IDs de região sejam semelhantes aos códigos de país e estado geralmente usados. Para apps criados após fevereiro de 2020, o REGION_ID.r está incluído nos URLs do App Engine. Para apps existentes criados antes dessa data, o ID da região é opcional no URL.

Saiba mais sobre IDs de região.

O Pub/Sub 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 assinar esse 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:

    $container->set('topic', 'php-example-topic');
    $container->set('subscription', 'php-example-subscription');

    Revisão de código

    O aplicativo de amostra 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 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 = (string) $request->getBody()) {
        // Publish the pubsub message to the topic
        $pubsub = new PubSubClient([
            'projectId' => $projectId,
        ]);
        $topic = $pubsub->topic($topicName);
        $topic->publish(['data' => $message]);
        return $response->withStatus(204);
    }

    Executar a amostra no local

    Com a Google Cloud CLI em execução no local, é possível fornecer autenticação para usar as APIs do Google Cloud. Se tiver configurado o ambiente conforme descrito nos Pré-requisitos, você já terá executado o comando gcloud init, que fornece essa autenticação.

    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:

    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.