0

下面的代码订阅一个主题,几个月前就开始工作了。

from google.cloud import pubsub

def callback(message):
    print(message.data)
    message.ack()

project_id = "my_project"
topic_name = "xxx"
subscription_name = "xxx"

subscriber = pubsub.SubscriberClient()
topic = "projects/{}/topics/{}".format(project_id, topic_name)

subscription_name = 'projects/{}/subscriptions/{}'.format(project_id, subscription_name)

subscription = subscriber.subscribe(subscription_name)
future = subscription.open(callback)

try:
    future.result()
except Exception as ex:
    subscription.close()
    raise

我现在尝试运行它,但收到以下错误消息:

<模块>中的文件“pubsub_sub.py”第16行
订阅=订阅者.订阅(订阅名称)
类型错误:订阅()至少需要3个参数(给定2个)

正如Google-Cloud Pub/Sub文档中所述,看来我的代码是正确的。此外,正如我所说,同样的代码在过去也有效。有什么建议吗?

4

1 回答 1

1

文档中所述,您缺少回调。

看起来Github 上的README.rst是错误的,因为在代码中我们可以看到这 3 个参数是必需的:

def subscribe(
        self, subscription, callback, flow_control=(),
        scheduler=None):

我刚刚提出了对文件的修复以进行澄清。

编辑:

关于它以前工作的事实,您可以在 repo 中看到 pull 5237 subscribe_experimental 是如何创建的,并且此方法需要回调,与常规 subscribe不同。后来,在 pull 5274上,subscribe_experimental 被提升为订阅,这意味着现在需要回调。

如果您在提供回调时遇到错误,请确保您的所有库都是最新的。

于 2018-08-06T15:06:13.370 回答