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