1. package com.yunda.app.service;
  2.  
  3. import java.io.InputStream;
  4. import java.net.HttpURLConnection;
  5. import java.net.URL;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import java.util.Scanner;
  9.  
  10. import net.sf.json.JSONArray;
  11. import net.sf.json.JSONObject;
  12.  
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.transaction.annotation.Transactional;
  15.  
  16. import com.yunda.app.entity.vo.MessageQueue;
  17. import com.yunda.app.entity.vo.Page;
  18. import com.yunda.app.util.StaticVar;
  19.  
  20. @Service(value = "messageQueueService")
  21. @Transactional
  22. public class MessageQueueServiceImpl implements MessageQueueService {
  23. private Scanner scanner;
  24.  
  25. @Override
  26. public Page pageQuery(MessageQueue messageQueue) {
  27. Page page = new Page();
  28. try {
  29. StringBuilder ipText = new StringBuilder();
  30. String url = StaticVar.RABBITMQ_URL;
  31. // 用户名密码部分
  32. String username = StaticVar.RABBITMQ_USERNAME;
  33. String password = StaticVar.RABBITMQ_PASSWORD;
  34. String input = username + ":" + password;
  35. String encoding = new String((new sun.misc.BASE64Encoder()).encode(input.getBytes()));
  36. URL myURL = new URL(url);
  37. HttpURLConnection conn = (HttpURLConnection) myURL.openConnection();
  38. conn.setConnectTimeout(6 * 1000);
  39. conn.setReadTimeout(6 * 1000);
  40. conn.setRequestProperty("Authorization", "Basic " + encoding);
  41. //如果连接成功,获得返回字符串
  42. if (conn.getResponseCode() == 200) {
  43. InputStream inputStream = conn.getInputStream();
  44. scanner = new Scanner(inputStream, "utf-8");
  45. while (scanner.hasNext()) {
  46. ipText.append(scanner.next());
  47. }
  48. if (inputStream != null) {
  49. inputStream.close();
  50. }
  51. conn.disconnect();
  52. JSONArray jsonArray = JSONArray.fromObject(ipText.toString());
  53. List<MessageQueue> mqList = new ArrayList<MessageQueue>();
  54. int pageNo = messageQueue.getPageNo();
  55. int pageSize = messageQueue.getPageSize();
  56. //如果json有子项,说明有消息队列
  57. if (jsonArray != null && jsonArray.size() > 0) {
  58. String messageQueueName = messageQueue.getName();
  59. //不是搜索某个消息队列
  60. if (messageQueueName == null) {
  61. //分页选取消息队列
  62. for (int i = (pageNo - 1) * pageSize; i < pageNo
  63. * pageSize; i++) {
  64. if (i == jsonArray.size()) {
  65. break;
  66. }
  67. MessageQueue mq = new MessageQueue();
  68. JSONObject jsonobject = jsonArray.getJSONObject(i);
  69. //获取消息队列name等字段
  70. mq.setName(jsonobject.getString("name"));
  71. mq.setMessagesReady(jsonobject
  72. .getInt("messages_ready"));
  73. mq.setMessagesUnacknowledged(jsonobject
  74. .getInt("messages_unacknowledged"));
  75. mq.setMessages(jsonobject.getInt("messages"));
  76. mq.setConsumers(jsonobject.getInt("consumers"));
  77. mq.setState(jsonobject.getString("state"));
  78. mqList.add(mq);
  79. }
  80. if (mqList.size() > 0) {
  81. page.setTotal(jsonArray.size());
  82. page.setRows(mqList);
  83. }
  84. } else {//是搜索某个消息队列
  85. MessageQueue mq = new MessageQueue();
  86. for (int i = 0; i < jsonArray.size(); i++) {
  87. JSONObject jsonobject = jsonArray.getJSONObject(i);
  88. //获取消息队列name字段,判断是否和搜索队列名称相同
  89. String jsonobjectName=jsonobject.getString("name");
  90. if (jsonobjectName.equals(messageQueueName)) {
  91. mq.setName(messageQueueName);
  92. mq.setMessagesReady(jsonobject
  93. .getInt("messages_ready"));
  94. mq.setMessagesUnacknowledged(jsonobject
  95. .getInt("messages_unacknowledged"));
  96. mq.setMessages(jsonobject.getInt("messages"));
  97. mq.setConsumers(jsonobject.getInt("consumers"));
  98. mq.setState(jsonobject.getString("state"));
  99. mqList.add(mq);
  100. break;
  101. }
  102. }
  103. if (mqList.size() > 0) {
  104. page.setTotal(1);
  105. page.setRows(mqList);
  106. }
  107. }
  108.  
  109. }
  110.  
  111. }
  112. } catch (Exception e) {
  113. e.printStackTrace();
  114. }
  115. return page;
  116. }
  117. }
  1. package com.yunda.app.entity.vo;
  2.  
  3. import java.io.Serializable;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. /**
  7. * 分页信息实体
  8. *
  9. * @author JS
  10. * @since 2013-04-09
  11. */
  12. @SuppressWarnings("serial")
  13. public class Page implements Serializable {
  14.  
  15. /**总记录数*/
  16. private long total;
  17. /**当前页记录,类型为List*/
  18. private Object rows;
  19. /**列表底部显示的数据,例如统计数据,类型为List*/
  20. private Object footer;
  21.  
  22. /**
  23. * 构造方法,只构造空页.
  24. */
  25. public Page() {
  26. this(0, new ArrayList());
  27. }
  28.  
  29. /**
  30. * 不分页列表数据对象默认构造方法
  31. *
  32. * @param rows 列表数据
  33. */
  34. public Page(Object rows) {
  35. this.rows = rows;
  36. if(null != rows && rows instanceof List) {
  37. this.total = ((List)rows).size();
  38. } else if (null != rows){
  39. this.total = 1;
  40. }
  41. }
  42.  
  43. /**
  44. * 分页列表数据对象默认构造方法(仅含含列表)
  45. *
  46. * @param rows 列表数据
  47. */
  48. public Page(long total, Object rows) {
  49. this.total = total;
  50. this.rows = rows;
  51. }
  52.  
  53. /**
  54. * 默认分页构造方法(含列表和表底)
  55. *
  56. * @param total 总记录数
  57. * @param rows 页数据
  58. * @param footer 页脚数据
  59. */
  60. public Page(long total, Object rows, Object footer) {
  61. this.total = total;
  62. this.rows = rows;
  63. this.footer = footer;
  64. }
  65.  
  66. /**
  67. * 取当前页中的记录.
  68. */
  69. public Object getRows() {
  70. return rows;
  71. }
  72.  
  73. /**
  74. * 设置当前页中的记录.
  75. */
  76. public void setRows(Object rows){
  77. this.rows = rows;
  78. }
  79.  
  80. /**
  81. * 获取总记录数
  82. *
  83. * @return
  84. */
  85. public long getTotal() {
  86. return total;
  87. }
  88.  
  89. /**
  90. * 设置总记录数
  91. *
  92. * @param total
  93. */
  94. public void setTotal(long total) {
  95. this.total = total;
  96. }
  97.  
  98. public Object getFooter() {
  99. return footer;
  100. }
  101.  
  102. public void setFooter(Object footer) {
  103. this.footer = footer;
  104. }
  105.  
  106. /**
  107. * 获取任一页第一条数据在数据集的位置(不考虑总记录数)
  108. *
  109. * @param pageNo 从1开始的页号
  110. * @param pageSize 每页记录条数
  111. * @return 该页第一条数据
  112. */
  113. public static long getStartOfPage(int pageNo, int pageSize) {
  114. long start = (pageNo - 1) * pageSize;
  115. return start < 0 ? 0 : start;
  116. }
  117.  
  118. /**
  119. * 获取任一页第一条数据在数据集的位置(考虑总记录数并做调整)
  120. *
  121. * @param total 总记录数
  122. * @param pageNo 从1开始的页号
  123. * @param pageSize 每页记录条数
  124. * @return 该页第一条数据
  125. */
  126. public static long getStartOfPage(long total, int pageNo, int pageSize) {
  127. long start = (pageNo - 1) * pageSize;
  128. //如果超过了最后一行,则自动退回到最后一页的第一行
  129. if (start >= total) {
  130. start = Page.getStartOfPage(pageNo-1, pageSize);
  131. }
  132. return start < 0 ? 0 : start;
  133. }
  134. }

