Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using RabbitMQ is there a way to look at the queue contents without a dequeue operation?

As a way to learn RabbitMQ and python I'm working on a project that allows me to distribute h264 encodes between a number of computers. The basics are done, I have a daemon that runs on Linux or Mac that attaches to queue, accepts jobs and encodes them using HandBrakeCLI and acks the message once the encode is complete. I've also built a simple tool to push items into the queue.

Now I want to expand the capabilities of the tool that pushes items into the queue so that I can view what is in the queue. I'm aware of the ability to see how many items are in the queue, but I want to be able to get the actual messages so I can show what movie or TV show is waiting to be encoded yet. The idea is that the queue manager would receive messages from the encoder clients when a job has completed and then refresh the queue list.

I know there is a convoluted way of keeping the queue manager's list in sync with the actual work queue but I'd like this to be "persistent" in that I should be able to close the queue manager and reopen it later to see the queue.

like image 596
Dustin Avatar asked Jan 15 '11 15:01

Dustin


People also ask

How do I get data from RabbitMQ queue?

In the Managed Service for ClickHouse cluster, create a table on the RabbitMQ engine. Send the test data to the RabbitMQ queue. Check that the test data is present in the Managed Service for ClickHouse cluster table. Delete the resources you created.

Are RabbitMQ queues FIFO?

Queues in RabbitMQ are FIFO ("first in, first out"). Some queue features, namely priorities and requeueing by consumers, can affect the ordering as observed by consumers.

How RabbitMQ queue works?

The user sends a PDF creation request to the web application. The web application (the producer) sends a message to RabbitMQ that includes data from the request such as name and email. An exchange accepts the messages from the producer and routes them to correct message queues for PDF creation.


2 Answers

Queue browsing is not supported directly, but if you declare a queue with NO auto acknowledgements and do not ACK the messages that you receive, then you can see everything in it. After you have had a look, send a CANCEL on the channel, or disconnect and reconnect to cause all the messages to be requeued. This does increment a number in the message headers, but otherwise leaves the messages untouched.

I built an app where message ordering was not terribly important, and I frequently scanned through the queue in this way. If I found a problem, I would dump the messages into a file, fix them and resubmit.

If you only need to peek at a message or two once in a while you can do that with the RabbitMQ management plugin.

In addition, if you only need a message count, you can get that every time you declare the queue, or on a basic.get command.

like image 158
Michael Dillon Avatar answered Oct 12 '22 12:10

Michael Dillon


@MichaelDillon based on your answer to make others life easier I am putting here a no_ack example:

#!/usr/bin/env python import pika  connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) channel = connection.channel()  channel.queue_declare(queue='Q.hello')   def callback(ch, method, properties, body):     print(" [x] Received %r" % body)     # ch.basic_ack(delivery_tag=method.delivery_tag)  channel.basic_consume(callback, queue='Q.hello')  print(' [*] Waiting for messages. To exit press CTRL+C') channel.start_consuming() 
like image 28
Tomasz Avatar answered Oct 12 '22 12:10

Tomasz