2012-07-12 74 views
9

我使用Spring amqp 1.1版本作为我的Java客户端。 我有一个有大约2000条消息的队列。我想要一个服务来检查这个队列的大小,如果它是空的,它会发出一条消息,说“所有项目已处理”。春季队列大小AMQP Java客户端

我不知道如何获得当前队列大小?请帮助

我搜索了一下,发现了一个在早期版本1.0中出现的类“RabbitBrokerAdmin”。 我认为它现在不在1.1中。

获取当前队列大小的任何指针?

回答

14

所以我知道这是一个有点晚和解决方案已经被发现,但这里是另一种方式来看待在队列

此解决方案假定您使用的是春天的RabbitMQ框架和你的应用程序配置使用以下标记定义了你的队列定义的消息计数

<rabbit:queue> 
<rabbit:admin> 

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"); 
     } 
    } 
} 

您也可以使用此解决方案来读取附加到队列 http://docs.spring.io/spring-amqp/docs/1.2.1.RELEASE/api/org/springframework/amqp/rabbit/core/RabbitAdmin.html#getQueueProperties(java.lang.String)

+0

感谢电流消费者,我会尝试为好。 – hellojava 2014-03-15 06:05:11

+0

作品很有魅力,谢谢! – Zarathustra 2014-08-05 08:30:56

+0

这是更好的答案。远不如哈克。 – 2015-06-12 14:32:43

10

可以使用RabbitAdmin实例来从队列中的细节,如下:

@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(); 
}