Py学习  »  MQ

如何使用来自rabbitmq的一批消息?

George • 6 年前 • 1832 次点击  

在我消费之前

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)
}
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30878
文章 [ 1 ]  |  最新文章 6 年前
Luke Bakken
Reply   •   1 楼
Luke Bakken    6 年前

但仍然只有一条信息,而不是一包五条。我做错什么了?

您不了解rabbitmq和qos/prefetch是如何工作的( docs 或者它如何与 range Go客户端的操作员。

QoS并不意味着“批量发送消息”,它对一个通道上未确认的消息数设置了限制。如果你要移除 d.Ack 调用代码并运行 for 无限循环,它将只运行5次迭代,然后停止,因为rabbitmq将在那时停止向您的使用者传递消息。

我没有查看代码,但我假设您使用的Go客户机是以这样的方式编写的:一旦接收到消息并对其进行解码,它就会被发送到 msgs 通道。当您在循环中确认消息时,它向rabbitmq指示可以再向该通道发送一条消息。

我建议重新编写代码以跟踪通过 味精 频道,做你的工作,然后用 multiple acknowledgement 同时将它们全部打包。


注: rabbitmq团队监控 rabbitmq-users mailing list 有时只回答stackoverflow上的问题。