gpt4 book ai didi

go - 我如何消费来自rabbitmq的一批消息?

转载 作者:IT王子 更新时间:2023-10-29 02:07:46 24 4
gpt4 key购买 nike

消费前我设置

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)
}

最佳答案

but still getting only one message, not a pack of five. what i'm doing wrong?

您不了解 RabbitMQ 和 QoS/prefetch 的工作原理(docs),或者它如何与 Go 客户端的 range 运算符交互。

QoS 并不意味着“批量发送消息”,它对 channel 上未确认消息的数量设置了限制。如果您要删除代码中的 d.Ack 调用并无限期地运行 for 循环,它只会运行 5 次迭代,然后停止,因为 RabbitMQ 会停止届时将消息传递给您的消费者。

我没有查看代码,但我假设您使用的 Go 客户端是以这样一种方式编写的,即一旦消息被接收和解码,它就会被传递到 msgs channel 。当您在循环中确认消息时,它向 RabbitMQ 表明可以将另一条消息传送到该 channel 。

我建议重新编写您的代码以跟踪通过 msgs channel 传送了多少消息,完成您的工作,然后使用 multiple acknowledgement同时确认它们。


注意:RabbitMQ 团队监控rabbitmq-users mailing list并且只是偶尔在 StackOverflow 上回答问题。

关于go - 我如何消费来自rabbitmq的一批消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54581179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com