google.api_core.exceptions.ServiceUnavailable: 503 крайний срок превышен
Google .api_core.exceptions.ServiceUnavailable: 503 Превышен крайний срок
с использованием python 3.7,google-cloud-pubsub ==1.1.0 публикация данных по теме. На моем локальном компьютере он работает отлично и может публиковать данные по этой теме, а также получать данные из этой темы через подписчика. но не понимаю, что он не работает, когда я развертываю код на сервере, и он не работает с INLINE ERROR, однако, когда я явно вызываю метод издателя на сервере, он также отлично публикуется через серверный ящик. код, который не работает в строке ниже при публикации:
future = publisher.publish(topic_path, data=data)
**ERROR:2020-02-20 14:24:42,714 ERROR Failed to publish 1 messages.**
Trackback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/google/api_core/grpc_helpers.py", line 57, in error_remapped_callable
return callable_(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/grpc/_channel.py", line 826, in __call__
return _end_unary_response_blocking(state, call, False, None)
File "/usr/local/lib/python3.7/site-packages/grpc/_channel.py", line 729, in _end_unary_response_blocking
raise _InactiveRpcError(state)
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
status = StatusCode.UNAVAILABLE
details = "Deadline Exceeded"
debug_error_string = "{"created":"@1582208682.711481693","description":"Deadline Exceeded","file":"src/core/ext/filters/deadline/deadline_filter.cc","file_line":69,"grpc_status":14}"
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/google/api_core/retry.py", line 184, in retry_target
return target()
File "/usr/local/lib/python3.7/site-packages/google/api_core/timeout.py", line 214, in func_with_timeout
return func(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/google/api_core/grpc_helpers.py", line 59, in error_remapped_callable
six.raise_from(exceptions.from_grpc_error(exc), exc)
File "<string>", line 3, in raise_from
google.api_core.exceptions.ServiceUnavailable: 503 Deadline Exceeded
Вышеупомянутое исключение явилось прямой причиной следующего исключения:
Отслеживание (последний вызов последним): файл "/usr/local/lib/python3.7/site-packages/google/cloud/pubsub_v1/publisher/_batch/thread.py", строка 219, в _commit response = self._client.api.publish(self._topic, self._messages) Файл "/usr/local/lib/python3.7/site-packages/google/cloud/pubsub_v1/gapic/publisher_client.py", строка 498, в запросе публикации, retry=retry, timeout=timeout, metadata=metadata File "/usr/local/lib/python3.7/site-packages/google/api_core/gapic_v1/method.py", строка 143, в вызове return wrapped_func(*args, **kwargs) Файл "/usr/local/lib/python3.7/site-packages/google/api_core/retry.py", строка 286, в retry_wrapped_func on_error=on_error, File "/usr/local/lib/python3.7/site-packages/google/api_core/retry.py", строка 206, в retry_target last_exc, File "", строка 3, в raise_from google.api_core.exceptions.RetryError: крайний срок 60,0 с превышен при вызове functools.partial(.error_remapped_callable по адресу 0x7f67d064e950>
1 ответ
Вы должны попытаться разбить свои данные на фрагменты разумного размера (max_messages) и не забудьте добавить выполненный обратный вызов.
# Loop over json containing records/rows
for idx, row in enumerate(rows_json):
publish_json(row, idx, rowmax=len(rows_json), topic_name)
# Publish messages asynchronous
def publish_json(msg, rowcount, rowmax, topic_project_id, topic_name):
batch_settings = pubsub_v1.types.BatchSettings(max_messages=100)
publisher = pubsub_v1.PublisherClient(batch_settings)
topic_path = publisher.topic_path(topic_project_id, topic_name)
future = publisher.publish(
topic_path, bytes(json.dumps(msg).encode('utf-8')))
future.add_done_callback(
lambda x: logging.info(
'Published msg with ID {} ({}/{} rows).'.format(
future.result(), rowcount, rowmax))
)