Spring AMQP Java 客户端中的队列大小
Posted
技术标签:
【中文标题】Spring AMQP Java 客户端中的队列大小【英文标题】:Queue Size in Spring AMQP Java client 【发布时间】:2012-07-11 21:14:27 【问题描述】:我使用 Spring amqp 1.1 版本作为我的 java 客户端。 我有一个大约有 2000 条消息的队列。我想要一个检查这个队列大小的服务,如果它是空的,它会发送一条消息说“所有项目已处理”。
我不知道如何获取当前队列大小?请帮忙
我在谷歌上搜索并找到了早期版本 1.0 中存在的一个类“RabbitBrokerAdmin”。 我认为它现在不存在于 1.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)
【讨论】:
谢谢,我也试试。 这是更好的答案。不那么老套了。【参考方案2】:您可以使用 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();
【讨论】:
以上是关于Spring AMQP Java 客户端中的队列大小的主要内容,如果未能解决你的问题,请参考以下文章
消息队列客户端开发向导二(基于 Spring 的 amqp 实现)
消息队列客户端开发向导二(基于 Spring 的 amqp 实现)
使用 AMQP 1.0 使用 Qpid 从客户端动态创建队列和主题