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();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章