Настройка такова:
У меня настроена тема для приема сообщений, а затем настроен конвейер потока данных с использованием 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')
Обновление: после развертывания моего приложения все работает нормально в рабочей среде. Это подходит для моих нужд, но все же было бы неплохо узнать, почему это не работает при локальной работе в режиме отладки на моем компьютере.