用过rabbitmq的同学都知道,rabbitmq处理消息时,消息拥塞情况是要经常考虑的问题。有时我们需要根据消息拥塞的情况,来选择策略。
那么怎么办法比较方便的可以获取到消息队列的消息数呢。
下面为是基于在spring boot框架,获取rabbitmq queue的数量 比较简洁的方法,给小伙伴参考下。
1,初始化RabbimtAdmin (还有一个是配置comnectionFactory ,本人已经在application.yml配置了,所以这里不用配置connection的bean,如果没有配置的同学需要注入rabbimq的连接工厂的bean)
/**
* @author angy
* @date 2020/06/22
*/
@Component
public class RabbitMqAdminConf {
/**
* 创建 RabbitAdmin 类,这个类封装了对 RabbitMQ 管理端的操作!
*
* 比如:Exchange 操作,Queue 操作,Binding 绑定 等
*
* @param connectionFactory
* @return
*/
@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
// 只有设置为 true,spring 才会加载 RabbitAdmin 这个类
rabbitAdmin.setAutoStartup(true);
return rabbitAdmin;
}
}
2,配置application.properties
3,获取消息的数量的类和方法。如下面的例子:
/**
* rabbitMQ服务
*
* @author angy
* @date 2020/06/22
*/
@Component
public class RabbitMqService {
@Resource
RabbitAdmin rabbitAdmin;
/**
* 获取对应队列的数量;
*
* @param queue
* @return
*/
public int getMessageCount(String queue) {
AMQP.Queue.DeclareOk declareOk = rabbitAdmin.getRabbitTemplate().execute(new ChannelCallback<AMQP.Queue.DeclareOk>() {
public AMQP.Queue.DeclareOk doInRabbit(Channel channel) throws Exception {
return channel.queueDeclarePassive(queue);
}
});
return declareOk.getMessageCount();
}
}