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

RabbitMQ获取消息队列的存在消息的数量。(正在排队的消息数)

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();
    }
}