为什么RabbitMQ阅读器正在刷新我的队列?

为什么RabbitMQ阅读器正在刷新我的队列?,rabbitmq,Rabbitmq,我有一些简单的代码可以在队列中放置一些东西: val factory = new ConnectionFactory() factory.setHost("localhost") val connection = factory.newConnection() val channel = connection.createChannel() channel.basicPublish("", "myq", null, "AAA".getBytes()) channel.basicPublish(

我有一些简单的代码可以在队列中放置一些东西:

val factory = new ConnectionFactory()
factory.setHost("localhost")
val connection = factory.newConnection()
val channel = connection.createChannel()
channel.basicPublish("", "myq", null, "AAA".getBytes()) 
channel.basicPublish("", "myq", null, "BBB".getBytes()) 
channel.basicPublish("", "myq", null, "CCC".getBytes()) 
channel.close()
connection.close()
这似乎奏效了。运行此命令后,我可以执行“rabbitmqctl list_queues”,并查看包含3项的myq

现在(在另一个过程中)我运行读卡器代码从队列中仅获取1个元素:

val factory = new ConnectionFactory()
factory.setHost("localhost")
val connection = factory.newConnection()
val channel = connection.createChannel()
channel.queueDeclare("myq", false, false, false, null)
val consumer = new QueueingConsumer(channel)
channel.basicConsume("myq", true, consumer)

// Grab just one message from queue
val delivery = consumer.nextDelivery()
val message = new String(delivery.getBody())

println(" [x] Received '" + message + "'")
channel.close()
connection.close()

这将成功检索队列上的第一个项目(AAA)。但是现在,当我运行“rabbitmqctl list_queues”时,我在队列中看到0个项目,当然,重新运行我的读卡器挂起/等待,因为队列现在是空的。为什么队列中的其他项目消失了

您似乎没有使用basickos。将basicQos设置为1后,您就可以实现您想要的,否则RabbitMQ将认为预回迁设置是无限的,并将所有消息(或尽可能多的消息)发送到首先执行basicConsume()的进程


更多信息:下面是“公平调度”

为什么使用空交换?