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

在消费之前我设置


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)

}


万千封印
浏览 128回答 1
1回答

子衿沉夜

但仍然只收到一条消息,而不是一包五条。我做错了什么?您不了解 RabbitMQ 和 QoS / prefetch 是如何工作的(文档),或者它如何与rangeGo 客户端的操作员交互。QoS 并不意味着“批量发送消息”,它对通道上未确认消息的数量设置了限制。如果您要删除d.Ack代码中的调用并for无限期地运行循环,它只会运行 5 次迭代,然后停止,因为 RabbitMQ 届时将停止向您的消费者传递消息。我没有查看代码,但我假设您使用的 Go 客户端是以这样一种方式编写的:一旦消息被接收和解码,它就会被传送到频道msgs。当您在循环中确认消息时,它向 RabbitMQ 表明可以将另一条消息传递到该通道。我建议重新编写您的代码以跟踪通过通道传递了多少消息msgs,完成您的工作,然后使用多重确认同时确认它们。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go