Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting a queue without providing its all properties

I am trying to write a consumer for an existing queue.

RabbbitMQ is running in a separate instance and queue named "org-queue" is already created and binded to an exchange. org-queue is a durable queue and it has some additional properties as well.

Now I need to receive messages from this queue. I have use the below code to get instance of the queue

conn = Bunny.new
conn.start
ch = conn.create_channel    
q = ch.queue("org-queue")

It throws me an error stating different durable property. It seems by default the Bunny uses durable = false. So I've added durable true as parameter. Now it states the difference between other parameters. Do I need to specify all the parameters, to connect to it? As rabbitMQ is maintained by different environment, it is hard for me to get all the properties.

Is there a way to get list of queues and listening to the required queue in client instead of connecting to a queue by all parameters.

like image 921
sag Avatar asked Feb 16 '16 10:02

sag


People also ask

Does RabbitMQ create queue if not exists?

If queue or exchange doesn't exist then it will throw error. if exists it will not do anything. Actually, this is the correct answer. the one that has been chosen as correct, emits a potential risk of declaring and creating abandoned Queues in RabbitMQ server.

What is a durable queue?

Durable queues keep messages around persistently for any suitable consumer to consume them. Durable queues do not need to concern themselves with which consumer is going to consume the messages at some point in the future. There is just one copy of a message that any consumer in the future can consume.

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.


2 Answers

Have you tried the :passive=true parameter on queue()? A real example is the rabbitmq plugin of logstash. :passive means to only check queue existence rather than to declare it when consuming messages from it.

like image 58
Teddy Ma Avatar answered Oct 27 '22 00:10

Teddy Ma


Based on the documentation here http://reference.rubybunny.info/Bunny/Queue.html and http://reference.rubybunny.info/Bunny/Channel.html

Using the ch.queues() method you could get a hash of all the queues on that channel. Then once you find the instance of the queue you are wanting to connect to you could use the q.options() method to find out what options are on that rabbitmq queue.

Seems like a round about way to do it but might work. I haven't tested this as I don't have a rabbitmq server up at the moment.

like image 23
Jason Ormes Avatar answered Oct 27 '22 01:10

Jason Ormes