登录
首页 >  Golang >  Go问答

使用 Go 以特定数量从 pubsub 中获取消息的方法

来源:stackoverflow

时间:2024-03-07 20:33:22 212浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《使用 Go 以特定数量从 pubsub 中获取消息的方法》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我正在关注这篇关于如何从订阅中提取消息的文章:https://cloud.google.com/pubsub/docs/pull。

显然我最多可以拉取 1,000 条消息,但是如果我只想拉取 2 条消息,我该怎么办?提前非常感谢您!


正确答案


同步拉取支持客户端获取精确数量的消息的需求。

例如,遵循以下代码:

func pullMsgsSync(w io.Writer, projectID, subID string) error {
        // projectID := "my-project-id"
        // subID := "my-sub"
        ctx := context.Background()
        client, err := pubsub.NewClient(ctx, projectID)
        if err != nil {
                return fmt.Errorf("pubsub.NewClient: %v", err)
        }
        defer client.Close()

        sub := client.Subscription(subID)
        sub.ReceiveSettings.Synchronous = true
        sub.ReceiveSettings.MaxOutstandingMessages = 2
        ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
        defer cancel()

        var received int32
        err = sub.Receive(ctx, func(_ context.Context, msg *pubsub.Message) {
                fmt.Fprintf(w, "Got message: %q\n", string(msg.Data))
                atomic.AddInt32(&received, 1)
                msg.Ack()
        })
        if err != nil {
                return fmt.Errorf("sub.Receive: %v", err)
        }
        fmt.Fprintf(w, "Received %d messages\n", received)

        return nil
}

理论要掌握,实操不能落!以上关于《使用 Go 以特定数量从 pubsub 中获取消息的方法》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>