查询rabbitmq的更多相关文章

  1. rabbitmq高级消息队列

    rabbitmq使用 什么是消息队列 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串,也可以很复杂,可以包含嵌入对象. 消息队列是一种应用间的通信方式,消息发送后 ...

  2. CentOS 6快捷安装RabbitMQ教程

    1.安装Erlang yum install erlang 2.安装RabbitMQ yum install rabbitmq-server 3.配置开机自启动 chkconfig rabbitmq- ...

  3. 消息队列之 RabbitMQ

    https://www.jianshu.com/p/79ca08116d57 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时候把这块 ...

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

    消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...

  5. 转 消息队列之 RabbitMQ

    转 https://www.jianshu.com/p/79ca08116d57 消息队列之 RabbitMQ 预流 2017.05.06 16:03* 字数 4884 阅读 80990评论 18喜欢 ...

  6. RabbitMQ 使用

    安装步骤略过. 启动 启动很简单,找到安装后的 RabbitMQ 所在目录下的 sbin 目录,可以看到该目录下有6个以 rabbitmq 开头的可执行文件,直接执行 rabbitmq-server ...

  7. Python3.7.1学习(六)RabbitMQ在Windows环境下的安装

    Windows下安装RabbitMQ 环境配置 部署环境 部署环境:windows server 2008 r2 enterprise(本文安装环境Win7) 官方安装部署文档:http://www. ...

  8. SpringBoot系列之RabbitMQ使用实用教程

    SpringBoot系列之RabbitMQ使用实用教程 @ 目录 1. 消息队列概述 1.1 MQ的概述 1.2 MQ目的地形式 2. 消息队列实现方式 2.1 常见MQ框架 2.2 MQ实现方式 3 ...

  9. Docker中使用RabbitMQ

    安装Docker yum install docker //安装完成以后,可以查看一下docker的版本 docker -v //Docker version 1.13.1, build 64e998 ...

