python - 使用 python 的 Google Pubsub 模拟器

标签 python google-cloud-pubsub google-cloud-pubsub-emulator

有没有人有一个使用模拟器的非常基本的 Python 发布/订阅示例。

这是我的订阅者代码

## setup subscribers
from google.cloud import pubsub

print("subscribing to topic")


subscriber = pubsub.SubscriberClient()
subscription_path = subscriber.subscription_path(app.config['PUB_SUB_PROJECT'], app.config['PUB_SUB_TOPIC'])

def callback(message):
    print('Received message: {}'.format(message))


subscriber.subscribe(subscription_path, callback=callback)

然后这是我的发布代码

from google.cloud import pubsub
publisher = pubsub.PublisherClient()
topic_path = publisher.topic_path(app.config['PUB_SUB_PROJECT'], app.config['PUB_SUB_TOPIC'])
try:
    topic = publisher.create_topic(topic_path)
except Exception:
    app.logger.info("Topic already exists")
data = "ein test"
data = data.encode('utf-8')
publisher.publish(topic_path, data=data)
print("published topic")

似乎发布有效 -> 但我认为它实际上是发布到云队列而不是模拟器。因此我的订阅者永远不会收到任何东西。

欢迎任何提示和技巧。我相信这就像确保发布者发布到模拟器并且订阅者从模拟器读取一样简单。

最佳答案

在 Python 中,您无需更改任何代码即可使用模拟器。相反,您必须定义 PUBSUB_EMULATOR_HOSTPUBSUB_PROJECT_ID 环境变量。

设置它们的最简单方法是在启动程序之前运行 $(gcloud beta emulators pubsub env-init)。如果您在本地使用 Google App Engine,请运行该命令,然后使用 dev_appserver.py app.yaml --env_var PUBSUB_EMULATOR_HOST=${PUBSUB_EMULATOR_HOST} 启动您的应用。

这记录在 https://cloud.google.com/pubsub/docs/emulator

关于python - 使用 python 的 Google Pubsub 模拟器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52412516/

相关文章:

Firebase 函数不会看到本地运行的 pubsub 模拟器

python - Python 中是否有类似于 ftp 的 isfile() isdir() 的东西?

python - 管道代码跨越 Apache Beam/Dataflow 中的多个文件

python - 区分 Python 2.7 中的 f() 和 f(**kwargs)

android - 谷歌云。发布/订阅 Android 应用程序

google-cloud-platform - 使用 Dataproc 将 Google Pub/Sub 与 Flink Streaming 结合使用的正确方法是什么?

google-cloud-platform - 如何在Dataflow Pipeline完成时触发事件?

java - 从 Java 使用 Google Cloud PubSub 模拟器

node.js - 使用推送订阅测试 Google Cloud PubSub 模拟器

python - 跳过行,csv.DictReader