我使用 Spring amqp 1.1 版本作为我的 java 客户端。我有一个大约有 2000 条消息的队列。我想要一个检查这个队列大小的服务,如果它是空的,它会发送一条消息说“所有项目已处理”。
我不知道如何获取当前队列大小?请帮忙
我用谷歌搜索并找到了早期版本 1.0 中存在的一个类“RabbitBrokerAdmin”。我认为它现在不存在于 1.1 中。
获取当前队列大小的任何指针?
我使用 Spring amqp 1.1 版本作为我的 java 客户端。我有一个大约有 2000 条消息的队列。我想要一个检查这个队列大小的服务,如果它是空的,它会发送一条消息说“所有项目已处理”。
我不知道如何获取当前队列大小?请帮忙
我用谷歌搜索并找到了早期版本 1.0 中存在的一个类“RabbitBrokerAdmin”。我认为它现在不存在于 1.1 中。
获取当前队列大小的任何指针?
所以我知道这有点晚了,并且已经找到了解决方案,但这是查看队列中消息计数的另一种方法
此解决方案假定您使用的是 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)
您可以使用 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();
}