正如您共享的有关错误代码的文档链接中所解释的,当 Pub/Sub 服务无法处理请求时,将返回 HTTP 代码 503(“UNAVAILABLE”)。一般来说,人们可以说这些类型的错误往往是暂时的,并且没有办法避免它们,您可以按照重试策略(例如我将很快评论的策略)来解决它们。
Google Cloud Pub/Sub SLA 显示了此服务的保证正常运行时间。正如您所看到的,它不是 100%,因为可能会发生暂时性错误,考虑到您遵循建议的实施指数退避重试策略的做法,这不会极大地干扰您的服务。
此文档页面显示了指数退避重试策略的示例实现。此示例适用于 Google Cloud Storage,但它可以(并且应该)应用于任何其他类似的服务。它包括通过增加退避来重试失败的 Pub/Sub 请求,以增加请求成功的概率。这是推荐的最佳实践和克服暂时性问题的推荐方法。
StreamingPull 的错误率是 100%。
StreamingPull 流始终以非正常状态 (HTTP 503) 终止。请注意,与常规 RPC 不同,此处的状态仅指示流已损坏,而不是请求失败。
我在订阅时遇到了同样的错误。我设置超时后就停止了。
timeout = 600 # it was previously None
# Wrap subscriber in a 'with' block to automatically call close() when done.
with subscriber:
try:
# When `timeout` is not set, result() will block indefinitely,
# unless an exception is encountered first.
listener_streaming_pull_future.result(timeout=timeout)
except TimeoutError:
listener_streaming_pull_future.cancel() # Trigger the shutdown.
listener_streaming_pull_future.result() # Block until the shutdown is complete.