RabbitMQ获取消息队列的存在消息的数量。(正在排队的消息数)
用过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(); } }