我怎样才能消耗从RabbitMQ的消息的批?

问题描述 投票:1回答:1

之前消耗我设置

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)
}
go rabbitmq
1个回答
1
投票

但仍然只得到一个消息,五不包。我在做什么错?

你不知道如何的RabbitMQ和QoS /预取作品(docs),或它如何与围棋客户端的range操作交互。

服务质量并不意味着“分批发送消息”,这将限制在通道上未确认的消息的数量。如果要删除d.Ack呼叫你的代码,并无限期地运行for循环,也只是5次迭代运行,然后停下来,因为RabbitMQ的将被停止传递邮件,然后到你的消费者。

我还没有审查的代码,但我假设你正在使用被写在,一旦消息已被接收并解码,它被传递到msgs通道这样的方式转到客户端。当你在循环ACK消息,它表明的RabbitMQ多了一个消息可以被传递到该通道。

我建议重新编写代码来跟踪有多少消息已经通过msgs通道被交付,做你的工作,然后用multiple acknowledgement来确认他们都在同一时间。


注:RabbitMQ的团队监控rabbitmq-users mailing list和只是有时在计算器上回答问题。

© www.soinside.com 2019 - 2024. All rights reserved.