Rabbitmq队列为空,尽管队列中有消息

时间:2019-09-05 07:54:24

标签: java python rabbitmq spring-amqp spring-rabbitmq

我正在从Java Spring Boot应用程序向消费者(即Python应用程序)发送消息。

一切正常,除了我输入命令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管理门户。
enter image description here

2 个答案:

答案 0 :(得分:1)

您可以使用RMQ管理控制台查看RMQ的消息和其他信息。 使用者可能会消费多个消息并将其放入内部队列。为避免这种情况,请将QOS设置为1,并将ack required设置为true。 有关QOS的更多信息:https://www.rabbitmq.com/consumer-prefetch.html

答案 1 :(得分:0)

您可以从RabbitMQ管理端口访问localhost:15672来检查和管理队列,一旦任何接收者从队列接收到消息,它将自动从队列中删除。因此,如果您想查看您的邮件,最好通过管理门户进行检查,一旦任何接收者收到邮件,这些邮件就会被删除。