在消费之前我设置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)}
1 回答
子衿沉夜
TA贡献1828条经验 获得超3个赞
但仍然只收到一条消息,而不是一包五条。我做错了什么?
您不了解 RabbitMQ 和 QoS / prefetch 是如何工作的(文档),或者它如何与range
Go 客户端的操作员交互。
QoS 并不意味着“批量发送消息”,它对通道上未确认消息的数量设置了限制。如果您要删除d.Ack
代码中的调用并for
无限期地运行循环,它只会运行 5 次迭代,然后停止,因为 RabbitMQ 届时将停止向您的消费者传递消息。
我没有查看代码,但我假设您使用的 Go 客户端是以这样一种方式编写的:一旦消息被接收和解码,它就会被传送到频道msgs
。当您在循环中确认消息时,它向 RabbitMQ 表明可以将另一条消息传递到该通道。
我建议重新编写您的代码以跟踪通过通道传递了多少消息msgs
,完成您的工作,然后使用多重确认同时确认它们。
- 1 回答
- 0 关注
- 120 浏览
添加回答
举报
0/150
提交
取消