Google Cloud Functions 仅在成功时确认 Pub/Sub(GCP 解决的问题)
Posted
技术标签:
【中文标题】Google Cloud Functions 仅在成功时确认 Pub/Sub(GCP 解决的问题)【英文标题】:Google Cloud Functions to only Ack Pub/Sub on success (Problem resolved by GCP) 【发布时间】:2017-10-11 23:38:34 【问题描述】:早期版本的 Google Cloud Functions 在发生错误时的重试方面存在限制。此后,他们提供了解决此问题的增强功能。
我们正在使用 Pub/Sub 触发的云功能来确保电子邮件的传递。有时电子邮件服务需要很长时间才能响应,而我们的云功能在我们收到错误消息之前就终止了。由于消息已被确认,我们的电子邮件丢失了。
当我们被调用时,云函数似乎会自动向 Pub/Sub 消息发送 ACK。有没有办法延迟 ACK 直到我们的代码成功完成?或者有没有办法捕捉超时并将消息重新排队以进行传递?还有什么我们可以尝试的吗?
【问题讨论】:
【参考方案1】:我从 Google 支持人员那里得知,他们目前不提供在 Pub/Sub 调用云功能时延迟 ACK 的方法。如果您想通过 Pub/Sub 使用云功能,您需要自己处理错误情况。例如,您可以让您的云函数使用重试计数重新排队重试消息。
这似乎使保证 Pub/Sub 和云功能的执行变得不必要地困难。
【讨论】:
这是一个糟糕的设计决定。他们应该把它留给云功能来确认消息。 或者只有在函数成功完成时才确认它。 关于如何克服这个问题的任何最佳实践?我考虑过使用计时器并将相同的消息再次发布到主题。有更好的吗? 这有什么更新吗?目前,我一直在使用 HTTP 触发器,我可以自己通过 2xx 响应来确认消息,但感觉这是一种不必要的解决方法。 还有另一种方法,在触发函数上设置--retry
。 cloud.google.com/functions/docs/bestpractices/retries【参考方案2】:
这是一个问题,因为函数在调用时确认消息,即使它们崩溃,也会阻止使用新的“死信”功能。
此外,它违反了文档。请参阅此代码示例后的注释: https://cloud.google.com/functions/docs/calling/pubsub#sample_code
【讨论】:
自从三年前提出这个问题以来,Google 似乎增加了一些重试支持。我同意你的观点,答案已经改变。以上是关于Google Cloud Functions 仅在成功时确认 Pub/Sub(GCP 解决的问题)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Google Python Client for Cloud Functions 获取 Google Cloud Functions 列表?
具有 Google Cloud Functions 的 Google Cloud Endpoints [关闭]
? Google Cloud Functions ?????? MongoDB Atlas ??