[rabbitmq-discuss] RE : test of a existing queue

Gary Russell grussell at vmware.com
Fri Feb 22 17:58:18 GMT 2013


We could, perhaps add a convenience method to RabbitAdmin (boolean queueExists(String queueName)). 


Feel free to open a New Feature issue: https://jira.springsource.org/browse/AMQP 


The queue specified on the <rabbit:template/> is ONLY used for the receive() methods - it is the default queue used if no queue is specified via the receive API. 


Like I said, you don't SEND to a queue, you send to an exchange. 

----- Original Message -----

From: "Cyril LECLERC" <Cyril.LECLERC at pragmaconsult.lu> 
To: "Discussions about RabbitMQ" <rabbitmq-discuss at lists.rabbitmq.com> 
Sent: Friday, February 22, 2013 12:00:09 PM 
Subject: [rabbitmq-discuss] RE : test of a existing queue 


thank you for your reactivity 

channel.queueDeclarePassive(queueName) will throw an exception if the queue doesn't exist. 

Yes but the solution needs to use a Channel object, use @Inject of the factory, and it is not a boolean method so utilisation of spring amqp has no avantage and more it closes the channel connection!!!!we have to declare az new channel because spring create one by default plus all my consumers...for the moment my code is like this (in a wicket appplication) : 

@Inject 
AmqpTemplate amqpTemplate; 
amqpTemplate.convertAndSend("queue", messageField.getValue().toString()); 

my spring configuration : 

<!-- now we can use --> 
<context:property-placeholder location="${ext.properties.dir}" /> 

<rabbit:connection-factory id="rabbitConnectionFactory" 
host="${config.amqp.server}" username="${config.amqp.username}" password="${config.amqp.password}" /> 

<!-- Creates a org.springframework.amqp.rabbit.core.RabbitTemplate for access 
to the broker --> 
<rabbit:template id="amqpTemplate" connection-factory="rabbitConnectionFactory" /> 

<!-- Creates a queue for consumers to retrieve messages --> 
<rabbit:queue id="queue" name="${config.amqp.queuename}" /> 

<bean id="messageListener" class="lu.pragmaconsult.geocamp.receiver.MessageHandler" /> 

<rabbit:listener-container 
connection-factory="rabbitConnectionFactory" concurrency="${config.amqp.nbconsumer}" 
auto-startup="true"> 
<rabbit:listener queues="queue" ref="messageListener" /> 
</rabbit:listener-container> 


If i use your advice : 

@Inject 
AmqpTemplate amqpTemplate; 

Channel channel; 
@Inject 
ConnectionFactory rabbitConnectionFactory; 

amqpTemplate.convertAndSend("queue", messageField.getValue().toString()); 


channel =(Channel) rabbitConnectionFactory.createConnection().createChannel(true); 

try { 
channel.queueDeclarePassive("queue/GeoCampQueue3"); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 

//maybe add the code for verify the queue 
amqpTemplate.convertAndSend("queue/GeoCampQueue3", messageField.getValue().toString()); 


it is not what i want moreover i want the name of queue come from spring and not in code. 


No, you can't specify the queue name in the send methods - you don't send to a queue, you send to an exchange, and it routes it to the queue. 

if the queue is binding to the exchange by default, it is in direct so the queue name is my "routing key", if i put the name of the exchange ("") nothing happening 

i try this : 

<rabbit:template id="amqpTemplate" connection-factory="rabbitConnectionFactory" queue="queue" exchange="" routing-key=""/> 

but the exchange and routing key is like this by default, so my template don't send automatiqueliy to my queue directly by spring configuration..... 

have you got any idéas???? 

________________________________________ 
De : rabbitmq-discuss-bounces at lists.rabbitmq.com [rabbitmq-discuss-bounces at lists.rabbitmq.com] de la part de Gary Russell [grussell at vmware.com] 
Date d'envoi : vendredi 22 février 2013 17:22 
À : Discussions about RabbitMQ 
Objet : Re: [rabbitmq-discuss] test of a existing queue 

channel.queueDeclarePassive(queueName) will throw an exception if the queue doesn't exist. 

You can get a channel by 

Channel channel = factory.createConnection().createChannel(false); 

where factory is a reference to the CachingConnectionFactory. 

No, you can't specify the queue name in the send methods - you don't send to a queue, you send to an exchange, and it routes it to the queue. 

----- Original Message ----- 
From: "Cyril LECLERC" <Cyril.LECLERC at pragmaconsult.lu> 
To: "Discussions about RabbitMQ" <rabbitmq-discuss at lists.rabbitmq.com> 
Sent: Friday, February 22, 2013 10:54:53 AM 
Subject: [rabbitmq-discuss] test of a existing queue 

Hello, 

How we can test if a queue exits in application? Without the queueDeclare because it is not what i want, indeed, if i use amqpTemplate.convertAndSend(), and the queue does'nt existing, nothing will happen, but i have to know if the queue configured is existing, but not create it...because we use spring amqp. 

Moreover how we can configure the name of the queue in this method (amqpTemplate.convertAndSend()) because it takes one string argument but when it is configured in spring i don't have to configure in the code i want to use spring configuration ... 

thanks.... 

Cyril 
_______________________________________________ 
rabbitmq-discuss mailing list 
rabbitmq-discuss at lists.rabbitmq.com 
https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss 
_______________________________________________ 
rabbitmq-discuss mailing list 
rabbitmq-discuss at lists.rabbitmq.com 
https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss 

-- 
This email was Virus checked by Pragma Consult Security Gateway. 

_______________________________________________ 
rabbitmq-discuss mailing list 
rabbitmq-discuss at lists.rabbitmq.com 
https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/attachments/20130222/f453c0dc/attachment.htm>


More information about the rabbitmq-discuss mailing list