rabbitmq集群获取信息操作类

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpEntity;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * @Description: TODO
 * @author: qinlei
 * @date: 2020年05月28日 9:41
 */
public class MonitorRabbitmQ {
    /**
     * rabbitmq的http api 获取集群各个实例的状态信息,IP替换为自部署的相应实例的ip
     */
    private static String RABBIT_NODES_STATUS_REST_URL="http://192.168.1.2:15672/api/nodes";
    /**
     * 获取集群用户信息,ip同上
     */
    private static String RABBIT_USERS_REST_URL="http://192.168.1.2:15672/api/users";
    /**
     * rabbitmq的用户名
     */
    private static String RABBIT_USER_NAME="qinlei";
    /**
     * rabbitmq的密码
     */
    private static String RABBIT_USER_PASSWORD="qinlei";

    /**
     * 获取rabbitmq集群各个节点实例的状态信息
     * @param url
     * @param username
     * @param password
     * @return
     * @throws IOException
     */
    public static Map<String,ClusterStatus> fetchRabbitMQClusterStatus(String url,String username
            ,String password)throws IOException{
        Map<String,ClusterStatus> clusterStatusMap = new HashMap<>();
        String nodeData = getData(url,username,password);
        JsonNode jsonNode = null;
        try {
            jsonNode = JsonUtil.toJsonNode(nodeData);
        }catch (IOException e){
            e.printStackTrace();;
        }
        Iterator<JsonNode> iterator = jsonNode.iterator();
        while(iterator.hasNext()){
            JsonNode next = iterator.next();
            ClusterStatus status = new ClusterStatus();
            status.setDiskFree(next.get("disk_free").asLong());
            status.setFdUsed(next.get("fd_used").asLong());
            status.setMemoryUsed(next.get("mem_used").asLong());
            status.setProcUsed(next.get("proc_used").asLong());
            status.setSocketUsed(next.get("sockets_used").asLong());
            clusterStatusMap.put(next.get("name").asText(),status);
        }
        return clusterStatusMap;
    }

    /**
     * 获取rabbitmq集群用户信息
     * @param url
     * @param username
     * @param password
     * @return
     * @throws IOException
     */
    public static Map<String,User> fetchRabbitMQUsers(String url,String username
            ,String password)throws IOException{
        Map<String,User> userMap = new HashMap<>();
        String nodeData = getData(url,username,password);
        JsonNode jsonNode = null;
        try {
            jsonNode = JsonUtil.toJsonNode(nodeData);
        }catch (IOException e){
            e.printStackTrace();
        }
        Iterator<JsonNode> iterator = jsonNode.iterator();
        while(iterator.hasNext()){
            JsonNode next = iterator.next();
            User user = new User();
            user.setName(next.get("name").asText());
            user.setTags(next.get("tags").asText());
            userMap.put(next.get("name").asText(),user);
        }
        return userMap;
    }

    /**
     * 向rabbitmq发送请求,获取响应数据
     * @param url
     * @param username
     * @param password
     * @return
     * @throws IOException
     */
    public static String getData(String url ,String username,String password)throws IOException {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        UsernamePasswordCredentials creds = new UsernamePasswordCredentials(username,password);
        HttpGet httpGet = new HttpGet();
        httpGet.addHeader(BasicScheme.authenticate(creds,"UTF-8",false));
        httpGet.setHeader("Content-Type","application/json");
        CloseableHttpResponse response = httpClient.execute(httpGet);
        try {
            if(response.getStatusLine().getStatusCode()!=200){
                System.out.println("http请求rabbitmq返回的code:"+response.getStatusLine().getStatusCode()
                        +",url:"+url);
            }
            HttpEntity entity = response.getEntity();
            if(entity!=null){
                return EntityUtils.toString(entity);
            }
        }finally{
            response.close();
        }
        return null;
    }

    public static class JsonUtil{
        private static ObjectMapper objectMapper = new ObjectMapper();
        static {
            objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        }

        public static JsonNode toJsonNode(String jsonString) throws IOException{
            return objectMapper.readTree(jsonString);
        }
    }

    public static class User{
        private String name;
        private String tags;

        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", tags='" + tags + '\'' +
                    '}';
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getTags() {
            return tags;
        }

        public void setTags(String tags) {
            this.tags = tags;
        }
    }

    public static class ClusterStatus{
        private long diskFree;
        private long diskLimit;
        private long fdUsed;
        private long fdTotal;
        private long socketUsed;
        private long socketTotal;
        private long memoryUsed;
        private long memoryLimit;
        private long procUsed;
        private long procTotal;

        public long getDiskFree() {
            return diskFree;
        }

        public void setDiskFree(long diskFree) {
            this.diskFree = diskFree;
        }

        public long getDiskLimit() {
            return diskLimit;
        }

        public void setDiskLimit(long diskLimit) {
            this.diskLimit = diskLimit;
        }

        public long getFdUsed() {
            return fdUsed;
        }

        public void setFdUsed(long fdUsed) {
            this.fdUsed = fdUsed;
        }

        public long getFdTotal() {
            return fdTotal;
        }

        public void setFdTotal(long fdTotal) {
            this.fdTotal = fdTotal;
        }

        public long getSocketUsed() {
            return socketUsed;
        }

        public void setSocketUsed(long socketUsed) {
            this.socketUsed = socketUsed;
        }

        public long getSocketTotal() {
            return socketTotal;
        }

        public void setSocketTotal(long socketTotal) {
            this.socketTotal = socketTotal;
        }

        public long getMemoryUsed() {
            return memoryUsed;
        }

        public void setMemoryUsed(long memoryUsed) {
            this.memoryUsed = memoryUsed;
        }

        public long getMemoryLimit() {
            return memoryLimit;
        }

        public void setMemoryLimit(long memoryLimit) {
            this.memoryLimit = memoryLimit;
        }

        public long getProcUsed() {
            return procUsed;
        }

        public void setProcUsed(long procUsed) {
            this.procUsed = procUsed;
        }

        public long getProcTotal() {
            return procTotal;
        }

        public void setProcTotal(long procTotal) {
            this.procTotal = procTotal;
        }
    }

}

测试

public static void main(String[] args) {
        try {
            //1.获取rabbitmq集群各个节点的实例信息
            Map<String,ClusterStatus> clusterStatusMap =
                    fetchRabbitMQClusterStatus(RABBIT_NODES_STATUS_REST_URL,RABBIT_USER_NAME,
                            RABBIT_USER_PASSWORD);
                            
            //2.输出各个节点实例的状态信息
            clusterStatusMap.entrySet().forEach(entry-> System.out.println(entry.getKey()+":"+entry.getValue()));
            
            //3.获取rabbitmq集群用户信息
            Map<String, User> userMap = fetchRabbitMQUsers(RABBIT_NODES_STATUS_REST_URL,
                    RABBIT_USER_NAME, RABBIT_USER_PASSWORD);
                    
            //4.输出各个节点实例的用户信息
            userMap.entrySet().forEach(entry-> System.out.println(entry.getKey()+":"+entry.getValue()));
        }catch (IOException e){
            e.printStackTrace();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qlanto

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值