Python idiomatic client for Google Cloud Pub / Sub
$ pip install --upgrade google-cloud-pubsub
For more information on setting up your Python development environment,
such as installing pip
and virtualenv
on your system, please refer
to Python Development Environment Setup Guide for Google Cloud Platform.
With google-cloud-python
we try to make authentication as painless as
possible. Check out the Authentication section in our documentation to
learn more. You may also find the authentication document shared by all
the google-cloud-*
libraries to be helpful.
Google Cloud Pub/Sub (Pub/Sub API docs) is designed to provide 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. By decoupling senders and
receivers, Google Cloud Pub/Sub allows developers to communicate between
independently written applications.
See the google-cloud-python
API Pub/Sub documentation to learn how to connect
to Cloud Pub/Sub using this Client Library.
To publish data to Cloud Pub/Sub you must create a topic, and then publish messages to it
import os
from google.cloud import pubsub
publisher = pubsub.PublisherClient()
topic_name = 'projects/{project_id}/topics/{topic}'.format(
project_id=os.getenv('GOOGLE_CLOUD_PROJECT'),
topic='MY_TOPIC_NAME', # Set this to something appropriate.
)
publisher.create_topic(topic_name)
publisher.publish(topic_name, b'My first message!', spam='eggs')
To learn more, consult the publishing documentation.
To subscribe to data in Cloud Pub/Sub, you create a subscription based on the topic, and subscribe to that.
import os
from google.cloud import pubsub
subscriber = pubsub.SubscriberClient()
topic_name = 'projects/{project_id}/topics/{topic}'.format(
project_id=os.getenv('GOOGLE_CLOUD_PROJECT'),
topic='MY_TOPIC_NAME', # Set this to something appropriate.
)
subscription_name = 'projects/{project_id}/subscriptions/{sub}'.format(
project_id=os.getenv('GOOGLE_CLOUD_PROJECT'),
sub='MY_SUBSCRIPTION_NAME', # Set this to something appropriate.
)
subscriber.create_subscription(
name=subscription_name, topic=topic_name)
subscription = subscriber.subscribe(subscription_name)
The subscription is opened asychronously, and messages are processed by use of a callback.
def callback(message):
print(message.data)
message.ack()
subscription.open(callback)
To learn more, consult the subscriber documentation.