如何运行Python脚本将数据发送到Google PubSub

时间:2019-01-31 05:54:08

标签: google-cloud-platform google-cloud-pubsub

在Google控制台中,我正在创建一个主题并将其发布,并且运行正常。现在,我想从一个Python脚本中完成此操作,但是我不知道将这些文件放在Google Pub / Sub中的位置。

有人可以教我如何使用脚本来完成它吗?我是新来的,我是学生。我从未使用过Google Pub / Sub。我只想制作一些随机数据,然后将其发送到Pub / Sub。

有人告诉我,我需要网络托管来运行这些脚本,对吗?请指导我简单。我已经阅读了三天的文档,现在所有事情都变得一团糟。预先谢谢你。

2 个答案:

答案 0 :(得分:1)

您需要遵循的唯一文档是Pub/Sub quickstart。您需要的“网络托管”是一个GCP项目,

您可以从GCP Cloud Shell本身进行此快速入门,并使用nanovim创建文件。只需记住在脚本中设置project_idtopic_namesubscription_name

答案 1 :(得分:1)

正如Guillermo Cacheda正确指出的,您需要的只是PUB / SUB快速入门。

但是,首先,您将需要一个部署在GCP(Google云平台)上的项目。 假设您有一个项目,并且知道project_ID。 您需要使用pip安装google-cloud-pubsub。

/ 确保您正在按照python开发者设置指南中的说明使用virtualenv /

pip install --upgrade google-cloud-pubsub

/ 创建一个可以发布或订阅的主题。 /

gcloud pubsub topics create my-topic

/ 发布消息 /

from google.cloud import pubsub_v1

/ TODO project_id =“您的Google Cloud Project ID” TODO topic_name =“您的发布/订阅主题名称” /

publisher = pubsub_v1.PublisherClient()

/ topic_path方法创建一个完全限定的标识符 格式为projects/{project_id}/topics/{topic_name} /

topic_path = publisher.topic_path(project_id, topic_name)

for n in range(1, 10):
    data = u"Message number {}".format(n)
    # Data must be a bytestring
    data = data.encode("utf-8")
    # When you publish a message, the client returns a future.
    future = publisher.publish(topic_path, data=data)
    print(future.result())

print("Published messages.")

/ 接收消息 /

from google.cloud import pubsub_v1

/ TODO project_id =“您的Google Cloud Project ID”,TODO subscription_name =“您的发布/订阅订阅名称”,TODO超时= 5.0#“订户应在几秒钟内收听消息多长时间” /

subscriber = pubsub_v1.SubscriberClient()

/ subscription_path方法创建一个完全限定的标识符 格式为projects/{project_id}/subscriptions/{subscription_name} /

subscription_path = subscriber.subscription_path(
    project_id, subscription_name
)

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

streaming_pull_future = subscriber.subscribe(
    subscription_path, callback=callback
)
print("Listening for messages on {}..\n".format(subscription_path))
如果未设置timeout,将来

/ result()将无限期阻塞, 除非首先遇到异常。 / 尝试: stream_pull_future.result(timeout = timeout) 除: streaming_pull_future.cancel()

/ 最后,为避免对您的GCP帐户收取资源费用,请使用以下命令删除主题和订阅 /

gcloud pubsub subscriptions delete my-sub
gcloud pubsub topics delete my-topic

/ 请注意,以上代码来自GCP文档python的Quickstart-client-libraries。 /