如何使用Rabbitmq的一批消息?

时间:2019-02-07 19:47:56

标签: go 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)
}

1 个答案:

答案 0 :(得分:1)

  

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

您不了解RabbitMQ和QoS /预取的工作原理(docs)或它如何与Go客户端的range运算符进行交互。

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

我还没有审查代码,但是我假设您正在使用的Go客户端是以这样的方式编写的:一旦收到并解码了一条消息,它就会被传递到msgs渠道。当您在循环中确认该消息时,它向RabbitMQ指示可以再向该频道传递一条消息。

我建议重新编写代码,以跟踪通过msgs渠道传递了多少消息,进行工作,然后使用multiple acknowledgement同时确认所有消息


注意: RabbitMQ团队监视rabbitmq-users mailing list,并且有时仅在StackOverflow上回答问题。