食用前我要凝固
consumeChannel.Qos(5,0,false)
,但仍然只收到一条消息,而不是一包五条消息。 我在做什么错了?
完整代码:
consumeChannel.Qos(5,0,false)
msgs, _ := consumeChannel.Consume("ticks", "", false, false, false, false, nil, )
for d := range msgs {
println("Received a message: %s", d.Body)
println("Done")
//here will be some extra multiple message handling
//d.Ack(false)
}
答案 0 :(得分:1)
,但仍然只收到一条消息,而不是一包五条消息。我在做什么错了?
您不了解RabbitMQ和QoS /预取的工作原理(docs)或它如何与Go客户端的range
运算符进行交互。
QoS并不意味着“批量发送消息”,它设置了通道上未确认消息数的限制。如果您要删除代码中的d.Ack
调用并无限期运行for
循环,则该循环仅运行5次迭代,然后停止,因为RabbitMQ届时将停止向您的使用者传递消息。
我还没有审查代码,但是我假设您正在使用的Go客户端是以这样的方式编写的:一旦收到并解码了一条消息,它就会被传递到msgs
渠道。当您在循环中确认该消息时,它向RabbitMQ指示可以再向该频道传递一条消息。
我建议重新编写代码,以跟踪通过msgs
渠道传递了多少消息,进行工作,然后使用multiple acknowledgement同时确认所有消息
注意: RabbitMQ团队监视rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。