从 GCP 发布/订阅中捕获错误代码

Posted

技术标签:

【中文标题】从 GCP 发布/订阅中捕获错误代码【英文标题】:Catch error code from GCP pub/sub 【发布时间】:2018-09-21 18:33:31 【问题描述】:

我正在为 pub/sub 使用 go 包。在我的 API 仪表板上,我看到了这个错误(google.pubsub.v1.Subscriber.StreamingPull - 错误代码 503)。根据文档(https://cloud.google.com/pubsub/docs/reference/error-codes),这似乎是瞬态条件,但最好实施退避策略(https://cloud.google.com/storage/docs/exponential-backoff)。问题是我无法理解这个错误代码在 Receive 方法上出现的位置。

这里是函数:

err = sub.Receive(ctx, func(ctx context.Context, m *pubsub.Message) 
        // Dump message
        // log.Printf("Got message: %s", m.Data)

        // Decoding coming message
        err = json.NewDecoder(bytes.NewReader(m.Data)).Decode(&msg)
        if err != nil 
            log.Printf("Error decoding - %v", err)
        

        // See streaming messages
        log.Printf(" %s : %s : Product updated for Product Id(%d) : Product Title(%s)",
            msg.AuthID,
            msg.TraceID,
            msg.Product.ID,
            msg.Product.Title,
        )

        //
        // Some business logic
        //


        // Acknowledge on recieve method
        m.Ack()
    )

    if err != context.Canceled 
        // if err != nil 
        return errors.Wrap(err, "Error occurred on recieve data from topic: blah")
    

【问题讨论】:

【参考方案1】:

Cloud Pub/Sub Go client library 将自行重试此暂时性错误,您不需要处理它。在内部,客户端库使用StreamingPull,它在其中发送请求并接收来自服务的可用消息。有时,可能会发生需要重新建立连接的断开连接事件。这就是您在 API 仪表板中看到 503 错误的原因。在这种情况下,您的代码不应出现错误,因为底层库正在处理它(包括在相关的情况下使用指数退避)。

【讨论】:

非常感谢卡马尔!这让我有点困惑,因为我没有注意到任何消息丢失或服务延迟。很高兴知道。

以上是关于从 GCP 发布/订阅中捕获错误代码的主要内容,如果未能解决你的问题,请参考以下文章

将 GCP 订阅者与 Spring Boot 集成会导致内存致命错误

GCP 云函数何时确认发布/订阅消息?

Python 2.7 和 GCP Google BigQuery:捕获文件加载错误?

捕获 PayPal 订阅取消

带有教程代码的 Google GCP 错误

捕获订阅智能按钮与 SDK 集成的错误 - Sandbox 和 Live