Cloud Pub/Sub provides reliable, many-to-many, asynchronous messaging between applications. Publisher applications can send messages to a topic, and other applications can subscribe to that topic to receive the messages.
This document describes how to use the Google Cloud Client Library to send and receive Cloud Pub/Sub messages in an app running in the flexible environment.
- Follow the instructions in "Hello, World!" for Java on App Engine to set up your environment and project, and to understand how App Engine Java apps are structured.
- Write down and save your project ID, because you will need it to run the sample application described in this document.
Cloning the sample app
Copy the sample apps to your local machine, and navigate to the
git clone https://github.com/GoogleCloudPlatform/java-docs-samples cd java-docs-samples/flexible/pubsub
Creating a topic and subscription
Create a topic and subscription, which includes specifying the endpoint to which the Pub/Sub server should send requests:
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
YOUR_TOKEN with a secret random token. The push endpoint uses this
to verify requests.
Setting environment variables
app.yaml file to set the environment variables for your topic
and verification token:
env_variables: PUBSUB_TOPIC: <your-topic-name> # This token is used to verify that requests originate from your # application. It can be any sufficiently random string. PUBSUB_VERIFICATION_TOKEN: <your-verification-token>
Running the sample locally
When running locally, you can use the Cloud SDK to provide authentication
to use Google Cloud APIs. Assuming you set up your environment as described in
Prerequisites, you have already run the
gcloud init command,
which provides this authentication.
mvn clean package
Then set environment variables before starting your application:
export PUBSUB_VERIFICATION_TOKEN=[your-verification-token] export PUBSUB_TOPIC=[your-topic] mvn jetty:run
Simulating push notifications
The application can send messages locally, but it is not able to receive push
messages locally. You can, however, simulate a push message by making an HTTP
request to the local push notification endpoint. The sample includes the file
You can use
httpie to send an HTTP
curl -H "Content-Type: application/json" -i --data @sample_message.json "localhost:8080/pubsub/push?token=[your-token]"
http POST ":8080/pubsub/push?token=[your-token]" < sample_message.json
HTTP/1.1 200 OK Date: Wed, 26 Apr 2017 00:03:28 GMT Content-Length: 0 Server: Jetty(9.3.8.v20160314)
After the request completes, you can refresh
localhost:8080 and see the
message in the list of received messages.
Running on App Engine
To deploy the demo app to App Engine by using the
tool, you run the following command from the directory where your
You can now access the application at
You can use the form to submit messages, but there's no guarantee of which
instance of your application will receive the notification. You can send
multiple messages and refresh the page to see the received message.