当前位置: 首页 > 知识库问答 >
问题:

GCP云函数何时确认pub/sub消息?

谷梁楷
2023-03-14

我有一个从pub/sub消息触发的云函数。此函数从不显式确认源代码中的消息。

那么,如果确认在源代码中从未发生过,这个函数什么时候确认pub/sub消息呢?

 import base64
 def hello_pubsub(event, context):
     pubsub_message = base64.b64decode(event['data']).decode('utf-8')
     print(pubsub_message)
     raise RuntimeError('error in function')

进入test_topic并发布以Go为文本的消息。

test_function日志中将出现错误。但是,只有一个函数调用会出现错误,即使几天后也会出现这种情况。

共有1个答案

陈夜洛
2023-03-14

如果函数顺利完成,则消息为确认。如果函数错误退出,则消息为NACK。

编辑1

我已经测试了一个Go后台功能。您需要使用参数--retry部署云函数,以允许重试错误消息。否则,不会重试这些消息。

    null
type PubSubMessage struct {
    Data []byte `json:"data"`

}

func PubsubError(ctx context.Context, m PubSubMessage) error {

    switch string(m.Data) {
    case "ok":
        return nil
    case "error":
        return errors.New("it's an error")
    case "fatal":
        log.Fatal("crash")
    case "exit":
        os.Exit(1)
    }
    return nil
}

以及我是如何部署云功能的

gcloud beta functions deploy --runtime=go113 --trigger-topic=test-topic \
  --source=function --entry-point=PubsubError --region=us-central1 \
  --retry pubsuberror
 类似资料:
  • 我有一个谷歌云功能订阅了一个主题。当需要向用户发送电子邮件时,我们的Go API会向主题发布一条消息。GCF创建电子邮件对象并将其发送到SendGrid。问题是,90%的情况下,云函数会被调用两次。 订阅的确认截止日期是600秒,文件中明确说明GCF内部确认。 我知道PubSub保证后台功能至少一次交付和GCF至少一次执行。但是,这种情况在大多数情况下都会发生,我很确定这也是不对的。 有人有什么想

  • 我将pub/sub订阅逻辑包装在subscribe方法中,该方法在服务初始化期间为每个订阅调用一次: 此方法是这样调用的: 回调方法执行一系列操作,发送2封电子邮件,然后确认消息 null 有什么想法吗?

  • 我试图了解GCP pub/sub,但我有一个关于pub/sub中消息生命周期的问题。事实上,我把这篇文章作为我的参考。在这篇文章中,他们说: 一旦每个订阅的至少一个订阅者确认了该消息,Pub/Sub就从存储中删除该消息。 所以我的第一个问题是:例如,我有一个订阅a,它连接到订阅者X和订阅者Y。根据文档,当订阅者X收到消息并向订阅者a发送ACK时,Pub/Sub将从存储中删除消息,而不考虑订阅者Y是

  • 我正在构建一个事件驱动的微服务架构,它应该是云不可知的(尽可能多)<由于这最初是在GCP中进行的,我不想在配置和所有这些方面花费太长时间,我打算直接将GCP的发布/订阅用于事件队列,并在稍后处理其他云实现,但后来我遇到了Spring云数据流,这看起来很好,因为这些是Spring Boot微服务,我需要一种方法来协调它们 Spring Cloud数据流是否支持Pub Sub作为事件队列? 在配置和设

  • 如果我想发送消息到谷歌PubSub并使用它的消息。您建议使用Spring cloud GCP库还是只使用Google cloud Java API。 有人能区分这两者吗?或者与谷歌云pubsub库相比,Spring Cloud gcp提供了哪些功能。

  • 我对GCP Pub/Sub REST API感到困惑。 背景:我正在尝试使用GCP发布/订阅编写一个应用程序,其中该语言不会作为客户端库退出(我正在尝试使用R)。 因此,我需要依赖提供的REST API:https://cloud.google.com/pubsub/docs/reference/rest 根据我对REST API的理解,我们必须使用pull订阅:https://cloud.goo