从GCP pub / sub捕获错误代码

时间:2018-04-11 18:46:55

标签: go google-cloud-pubsub

我正在使用go package for pub / sub。在我的API信息中心,我看到了这个错误(google.pubsub.v1.Subscriber.StreamingPull - 错误代码503)。根据文档(https://cloud.google.com/pubsub/docs/reference/error-codes),它似乎是暂时的条件,但更好地实现退避策略(https://cloud.google.com/storage/docs/exponential-backoff)。问题是我无法将这个错误代码放在接收方法的哪个地方。

这是func:

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 个答案:

答案 0 :(得分:2)

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