2012-07-12 11 views
9

Estoy utilizando Spring amqp versión 1.1 como mi cliente de Java. Tengo una cola que tiene alrededor de 2000 mensajes. Quiero tener un servicio que verifique este tamaño de cola y, si está vacío, enviará un mensaje que diga "Todos los elementos procesados".Tamaño de cola en Spring Cliente de AMQP Java

¿No sé cómo obtener el tamaño actual de la cola? Por favor, ayuda

Busqué en Google y encontré una clase "RabbitBrokerAdmin" que estaba presente en la versión anterior 1.0. Creo que no está presente en 1.1 ahora.

¿Alguna sugerencia para obtener el tamaño actual de la cola?

Respuesta

14

así que sé que es un poco tarde y una solución ya ha sido encontrada pero aquí es otra manera de ver número de mensajes en las colas de

Esta solución asume que está utilizando el marco RabbitMQ primavera y definidas las colas en su configuración de aplicaciones con las siguientes etiquetas definidas

<rabbit:queue> 
<rabbit:admin> 

la clase Java:

public class QueueStatsProcessor { 
    @Autowired 
    private RabbitAdmin admin; 
    @Autowired 
    private List<Queue> rabbitQueues; 

    public void getCounts(){ 
     Properties props; 
     Integer messageCount; 
     for(Queue queue : rabbitQueues){ 
      props = admin.getQueueProperties(queue.getName()); 
      messageCount = Integer.parseInt(props.get("QUEUE_MESSAGE_COUNT").toString()); 
      System.out.println(queue.getName() + " has " + messageCount + " messages"); 
     } 
    } 
} 

También puede utilizar esta solución para leer los consumidores que actualmente se atribuye a la cola http://docs.spring.io/spring-amqp/docs/1.2.1.RELEASE/api/org/springframework/amqp/rabbit/core/RabbitAdmin.html#getQueueProperties(java.lang.String)

+0

gracias, intentaré que también. – hellojava

+0

funciona como un encanto, ¡gracias! – Zarathustra

+0

Esta es la respuesta mucho mejor. Mucho menos hacky. –

10

Usted puede utilizar la instancia RabbitAdmin para obtener los detalles de la cola, de la siguiente manera:

@Resource RabbitAdmin admin; 
... 
protected int getQueueCount(final String name) { 
    DeclareOk declareOk = admin.getRabbitTemplate().execute(new ChannelCallback<DeclareOk>() { 
     public DeclareOk doInRabbit(Channel channel) throws Exception { 
      return channel.queueDeclarePassive(name); 
     } 
    }); 
    return declareOk.getMessageCount(); 
}