我目前正在尝试使用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]:'你好世界我的朋友'
答案 0 :(得分:2)
事实证明文档不正确。 PullWait使用returnImmediately设置为false调用底层pull method,这意味着它等待至少接收一条消息(但不超过n条消息)。我已提交了进行更正的请求。