Spring AMQP Java客户端中的队列大小

时间:2012-07-12 06:54:50

标签: spring rabbitmq spring-amqp

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

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

我用Google搜索并找到了一个班级" RabbitBrokerAdmin"早期版本1.0中存在的内容。 我认为它现在不存在于1.1中。

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

2 个答案:

答案 0 :(得分:16)

所以我知道这有点晚了,已经找到了一个解决方案,但这是另一种查看队列中消息计数的方法

此解决方案假设您正在使用spring 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)

答案 1 :(得分: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();
}