ID da região
O REGION_ID
é um código abreviado que a Google atribui com base na região que seleciona quando cria a sua app. O código não corresponde a um país ou uma província, embora alguns IDs de regiões possam parecer semelhantes aos códigos de países e províncias usados frequentemente. Para apps criadas após
fevereiro de 2020, REGION_ID.r
está incluído nos
URLs do App Engine. Para apps existentes criadas antes desta data, o
ID da região é opcional no URL.
Saiba mais acerca dos IDs de regiões.
O Pub/Sub oferece mensagens assíncronas fiáveis de muitos para muitos entre aplicações. As aplicações de publicadores podem enviar mensagens para um tópico, e outras aplicações podem subscrever esse tópico para receber as mensagens.
Este documento descreve como usar a biblioteca cliente do Google Cloud para enviar e receber mensagens do Pub/Sub numa app Java 8.
Pré-requisitos
- Siga as instruções em "Olá, mundo!" para Java 8 no App Engine para configurar o seu ambiente e projeto, e para compreender como as apps Java 8 do App Engine estão estruturadas.
- Anote e guarde o ID do projeto, porque vai precisar dele para executar a aplicação de exemplo descrita neste documento.
Clonar a app de exemplo
Copie as apps de exemplo para a sua máquina local e navegue para o diretório pubsub
:
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/appengine-java8/pubsub
Criar um tópico e uma subscrição
Crie um tópico e uma subscrição, que inclui a especificação do ponto final para o qual o servidor Pub/Sub deve enviar pedidos:
bv # Configure the topic gcloud pubsub topics create YOUR_TOPIC_NAME # Configure the push subscription gcloud pubsub subscriptions create YOUR_SUBSCRIPTION_NAME \ --topic=YOUR_TOPIC_NAME \ --push-endpoint=https://YOUR_PROJECT_ID.REGION_ID.r.appspot.com/push-handlers/receive_messages?token=YOUR_TOKEN \ --ack-deadline=10
Substitua YOUR_TOKEN
por um token aleatório secreto. O ponto final de envio usa-o para validar pedidos.
Para usar o Pub/Sub com autenticação, crie outra subscrição:
# Configure the push subscription gcloud pubsub subscriptions create YOUR_SUBSCRIPTION_NAME \ --topic=YOUR_TOPIC_NAME \ --push-auth-service-account=YOUR-SERVICE-ACCOUNT-EMAIL\ --push-auth-token-audience=OPTIONAL_AUDIENCE_OVERRIDE\ --push-endpoint=https://YOUR_PROJECT_ID.REGION_ID.r.appspot.com/push-handlers/receive_messages?token=YOUR_TOKEN \ --ack-deadline=10 # Your service agent # `service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com` needs to have the # `iam.serviceAccountTokenCreator` role. PUBSUB_SERVICE_ACCOUNT="service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${PUBSUB_SERVICE_ACCOUNT}"\ --role='roles/iam.serviceAccountTokenCreator'
Substitua YOUR-SERVICE-ACCOUNT-EMAIL
pelo email da sua conta de serviço.
Definir variáveis de ambiente
Edite o ficheiro
appengine-web.xml
para definir as variáveis de ambiente para o seu tópico e token de validação:
Revisão de código
A app de exemplo usa a biblioteca do cliente do Google Cloud.A app de exemplo usa os valores que define no ficheiro
appengine-web.xml
para configurar as variáveis de ambiente. O controlador de pedidos push usa estes valores para
confirmar que o pedido foi enviado pelo Pub/Sub e teve origem numa
fonte fidedigna:
String pubsubVerificationToken = System.getenv("PUBSUB_VERIFICATION_TOKEN");
A app de exemplo mantém uma instância da base de dados do Cloud Datastore para armazenar mensagens.
O servlet PubSubPush
recebe mensagens enviadas por push e adiciona-as à instância da base de dados messageRepository
:
O servlet PubSubPublish
interage com a app Web do App Engine para
publicar novas mensagens e apresentar mensagens recebidas:
Executar o exemplo localmente
Quando executado localmente, pode usar a CLI Google Cloud para fornecer autenticação
para usar as APIs Google Cloud. Partindo do princípio de que configurou o seu ambiente conforme descrito em Pré-requisitos, já executou o comando gcloud init
, que fornece esta autenticação.
mvn clean package
Em seguida, defina as variáveis de ambiente antes de iniciar a aplicação:
export PUBSUB_VERIFICATION_TOKEN=[your-verification-token]
export PUBSUB_TOPIC=[your-topic]
mvn appengine:run
Simular notificações push
A aplicação pode enviar mensagens localmente, mas não consegue receber mensagens push localmente. No entanto, pode simular uma mensagem push fazendo um pedido HTTP ao ponto final de notificação push local. A amostra inclui o ficheiro
sample_message.json
.
Pode usar curl
ou
um cliente httpie
para
enviar um pedido 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
Date: Wed, 26 Apr 2017 00:03:28 GMT
Content-Length: 0
Server: Jetty(9.3.8.v20160314)
Após a conclusão do pedido, pode atualizar localhost:8080
e ver a mensagem na lista de mensagens recebidas.
Em execução no App Engine
Para implementar a app de demonstração no App Engine através da ferramenta de linha de comandos gcloud
, execute o seguinte comando a partir do diretório onde se encontra o ficheiro pom.xml
:
mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID
Substitua PROJECT_ID pelo ID do seu Google Cloud projeto. Se o seu ficheiro pom.xml
já
especificar o seu
ID do projeto, não precisa de incluir a propriedade -Dapp.deploy.projectId
no
comando que executar.
Já pode aceder à aplicação em
https://PROJECT_ID.REGION_ID.r.appspot.com
.
Pode usar o formulário para enviar mensagens, mas não há garantia de que a notificação seja recebida por uma instância específica da sua aplicação. Pode enviar várias mensagens e atualizar a página para ver a mensagem recebida.