Python Client for Google Cloud Pub / Sub¶
Google Cloud Pub / Sub is a fully-managed real-time messaging service that allows you to send and receive messages between independent applications. You can leverage Cloud Pub/Sub’s flexibility to decouple systems and components hosted on Google Cloud Platform or elsewhere on the Internet. By building on the same technology Google uses, Cloud Pub / Sub is designed to provide “at least once” delivery at low latency with on-demand scalability to 1 million messages per second (and beyond).
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.
Quick Start¶
In order to use this library, you first need to go through the following steps:
Installation¶
Install this library in a virtualenv using pip. virtualenv is a tool to create isolated Python environments. The basic problem it addresses is one of dependencies and versions, and indirectly permissions.
With virtualenv, it’s possible to install this library without needing system install permissions, and without clashing with the installed system dependencies.
Supported Python Versions¶
Python >= 3.6
Deprecated Python Versions¶
Python == 2.7.
The last version of this library compatible with Python 2.7 is google-cloud-pubsub==1.7.0.
Mac/Linux¶
pip install virtualenv
virtualenv <your-env>
source <your-env>/bin/activate
<your-env>/bin/pip install google-cloud-pubsub
Windows¶
pip install virtualenv
virtualenv <your-env>
<your-env>\Scripts\activate
<your-env>\Scripts\pip.exe install google-cloud-pubsub
Example Usage¶
Publishing¶
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_v1
publisher = pubsub_v1.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(name=topic_name)
future = publisher.publish(topic_name, b'My first message!', spam='eggs')
future.result()
To learn more, consult the publishing documentation.
Subscribing¶
To subscribe to data in Cloud Pub/Sub, you create a subscription based on the topic, and subscribe to that, passing a callback function.
import os
from google.cloud import pubsub_v1
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.
)
def callback(message):
print(message.data)
message.ack()
with pubsub_v1.SubscriberClient() as subscriber:
subscriber.create_subscription(
name=subscription_name, topic=topic_name)
future = subscriber.subscribe(subscription_name, callback)
The future returned by the call to subscriber.subscribe
can be used to
block the current thread until a given condition obtains:
try:
future.result()
except KeyboardInterrupt:
future.cancel()
It is also possible to pull messages in a synchronous (blocking) fashion. To learn more about subscribing, consult the subscriber documentation.
Authentication¶
It is possible to specify the authentication method to use with the Pub/Sub clients. This can be done by providing an explicit Credentials instance. Support for various authentication methods is available from the google-auth library.
For example, to use JSON Web Tokens, provide a google.auth.jwt.Credentials instance:
import json
from google.auth import jwt
service_account_info = json.load(open("service-account-info.json"))
audience = "https://pubsub.googleapis.com/google.pubsub.v1.Subscriber"
credentials = jwt.Credentials.from_service_account_info(
service_account_info, audience=audience
)
subscriber = pubsub_v1.SubscriberClient(credentials=credentials)
# The same for the publisher, except that the "audience" claim needs to be adjusted
publisher_audience = "https://pubsub.googleapis.com/google.pubsub.v1.Publisher"
credentials_pub = credentials.with_claims(audience=publisher_audience)
publisher = pubsub_v1.PublisherClient(credentials=credentials_pub)
Versioning¶
This library follows Semantic Versioning.
It is currently in major version one (1.y.z), which means that the public API should be considered stable.
Contributing¶
Contributions to this library are always welcome and highly encouraged.
See the CONTRIBUTING doc for more information on how to get started.
Community¶
Google Cloud Platform Python developers hang out in Slack in the #python
channel, click here to get an invitation.
License¶
Apache 2.0 - See the LICENSE for more information.
Note
Because this client uses grpc
library, it is safe to
share instances across threads. In multiprocessing scenarios, the best
practice is to create client instances after the invocation of
os.fork()
by multiprocessing.pool.Pool
or
multiprocessing.Process
.
API Documentation¶
Note
The client library version (currently 2.x
) should not be confused with the
backend API version (currently v1
), hence some references to v1
can be found
across the documentation.
Migration Guide¶
See the guide below for instructions on migrating to the 2.x release of this library.
Changelog¶
For a list of all google-cloud-pubsub
releases:
- Changelog
- 2.7.1 (2021-08-13)
- Bug Fixes
- 2.7.0 (2021-07-24)
- 2.6.1
- 2.6.0 (2021-06-17)
- 2.5.0 (2021-05-18)
- 2.4.2
- 2.4.1 (2021-03-30)
- 2.4.0
- 2.3.0 (2021-02-08)
- 2.2.0 (2020-11-16)
- 2.1.0
- 2.0.0
- 1.7.0 (2020-07-13)
- 1.6.1 (2020-06-30)
- 1.6.0 (2020-06-09)
- 1.5.0 (2020-05-04)
- 1.4.3 (2020-04-16)
- 1.4.2 (2020-03-25)
- 1.4.1 (2020-03-23)
- 1.4.0 (2020-03-06)
- 1.3.1 (2020-02-28)
- 1.3.0 (2020-02-20)
- 1.2.0 (2020-02-05)
- 1.1.0
- 1.0.2
- 1.0.1
- 1.0.0
- 0.45.0
- 0.44.0
- 0.43.0
- 0.42.1
- 0.42.0
- 0.41.0
- 0.40.0
- 0.39.1
- 0.39.0
- 0.38.0
- 0.37.2
- 0.37.1
- 0.37.0
- 0.36.0
- 0.35.4
- 0.35.3
- 0.35.2
- 0.35.1
- 0.35.0
- 0.34.0
- 0.33.1
- 0.33.0
- 0.32.1
- 0.32.0
- 0.31.0
- 0.30.1
- 0.30.0
- 0.29.4
- 0.29.3
- 0.29.2
- 0.29.1
- 0.29.0