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 ??

Google Cloud Functions 部署问题

如何从 Cloud Functions 连接 Google Cloud SQL?

Google Cloud Functions 通知 iOS