Google Cloud PubSub 在异步拉取消息时抛出 504 Deadline Exceeded 错误
Posted
技术标签:
【中文标题】Google Cloud PubSub 在异步拉取消息时抛出 504 Deadline Exceeded 错误【英文标题】:Google Cloud PubSub throws 504 Deadline Exceeded error while listening for messages in asynchronous pull 【发布时间】:2020-10-29 19:07:17 【问题描述】:我有一个订阅 PubSub 主题并使用异步拉取的服务。在闲置 10 分钟且未收到任何消息后,PubSub 会引发 504 Deadline exceeded 错误。
错误总是在大约 10 分钟后发生。我发现的每个类似问题都与同步拉取有关,而不是我使用的异步拉取。
错误信息:
INFO:google.cloud.pubsub_v1.subscriber._protocol.streaming_pull_manager:Observed non-terminating stream error 504 Deadline Exceeded
INFO:google.cloud.pubsub_v1.subscriber._protocol.streaming_pull_manager:Observed recoverable stream error 504 Deadline Exceeded
INFO:google.api_core.bidi:Re-established stream
INFO:google.cloud.pubsub_v1.subscriber._protocol.streaming_pull_manager:Observed non-terminating stream error 504 Deadline Exceeded
INFO:google.cloud.pubsub_v1.subscriber._protocol.streaming_pull_manager:Observed recoverable stream error 504 Deadline Exceeded
订阅者类别:
from google.cloud import pubsub_v1
class Subscriber():
def __init__(self):
self.subscriber = pubsub_v1.SubscriberClient()
self.project_id = "my-project-id"
self.subscription_id = "SUBSCRIPTION_MAIL_RECIEVE"
self.subscription_path = self.subscriber.subscription_path(self.project_id,
self.subscription_id)
def subscribe(self, callback):
"""
Parameters:
callback (callable): function to be called for incoming messages on given topic
"""
streaming_pull_future = self.subscriber.subscribe(self.subscription_path,
callback=callback)
return streaming_pull_future
收听消息:
subscriber = Subscriber()
pull_future = subscriber.subscribe(my_callback_function(message))
with subscriber.subscriber:
try:
print("Waiting for messages")
pull_future.result()
except TimeoutError:
pull_future.cancel()
【问题讨论】:
闲置 10 分钟的意思是在此期间您没有向您的主题发送任何消息? 是的,完全正确。没有消息发布到该主题,我的服务尝试收听“空”主题。 你试过使用streaming_pull吗? googleapis.dev/python/pubsub/latest/subscriber/api/client.html 【参考方案1】:这是正常行为,在您的流重新建立时可以忽略这些消息。如果没有重新建立流并且没有发送心跳,那么您可能需要将您的谷歌核心 API 和谷歌云 Pub/Sub 升级到最新版本。
pip install google-cloud-pubsub --upgrade
pip install google-api-core --upgrade
您还可以按照链接 https://github.com/googleapis/google-cloud-python/issues/5800 中的建议过滤这些错误消息
【讨论】:
以上是关于Google Cloud PubSub 在异步拉取消息时抛出 504 Deadline Exceeded 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何从 google-cloud-platform vminstance 中的 pubsub 回调函数调用全局变量?
google.cloud.pubsub_v1 和 google.cloud.pubsub 有啥区别?
如何使用 Google PubSub 确认 (@google-cloud/pubsub)
如何在 Google.Cloud.PubSub.V1 SubscriberServiceApiClientBuilder 中配置频道选项
Google Cloud Function - ImportError:无法从“google.cloud”(未知位置)导入名称“pubsub”