Java Rabbitmq队列为空,尽管队列中有消息
我将从JavaSpring启动应用程序向消费者发送消息,消费者是Python应用程序 除了输入命令Java Rabbitmq队列为空,尽管队列中有消息,java,python,rabbitmq,spring-amqp,spring-rabbit,Java,Python,Rabbitmq,Spring Amqp,Spring Rabbit,我将从JavaSpring启动应用程序向消费者发送消息,消费者是Python应用程序 除了输入命令rabbitmqctl list_queues显示video_queue 0这意味着队列中没有消息外,一切正常 消费者正在接收消息并执行一些长流程;因此,如果我在一行中发送多条消息,那么应该有一些消息在队列中等待。我说得对吗 制作人: @Component public class VideoProducer { private Logger logger = LoggerFactory.g
rabbitmqctl list_queues
显示video_queue 0
这意味着队列中没有消息外,一切正常
消费者正在接收消息并执行一些长流程;因此,如果我在一行中发送多条消息,那么应该有一些消息在队列中等待。我说得对吗
制作人:
@Component
public class VideoProducer {
private Logger logger = LoggerFactory.getLogger(VideoProducer.class);
private final static String BROKER_EXCHANGE_NAME = "video_exchange";
private final static String ROUTING_KEY = "video_routing_key";
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private VideoService videoService;
@Autowired
private Gson gson;
public void produceVideo(VideoDTO video) {
rabbitTemplate.convertAndSend(BROKER_EXCHANGE_NAME, ROUTING_KEY, gson.toJson(video));
}
}
}
消费者
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channelConsumer = connection.channel()
# Video Consumer Settings
channelConsumer.exchange_declare(exchange='video_exchange',
exchange_type='direct')
channelConsumer.queue_declare(queue="video_queue")
channelConsumer.queue_bind(queue="video_queue",
exchange="video_exchange",
routing_key="video_routing_key")
# Consumer Listener
def callback(ch, method, properties, body):
video_dto = eval(json.loads(body))
##Something long process here
print("Done.. ")
channelConsumer.basic_consume(queue='video_queue',
auto_ack=True,
on_message_callback=callback)
print(' [*] Waiting for messages. To exit press CTRL+C')
channelConsumer.start_consuming()
在哪里可以看到我声明的队列上的消息?因为尽管我知道队列中有消息,但使用上述命令无法看到它们
我也在使用RabbitMQ管理门户。您可以从访问localhost:15672的rabbitMQ管理端口检查和管理队列,一旦任何接收方收到来自队列的消息,它将自动从队列中删除。因此,如果您想查看您的消息,最好通过管理门户进行检查,一旦任何接收者收到这些消息,这些消息将被删除。您可以使用RMQ管理控制台查看消息和RMQ的其他信息。 使用者可能会使用多条消息并将它们放在内部队列中。若要避免这种情况,请将QOS设置为1,并将ack required设置为true。
关于QOS的更多信息:我也在使用RMQ管理控制台,但相同。在队列图中,我发送的多条消息仍然为空。我在消费者基本qos(预取计数=1)中设置。但还是一样。顺便说一下,我的使用者是用python实现的。请查看更新的屏幕截图。我已修复。现在,我的消费者只接收一条消息,在它完成任务之前,其余消息都在队列中等待。正如您所说,正确的关键字是QOS预取。但是另外,我在回调函数的末尾添加了
ch.basic\u ack(delivery\u tag=method.delivery\u tag)
。我可以看到排队等候的消息!我也使用rabbitMQ管理门户。我可以从图表中看到消息速率,但在队列图表中没有任何内容。“我的消费者消息回调”中的进程很长,因此其他消息应该在队列中等待。在您的队列名称前面会有一个标记为“传入”的collumn(如果我没有错的话)你可以看到你的消息,只要没有接收者收到它的空消息,collumn就会显示其中的消息数,尽管消息速率显示的是正确的数据。