【问题标题】:How to run Python script to send data to Google PubSub如何运行 Python 脚本将数据发送到 Google PubSub
【发布时间】:2019-01-31 05:54:08
【问题描述】:

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

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

有人告诉我我需要虚拟主机来运行这些脚本,这是真的吗?请简要指导我。 3 天以来,我一直在阅读文档,现在一切都在我脑海中一团糟。提前谢谢你。

【问题讨论】:

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


【解决方案1】:

您需要关注的唯一文档是Pub/Sub quickstart。您需要的“网络托管”就是拥有一个 GCP 项目,仅此而已。

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

【讨论】:

  • 所以你是说我必须使用http协议?我真的需要后端脚本来运行脚本吗?
  • @rimsha 您需要的是Pub/Sub quickstart。这是使用 Python 脚本使用 Pub/Sub 的最小设置。按照它并使用 python your-script.py 从 shell 运行您的脚本
  • omg quickstart 有很多我应该使用的东西请指导我叔叔我会很感激的
【解决方案2】:

正如 Guillermo Cacheda 所说,您所需要的只是 PUB/SUB 快速入门。

但是,首先您需要一个部署在 GCP(谷歌云平台)上的项目。 假设您有一个项目并且您知道 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 项目 ID" TODO topic_name = "您的 Pub/Sub 主题名称"/

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 项目 ID" , TODO subscription_name = "您的 Pub/Sub 订阅名称", TODO timeout = 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))

/result() 如果未设置timeout,将来会无限期阻塞, 除非先遇到异常。/ 尝试: streaming_pull_future.result(超时=超时) 除了: streaming_pull_future.cancel()

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

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

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

【讨论】:

    猜你喜欢
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 2021-11-09
    • 2018-07-25
    相关资源
    最近更新 更多