2019-02-07 19:47
浏览 112


Before consuming i set


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

full code:

msgs, _ := consumeChannel.Consume("ticks", "", false, false, false, false, nil, )

for d := range msgs {
    println("Received a message: %s", d.Body)
    //here will be some extra multiple message handling

图片转代码服务由CSDN问答提供 功能建议


  consumeChannel.Qos(5,  0,false)

,但仍然只收到一条消息,而不是一包5条消息。 我做错了什么?


msgs,_:= ConsumerChannel.Consume(“ ticks”,“”,false,false  ,false,false,nil,)
 for d:=范围msgs {
 println(“ Done”)
 //此处为 一些额外的多重消息处理
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dougong2005 2019-02-08 14:34

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

    You don't understand how RabbitMQ and QoS / prefetch works (docs), or how it interacts with the range operator of the Go client.

    QoS does not mean "send messages in batches", it sets a limit to the number of unacknowledged messages on a channel. If you were to remove the d.Ack call in your code and run the for loop indefinitely, it would only run for 5 iterations, then stop, because RabbitMQ would have stopped delivering messages by then to your consumer.

    I haven't reviewed the code, but I assume the Go client you're using is written in such a way that, as soon as a message has been received and decoded, it is delivered to the msgs channel. When you ack the message in the loop, it indicates to RabbitMQ that one more message can be delivered to that channel.

    I suggest re-writing your code to keep track of how many messages have been delivered via the msgs channel, do your work, and then use a multiple acknowledgement to ack them all at the same time.

    NOTE: the RabbitMQ team monitors the rabbitmq-users mailing list and only sometimes answers questions on StackOverflow.

    打赏 评论

相关推荐 更多相似问题