【问题标题】:Google Cloud Functions to only Ack Pub/Sub on success (Problem resolved by GCP)Google Cloud Functions 仅在成功时确认 Pub/Sub(GCP 解决的问题)
【发布时间】:2017-10-11 23:38:34
【问题描述】:

早期版本的 Google Cloud Functions 在发生错误时的重试方面存在限制。此后,他们提供了解决此问题的增强功能。


我们正在使用 Pub/Sub 触发的云功能来确保电子邮件的传递。有时电子邮件服务需要很长时间才能响应,而我们的云功能在我们收到错误消息之前就终止了。由于消息已被确认,我们的电子邮件丢失了。

当我们被调用时,云函数似乎会自动向 Pub/Sub 消息发送 ACK。有没有办法延迟 ACK 直到我们的代码成功完成?或者有没有办法捕捉超时并将消息重新排队以进行传递?还有什么我们可以尝试的吗?

【问题讨论】:

    标签: google-cloud-functions google-cloud-pubsub


    【解决方案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 似乎增加了一些重试支持。我同意你的观点,答案已经改变。
    猜你喜欢
    • 2021-12-12
    • 2019-07-26
    • 2022-01-13
    • 2019-07-07
    • 1970-01-01
    • 2020-08-31
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多