查询rabbitmq

package com.yunda.app.service;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.yunda.app.entity.vo.MessageQueue;
import com.yunda.app.entity.vo.Page;
import com.yunda.app.util.StaticVar;

@Service(value = "messageQueueService")
@Transactional
public class MessageQueueServiceImpl implements MessageQueueService {
    private Scanner scanner;

    @Override
    public Page pageQuery(MessageQueue messageQueue) {
        Page page = new Page();
        try {
            StringBuilder ipText = new StringBuilder();
            String url = StaticVar.RABBITMQ_URL;
            // 用户名密码部分
            String username = StaticVar.RABBITMQ_USERNAME;
            String password = StaticVar.RABBITMQ_PASSWORD;
            String input = username + ":" + password;
            String encoding = new String((new sun.misc.BASE64Encoder()).encode(input.getBytes()));
            URL myURL = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) myURL.openConnection();
            conn.setConnectTimeout(6 * 1000);
            conn.setReadTimeout(6 * 1000);
            conn.setRequestProperty("Authorization", "Basic " + encoding);
            //如果连接成功,获得返回字符串
            if (conn.getResponseCode() == 200) {
                InputStream inputStream = conn.getInputStream();
                scanner = new Scanner(inputStream, "utf-8");
                while (scanner.hasNext()) {
                    ipText.append(scanner.next());
                }
                if (inputStream != null) {
                    inputStream.close();
                }
                conn.disconnect();
                JSONArray jsonArray = JSONArray.fromObject(ipText.toString());
                List<MessageQueue> mqList = new ArrayList<MessageQueue>();
                int pageNo = messageQueue.getPageNo();
                int pageSize = messageQueue.getPageSize();
                //如果json有子项,说明有消息队列
                if (jsonArray != null && jsonArray.size() > 0) {
                    String messageQueueName = messageQueue.getName();
                    //不是搜索某个消息队列
                    if (messageQueueName == null) {
                        //分页选取消息队列
                        for (int i = (pageNo - 1) * pageSize; i < pageNo
                                * pageSize; i++) {
                            if (i == jsonArray.size()) {
                                break;
                            }
                            MessageQueue mq = new MessageQueue();
                            JSONObject jsonobject = jsonArray.getJSONObject(i);
                            //获取消息队列name等字段
                            mq.setName(jsonobject.getString("name"));
                            mq.setMessagesReady(jsonobject
                                    .getInt("messages_ready"));
                            mq.setMessagesUnacknowledged(jsonobject
                                    .getInt("messages_unacknowledged"));
                            mq.setMessages(jsonobject.getInt("messages"));
                            mq.setConsumers(jsonobject.getInt("consumers"));
                            mq.setState(jsonobject.getString("state"));
                            mqList.add(mq);
                        }
                        if (mqList.size() > 0) {
                            page.setTotal(jsonArray.size());
                            page.setRows(mqList);
                        }
                    } else {//是搜索某个消息队列
                        MessageQueue mq = new MessageQueue();
                        for (int i = 0; i < jsonArray.size(); i++) {
                            JSONObject jsonobject = jsonArray.getJSONObject(i);
                            //获取消息队列name字段,判断是否和搜索队列名称相同
                            String jsonobjectName=jsonobject.getString("name");
                            if (jsonobjectName.equals(messageQueueName)) {
                                mq.setName(messageQueueName);
                                mq.setMessagesReady(jsonobject
                                        .getInt("messages_ready"));
                                mq.setMessagesUnacknowledged(jsonobject
                                        .getInt("messages_unacknowledged"));
                                mq.setMessages(jsonobject.getInt("messages"));
                                mq.setConsumers(jsonobject.getInt("consumers"));
                                mq.setState(jsonobject.getString("state"));
                                mqList.add(mq);
                                break;
                            }
                        }
                        if (mqList.size() > 0) {
                            page.setTotal(1);
                            page.setRows(mqList);
                        }
                    }

                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return page;
    }
}
package com.yunda.app.entity.vo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
 * 分页信息实体
 *
 * @author JS
 * @since  2013-04-09
 */
@SuppressWarnings("serial")
public class Page implements Serializable {

    /**总记录数*/
    private long total;
    /**当前页记录,类型为List*/
    private Object rows;
    /**列表底部显示的数据,例如统计数据,类型为List*/
    private Object footer;

    /**
     * 构造方法,只构造空页.
     */
    public Page() {
        this(0, new ArrayList());
    }

    /**
     * 不分页列表数据对象默认构造方法
     *
     * @param rows    列表数据
     */
    public Page(Object rows) {
        this.rows = rows;
        if(null != rows && rows instanceof List) {
            this.total = ((List)rows).size();
        } else if (null != rows){
            this.total = 1;
        }
    }

    /**
     * 分页列表数据对象默认构造方法(仅含含列表)
     *
     * @param rows    列表数据
     */
    public Page(long total, Object rows) {
        this.total = total;
        this.rows = rows;
    }

    /**
     * 默认分页构造方法(含列表和表底)
     *
     * @param total     总记录数
     * @param rows 页数据
     * @param footer    页脚数据
     */
    public Page(long total, Object rows, Object footer) {
        this.total = total;
        this.rows = rows;
        this.footer = footer;
    }

    /**
     * 取当前页中的记录.
     */
    public Object getRows() {
        return rows;
    }

    /**
     * 设置当前页中的记录.
     */
    public void setRows(Object rows){
        this.rows = rows;
    }

    /**
     * 获取总记录数
     *
     * @return
     */
    public long getTotal() {
        return total;
    }

    /**
     * 设置总记录数
     *
     * @param total
     */
    public void setTotal(long total) {
        this.total = total;
    }

    public Object getFooter() {
        return footer;
    }

    public void setFooter(Object footer) {
        this.footer = footer;
    }

    /**
     * 获取任一页第一条数据在数据集的位置(不考虑总记录数)
     *
     * @param pageNo   从1开始的页号
     * @param pageSize 每页记录条数
     * @return 该页第一条数据
     */
    public static long getStartOfPage(int pageNo, int pageSize) {
        long start = (pageNo - 1) * pageSize;
        return start < 0 ? 0 : start;
    }

    /**
     * 获取任一页第一条数据在数据集的位置(考虑总记录数并做调整)
     *
     * @param total   总记录数
     * @param pageNo   从1开始的页号
     * @param pageSize 每页记录条数
     * @return 该页第一条数据
     */
    public static long getStartOfPage(long total, int pageNo, int pageSize) {
        long start = (pageNo - 1) * pageSize;
        //如果超过了最后一行,则自动退回到最后一页的第一行
        if (start >= total) {
            start = Page.getStartOfPage(pageNo-1, pageSize);
        }
        return start < 0 ? 0 : start;
    }
}
时间: 2024-10-09 21:08:42

查询rabbitmq的相关文章

消息队列之 RabbitMQ

关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时候把这块的知识整理记录一下了. 市面上的消息队列产品有很多,比如老牌的 ActiveMQ.RabbitMQ ,目前我看最火的 Kafka ,还有 ZeroMQ ,去年底阿里巴巴捐赠给 Apache 的 RocketMQ ,连 redis 这样的 NoSQL 数据库也支持 MQ 功能.总之这块知名的产品就有十几种,就我自己的使用经验和兴趣只打算谈谈 RabbitMQ.Kafka 和 A

RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候. 消息队列主要解决了应用耦合.异步处理.流量削锋等问题. 当前使用较多的消息队列有RabbitMQ.RocketMQ.ActiveMQ.Kafka.ZeroMQ.MetaMq等,而部分数据库如Re

CentOS 6快捷安装RabbitMQ教程

1.安装Erlang yum install erlang 2.安装RabbitMQ yum install rabbitmq-server 3.配置开机自启动 chkconfig rabbitmq-server on 4.启动RabbitMQ service rabbitmq-server start 5.查询RabbitMQ路径 whereis rabbitmq 6.进入目录 7.开启RabbitMQ的Web管理界面 ./rabbitmq-plugins enable rabbitmq_ma

转 消息队列之 RabbitMQ

转 https://www.jianshu.com/p/79ca08116d57 消息队列之 RabbitMQ 预流 2017.05.06 16:03* 字数 4884 阅读 80990评论 18喜欢 236赞赏 1 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时候把这块的知识整理记录一下了. 市面上的消息队列产品有很多,比如老牌的 ActiveMQ.RabbitMQ ,目前我看最火的 Kafka ,还有 ZeroMQ ,去年底

docker部署rabbitmq

一.docker上部署并启动RabbitMQ 1.查询rabbitmq镜像 #docker search rabbitmq:management 2.拉取rabbitmq镜像 #docker pull rabbitmq:management 3.创建并启动容器 (1)创建和启动 #docker run -d --hostname my-rabbit --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management (2)创建和启动(同

Spring Cloud(中文版)

原文链接:Spring Cloud I.云原生应用 Spring Cloud上下文:应用上下文服务 2.1.Bootstrap应用程序上下文 2.2.应用程序上下文层次结构 2.3.更改Bootstrap属性的位置 2.4.覆盖远程属性的值 2.5.自定义Bootstrap配置 2.6.自定义Bootstrap属性源 2.7.记录配置 2.8.环境变化 2.9.刷新范围 2.10.加密和解密 2.11.端点 Spring Cloud Commons:Common Abstractions 3.1

Rabbitmq 相关介绍之单机镜像模式集群配置

一.镜像模式集群简介 如果RabbitMQ集群只有一个broker节点,那么该节点的失效将导致整个服务临时性的不可用,并且可能会导致message的丢失(尤其是在非持久化message存储于非持久化queue中的时候).当然可以将所有的publish的message都设置为持久化的,并且使用持久化的queue,但是这样仍然无法避免由于缓存导致的问题:因为message在发送之后和被写入磁盘并执行fsync之间存在一个虽然短暂但是会产生问题的时间窗.通过publisher的confirm机制能够确

使用RabbitMQ实现延迟任务

场景一:物联网系统经常会遇到向终端下发命令,如果命令一段时间没有应答,就需要设置成超时. 场景二:订单下单之后30分钟后,如果用户没有付钱,则系统自动取消订单. 上述类似的需求是我们经常会遇见的问题.最常用的方法是定期轮训数据库,设置状态.在数据量小的时候并没有什么大的问题,但是数据量一大轮训数据库的方式就会变得特别耗资源.当面对千万级.上亿级数据量时,本身写入的IO就比较高,导致长时间查询或者根本就查不出来,更别说分库分表以后了.除此之外,还有优先级队列,基于优先级队列的JDK延迟队列,时间轮

消息队列_RabbitMQ-0004.深入RabbitMQ之分类告警/并行执行/RPC响应?

应用场景: 1. 通知,针对发送事件的描述,内容可以是消息的日志,也可以是真实的报告通知给另一个程序或者管理员. 说明: 首先选择交换机,如果选择fanout交换机,则需要为每种告警传输类型(邮件/微信/手机/短信)创建队列,但同时也带来坏处就是每个消息都会发送到所有队列,导致告警消息发生时,被报警消息淹没,如果选择topic交换机,则可为其创建四种严重级别告警info/warning/problem/citical,但如果使用fanout类型交换机消息会发送到所有这四个级别队列,如果使用dir