O Cloud Pub/Sub fornece 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.
Neste documento, descrevemos como usar a biblioteca de cliente do Google Cloud para enviar e receber mensagens do Cloud Pub/Sub em um aplicativo em execução no ambiente flexível.
Pré-requisitos
- Siga as instruções em "Hello, World!" para Node.js no App Engine e configure o ambiente e o projeto. Saiba também como os aplicativos do App Engine em Node.js são estruturados.
- Anote e guarde 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/nodejs-docs-samples
cd nodejs-docs-samples/appengine/pubsub
Como criar um tópico e uma assinatura
Ao criar um tópico e uma assinatura, especifique o endpoint que receberá as solicitações do servidor do Pub/Sub:
gcloud pubsub topics create YOUR_TOPIC_NAME gcloud pubsub subscriptions create YOUR_SUBSCRIPTION_NAME \ --topic YOUR_TOPIC_NAME \ --push-endpoint \ https://YOUR_PROJECT_ID.appspot.com/pubsub/push?token=YOUR_TOKEN \ --ack-deadline 10
Substitua YOUR_TOKEN
por um token aleatório secreto. Ele é usado pelo endpoint do push para verificar as solicitações.
Definir variáveis de ambiente
Edite o app.flexible.yaml
para configurar as variáveis de ambiente para o código de projeto, tópico e token de verificação:
Revisão de código
No aplicativo de amostra, são usadas as Bibliotecas do Google Cloud Client.
Para configurar variáveis de ambiente, no aplicativo de amostra são usados os valores definidos no arquivo app.flexible.yaml
. Esses valores são usados pelo gerenciador da solicitação de push para confirmar que a solicitação veio do Pub/Sub e foi originada de uma fonte confiável:
// The following environment variables are set by app.flexible.yaml when
// running on App Engine, but will need to be manually set when running locally.
var PUBSUB_VERIFICATION_TOKEN = process.env.PUBSUB_VERIFICATION_TOKEN;
var pubsub = gcloud.pubsub({
projectId: process.env.GOOGLE_CLOUD_PROJECT
});
var topic = pubsub.topic(process.env.PUBSUB_TOPIC);
No aplicativo de amostra, é mantida uma lista global para armazenar as mensagens recebidas por esta instância:
// List of all messages received by this instance
var messages = [];
Este método recebe mensagens enviadas e as adiciona à lista global messages
:
Para publicar novas mensagens e exibir as recebidas, é feita uma interação entre este método e o app da Web do App Engine:
Como executar a amostra no local
Durante uma execução no local, é possível usar o SDK do Cloud com o objetivo de 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.
Defina as variáveis de ambiente antes de iniciar o aplicativo:
export GOOGLE_CLOUD_PROJECT=[your-project-id]
export PUBSUB_VERIFICATION_TOKEN=[your-verification-token]
export PUBSUB_TOPIC=[your-topic]
npm install
npm start
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 curl
ou httpie
(em inglês) para enviar uma solicitação HTTP POST
:
curl -H "Content-Type: application/json" -i --data @sample_message.json "localhost:8080/pubsub/push?token=[your-token]"
Ou
http POST ":8080/pubsub/push?token=[your-token]" < sample_message.json
Resposta:
HTTP/1.1 200 OK
Connection: keep-alive
Date: Mon, 31 Aug 2015 22:19:50 GMT
Transfer-Encoding: chunked
X-Powered-By: Express
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 app.flexible.yaml
estiver localizado:
gcloud app deploy app.flexible.yaml
Agora, acesse o aplicativo em https://[YOUR_PROJECT_ID].appspot.com
.
Você pode usar 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.