Подписка Google Cloud Platform Pub - клиент Python не публикует сообщения

Настройка такова:

У меня настроена тема для приема сообщений, а затем настроен конвейер потока данных с использованием Pub / Sub to GCS Text Template, который выгружает сообщения в оконные текстовые файлы в GCS Bucket. Это работает нормально - в конечном итоге я получаю файлы в GCS, содержащие тестовые сообщения, которые я отправляю через консоль с помощью кнопки «Опубликовать сообщение» в моей теме (примечание стороны, я думал, что это сохранит часть сообщения с «данными», но похоже, что он сохраняет только тело сообщения, но я могу это обойти).

Проблема:

Я собираюсь отправлять сообщения в тему с помощью клиента python (в конечном итоге из App Engine) ... но я не могу заставить его работать, когда отправляю их со своего локального компьютера. Я следую очень простым примерам в https://cloud.google.com/pubsub/docs/publisher, используя модуль pubsub_v1. Даже с пакетными настройками, установленными на 1 КБ / 1 с, я никогда не смогу добиться успешной публикации. Я продолжаю получать эту ошибку через 5 минут без ответа:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/path/to/environment/lib/python2.7/site-packages/google/cloud/pubsub_v1/publisher/batch/thread.py", line 239, in monitor
    return self._commit()
  File "/path/to/environment/lib/python2.7/site-packages/google/cloud/pubsub_v1/publisher/batch/thread.py", line 204, in _commit
    self._messages,
  File "/path/to/environment/lib/python2.7/site-packages/google/cloud/pubsub_v1/gapic/publisher_client.py", line 325, in publish
    return self._publish(request, retry=retry, timeout=timeout)
  File "/path/to/environment/lib/python2.7/site-packages/google/api_core/gapic_v1/method.py", line 139, in __call__
    return wrapped_func(*args, **kwargs)
  File "/path/to/environment/lib/python2.7/site-packages/google/api_core/retry.py", line 260, in retry_wrapped_func
    on_error=on_error,
  File "/path/to/environment/lib/python2.7/site-packages/google/api_core/retry.py", line 195, in retry_target
    last_exc)
  File "/path/to/environment/lib/python2.7/site-packages/six.py", line 737, in raise_from
    raise value
RetryError: Deadline of 600.0s exceeded while calling <functools.partial object at 0x10662de68>, last exception: 503 Getting metadata from plugin failed with error: ('invalid_grant: Bad Request', u'{\n  "error" : "invalid_grant",\n  "error_description" : "Bad Request"\n}')

Пример кода:

>>> from google.cloud import pubsub_v1
>>> BATCH_SETTINGS = pubsub_v1.types.BatchSettings(max_bytes=1024,max_latency=1)
>>> publisher = pubsub_v1.PublisherClient(BATCH_SETTINGS)
>>> topic_path = publisher.topic_path("my-project", "topic-name")
>>> publisher.publish(topic_path, b'first message from python 3:38:59')

Обновление: после развертывания моего приложения все работает нормально в рабочей среде. Это подходит для моих нужд, но все же было бы неплохо узнать, почему это не работает при локальной работе в режиме отладки на моем компьютере.


person KevinTydlacka    schedule 03.07.2018    source источник
comment
Это сообщение об ошибке обычно указывает на проблему аутентификации (см. здесь в разделе invalid_grant). Как пройти аутентификацию? Вы также можете проверить это Комментарий к проблеме github, который связывает ошибку с настройками системного времени.   -  person Lefteris S    schedule 05.07.2018


Ответы (1)


Это известная проблема, которая может возникнуть, когда вы не сможете пройти аутентификацию, если системные часы среды, в которой вы запускаете python, не синхронизированы. Трудно понять, как синхронизировать часы, не зная, на какой системе вы работаете, но вы можете увидеть здесь для получения дополнительной информации.

person Daniel Collins    schedule 22.04.2019