dongzexi5125 2019-02-07 19:47
浏览 122
已采纳

如何使用Rabbitmq的一批消息?

Before consuming i set

consumeChannel.Qos(5,0,false)

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

full code:

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条回答 默认 最新

  • 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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 目标计数模型训练过程中的问题
  • ¥100 Acess连接SQL 数据库后 不能用中文筛选
  • ¥15 用友U9Cloud的webapi
  • ¥20 电脑拓展屏桌面被莫名遮挡
  • ¥20 ensp,用局域网解决
  • ¥15 Python语言实验
  • ¥15 我每周要在投影仪优酷上自动连续播放112场电影,我每一周遥控操作一次投影仪,并使得电影永远不重复播放,请问怎样操作好呢?有那么多电影看吗?
  • ¥20 电脑重启停留在grub界面,引导出错需修复
  • ¥15 matlab透明图叠加
  • ¥50 基于stm32l4系列 使用blunrg-ms的ble gatt 创建 hid 服务失败