我正在使用RabbitMQ在主服务器和多个工作节点之间进行通信。
主人解决问题,在队列中播种一个值。工作人员读取队列,做东西,并且通常为其他工作人员将更多工作项写入同一队列。
跑1个ea。主人/工人,我让事情运行一点然后关闭工人。我的期望是RabbitMQ中的队列大小/内容将在工作人员停止时保持不变(工作人员是唯一的消费者)。
不幸的是,我发现在工作人员终止(连接/频道关闭)后不久我丢失了队列的内容。在典型的运行中,当我关闭我唯一的工人/消费者时,我将在队列中有100多个项目。 片刻之后我的队列长度为0.任何人都知道为什么?此时我的主人还活着并且在队列中什么都不做。
(请注意,rabbitmq-server没有发生任何变化......它仍在运行。)
我的用法:
In Master:
Declared:
channel.queueDeclare("my_q", false, false, false, null)
Written:
channel.basicPublish("","my_q", null, "content".getBytes())
In Worker:
Declared:
channel.queueDeclare("my_q", false, false, false, null)
channel.basicQos(1)
val consumer = new QueueingConsumer(channel)
channel.basicConsume("my_q", false, consumer)
Read:
val delivery = consumer.nextDelivery()
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false)
Write:
channel.basicPublish("", "my_q", null, "content".getBytes())