Go pub子库中PullWait的行为?

时间:2015-11-04 12:10:13

标签: go google-cloud-platform google-cloud-pubsub

我目前正在尝试使用Google Cloud PubSub的go library并同时查阅文档。

我的代码测试PullWait函数的行为,根据documentation执行以下操作:

  

PullWait从订阅中提取消息。如果订阅队列中没有足够的消息,它将阻塞,直到至少n个消息到达或发生超时,并且n不能大于100.

但是,我的测试表明,无论指定的值n如何,我总是会立即收到m条消息,其中m <= n。我在这里错过了什么吗?

使用的代码摘录:

msgs, err := pubsub.PullWait(subCtx, subscriptionName, 50)
if err != nil {
    log.Printf("Error when trying to pull messages from subscription: %v", err)
} else {
    for _, msg := range msgs {
        str := string(msg.Data)
        log.Printf("Message [msg-id=%s]: '%v'", msg.ID, str)

        if err := pubsub.Ack(ctx, subscriptionName, msg.AckID); err != nil {
            log.Printf("Unable to acknowledge message [ack-id=%s]: %v", msg.AckID, err)
        }
    }
}

当时队列中只包含一条消息,该消息立即返回给我:

  

2015/11/04 11:45:15留言[msg-id = 2384294654226]:'你好世界我的朋友'

1 个答案:

答案 0 :(得分:2)

事实证明文档不正确。 PullWait使用returnImmediately设置为false调用底层pull method,这意味着它等待至少接收一条消息(但不超过n条消息)。我已提交了进行更正的请求。