google.api_core.exceptions.ServiceUnavailable: 503 Крайний срок превышен - PullRequest
0 голосов
/ 20 февраля 2020

google.api_core.exceptions.ServiceUnavailable: превышен крайний срок 503
с использованием python 3.7, google-cloud-pubsub == 1.1.0 публикация данных в topi c. На моем локальном компьютере он отлично работает и может публиковать данные sh на этом топике c, а также может извлекать данные с этого топика c через подписчика. но не понимаю, что он не работает, когда я развертываю код на сервере, и происходит сбой при INLINE ERROR , однако, когда я явно вызываю метод издателя на сервере, он также хорошо публикуется на сервере box.code, который не работает в при публикации ниже строки:

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.publi sh (self._topi c, self ._messages) Файл "/usr/local/lib/python3.7/site-packages/google/cloud/pubsub_v1/gapic/publisher_client.py", строка 498, в запросе на публикацию, retry = retry, timeout = timeout, metadata = файл метаданных "/usr/local/lib/python3.7/site-packages/google/api_core/gapic_v1/method.py", строка 143, в вызов , возврат wrapped_fun c ( * args, ** kwargs) Файл "/usr/local/lib/python3.7/site-packages/google/api_core/retry.py", l ine 286, в retry_wrapped_func on_error = on_error, Файл "/usr/local/lib/python3.7/site-packages/google/api_core/retry.py", строка 206, в retry_target last_ex c, Файл "" , строка 3, в yield_from от google.api_core.exceptions.RetryError: Превышен крайний срок 60.0 с при вызове functools.partial (.error_remapped_callable 0x7f67d064e950>

1 Ответ

0 голосов
/ 21 февраля 2020

Вы должны попытаться разделить ваши данные на части разумного размера (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))
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...