Google Cloud Pub/Sub SDK - подписка () принимает не менее 3 аргументов (2 дано)

Код ниже, чтобы подписаться на тему, работал несколько месяцев назад.

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, в
subscription = subscriber.subscribe(имя_подписки)
Ошибка типа: подписка () принимает как минимум 3 аргумента (2 дано)

Как указано в документации к Google-Cloud Pub/Sub, похоже, мой код правильный. Кроме того, как я уже сказал, этот код работал в прошлом. Любое предложение?

1 ответ

Как объяснено в документации, вы пропускаете обратный вызов.

Похоже, что README.rst на Github неверен, поскольку в коде мы видим, что эти 3 аргумента необходимы:

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

Я только что предложил исправление для файла для уточнения.

Редактировать:

Что касается того, что раньше это работало, вы можете увидеть в репозитории, как было создано pull 5237 subscribe_experimental, и этот метод требовал обратного вызова, в отличие от обычной подписки. Позже, при получении 5274, subscribe_experimental был повышен до подписки, что означает, что теперь требуется обратный вызов.

Если у вас возникают ошибки при предоставлении обратного вызова, убедитесь, что все ваши библиотеки обновлены.

Другие вопросы по тегам