Настройка такова:
У меня есть тема, настроенная для получения сообщений, и затем у меня настроен конвейер потока данных с использованием Pub / Sub to GCS Text Template , который выводит сообщения в текстовые файлы с окнами в ведро GCS. Это работает нормально - в конечном итоге я получаю файлы в GCS, содержащие тестовые сообщения, которые я отправляю через консоль, используя кнопку «Опубликовать сообщение» в моей теме (примечание, я думал, что это сохранит часть «данных» сообщения, но похоже, что это только сохраняет тело сообщения. Но я могу обойти это).
Проблема:
Я собираюсь отправлять сообщения в тему с помощью клиента Python (в конечном итоге из App Engine) ... но я не могу заставить его работать, когда отправляю их с локального компьютера. Я следую очень простым примерам в https://cloud.google.com/pubsub/docs/publisher,, используя модуль pubsub_v1
. Даже с пакетными настройками, установленными на 1kb / 1s, я никогда не смогу успешно их опубликовать. Я продолжаю получать эту ошибку после 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')
Обновление:
После развертывания моего приложения все работает нормально во время работы. Это хорошо для моих нужд, но было бы неплохо узнать, почему он не работает при локальном запуске в режиме отладки на моем компьютере.