随机推荐

  1. bzoj 3653: 谈笑风生 可持久化线段树

    题目大意 在一棵单位边权的有根树上支持询问: 给定a,k求满足下列条件的有序三元对的个数. a,b,c互不相同 a,b均为c的祖先 a,b树上距离<=k 题解 solution 1 首先我们知道 ...

  2. bzoj 3144 切糕 —— 最小割

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3144 每个点拆成 R 个,连成一条链,边上是权值,割掉代表选这一层: 然后每个点的第 t 层 ...

  3. Python:内置函数zip()

    zip函数接受任意多个可迭代对象作为参数,将对象中对应的元素打包成一个tuple,然后返回一个可迭代的zip对象. 这个可迭代对象可以使用循环的方式列出其元素 若多个可迭代对象的长度不一致,则所返回的 ...

  4. 解析CmdLine参数

    UBOOL ParseParam( const TCHAR* Stream, const TCHAR* Param, UBOOL bAllowQuoted ) { const TCHAR* Start ...

  5. HTTP 的若干问题

    1  HTTP无状态协议和Connection:Keep-Alive容易犯的误区 HTTP无状态:无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态.从另一方面讲,打开一个服务器上的 ...

  6. Cypress USB3014 C++DLL 导入问题

    VS2017编译cpp工程出现问题 硬件型号:芯片版本 Cypress FX3 USB3014(和芯片无关)) 重现步骤: 1.解压 FX3_SDK_Windows_v1.3.3.exe 2.VS20 ...

  7. 使用雅虎YUI Compressor压缩JS过程心得记录

    对待发布的项目进行测试时,发现js下载量比较大,从jquery的min版想到了压缩项目中的js文件.很简单的google之(在此,强调一下google的重要性),搜到一个叫做YUI Compresso ...

  8. C#设计模式(9)——装饰者模式

    一.概念 装饰者模式以对客户透明的方式动态地给一个对象附加上更多的责任,装饰者模式相比生成子类可以更灵活地增加功能. 二.模型 三.代码实现 /// <summary> /// 手机抽象类 ...

  9. navicat自动备份

    http://blog.csdn.net/eastmount/article/details/70239244

  10. LoadRunner 服务器(Linux、Windows) 性能指标度量说明

    服务器资源性能计数器 下表描述了可用的计数器: 监控器 度量 说明 CPU 监控器 Utilization 监测 CPU 利用率. 磁盘空间监控器 Disk space 监测可用空间 (MB) 和已用 ...