2015-07-17 2 views
1

У меня есть несколько надежных очередей, запущенных в брокере. В какой-то момент я хочу проверить, есть ли в очереди какие-либо данные, и закрыть или убить эту очередь, если она пуста.Проверьте, есть ли у прочной очереди в rabbitMQ данные?

Я использую java для кодирования отправителей и получателей. Я знаю, что все очереди присутствуют в брокере.

Предложите свой способ сделать это.

ответ

1

Вы можете проверить значение объекта GetResponse для получения информации о том, есть ли в ней что-то в очереди или нет. Если GetResponse имеет значение NULL, вы можете удалить очередь, считая ее пустой.

ConnectionFactory factory = new ConnectionFactory(); 
     factory.setHost("localhost"); 
     Connection con = factory.newConnection(); 
     rabbitChannel = con.createChannel(); 
GetResponse response = rabbitChannel.basicGet(QUEUE_NAME, BOOLEAN_NOACK); 
if(response != null){ 
String body = new String(responseQuestion.getBody()); 
// do whatever you want to do here 
} 
else{ 
rabbitChannel.queueDelete(QUEUE_NAME); 
} 

ИЛИ

Используйте этот queueDelete(java.lang.String queue, boolean ifUnused, boolean ifEmpty)

Это будет автоматически проверить, если очередь empty и not_in_use на основе boolean вы предоставили в качестве аргументов & удалить его соответствующим образом.

+0

как точно ifUnused boolean произведение? Для меня это достойно, если он проверяет, что ни один производитель не подключен к нему, а затем закрывается. Так ли это? –

+0

@AnilKumar 'ifUnused' должен быть установлен как 'true', если очередь должна быть удалена, только если она не используется, аналогично случаю' ifEmpty' –

Смежные вопросы