为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
万千封印 2023-06-05 17:34:43
在消费之前我设置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 是如何工作的(文档),或者它如何与rangeGo 客户端的操作员交互。

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

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

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

查看完整回答
反对 回复 2023-06-05
  • 1 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信