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;
}
}
public class MessageQueue extends PageQueryParams{
//队列名称
private String name;
//已准备好消息数
private int messagesReady;
//未应答消息数
private int messagesUnacknowledged;
//队列中消息总数
private int messages;
//消费者
private int consumers;
//队列状态
private String state;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMessagesReady() {
return messagesReady;
}
public void setMessagesReady(int messagesReady) {
this.messagesReady = messagesReady;
}
public int getMessagesUnacknowledged() {
return messagesUnacknowledged;
}
public void setMessagesUnacknowledged(int messagesUnacknowledged) {
this.messagesUnacknowledged = messagesUnacknowledged;
}
public int getMessages() {
return messages;
}
public void setMessages(int messages) {
this.messages = messages;
}
public int getConsumers() {
return consumers;
}
public void setConsumers(int consumers) {
this.consumers = consumers;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
import com.yunda.app.util.StaticVar;

public class PageQueryParams {

    /** 分页查询的页号(前台视图页面传入) */
protected int pageNo;
/** 分页查询数据时,每页显示的记录数(前台视图页面传入) */
protected int pageSize;
/** 总记录数(由系统查询数据库后设置,无需过问) */
protected long total;
/** 本次查询记录的开始位置(由系统查询数据库计数后设置,无需过问) */
protected long start;
/**排序字段名称**/
protected String sortName;
/**排序类型**/
protected String sortOrder;
/**
* 获取实例
*
* @param pageNo
* @param PageSize
* @return
*/
public static PageQueryParams getInstance(int pageNo, int pageSize) {
PageQueryParams p = new PageQueryParams();
p.setPageNo(pageNo);
p.setPageSize(pageSize);
return p;
} public int getPageNo() {
//如果页号小于等于0,则修正为1
if (pageNo <= 0) pageNo = 1;
return pageNo;
} public void setPageNo(int pageNo) {
this.pageNo = pageNo;
} public int getPageSize() {
return pageSize;
} public void setPageSize(int pageSize) {
this.pageSize = pageSize;
} public long getTotal() {
return total;
} public void setTotal(long total) {
this.total = total;
} public long getStart() {
return start;
} public void setStart(long start) {
this.start = start;
} /**
* 设置页号
* 提供该方法的目的是便于使用spring的自动参数注入功能
*
* @param page
*/
public void setPage(int page) {
this.pageNo = page <=0 ? StaticVar.DEFAULT_PAGE_NO : page; } /**
* 设置每页显示的记录数
* 提供该方法的目的是便于使用spring的自动参数注入功能
*
* @param rows
*/
public void setRows(int rows) {
this.pageSize = rows <=0 ? StaticVar.DEFAULT_PAGE_SIZE : rows;
}
}

rabbitMq解析的更多相关文章

  1. 消息队列1:RabbitMQ解析并基于Springboot实战

    RabbitMQ简介 AMQP:Advanced Message Queue,高级消息队列协议.它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产 ...

  2. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(2)

    二.nova-api 步骤3:nova-api接收请求 nova-api接收请求,也不是随便怎么来都接收的,而是需要设定rate limits,默认的实现是在ratelimit的middleware里 ...

  3. 零基础学习openstack【完整中级篇】及openstack资源汇总

    1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事 ...

  4. 简单易用的.NET免费开源RabbitMQ操作组件EasyNetQ解析

    对于目前大多的.NET项目,其实使用的技术栈都是差不多,估计现在很少用控件开发项目的了,毕竟一大堆问题.对.NET的项目,目前比较适合的架构ASP.NET MVC,ASP.NET WebAPI,ORM ...

  5. rabbitmq重装之后无法加入原有cluster的bug解析

    背景: 一台controller node,一台compute1节点 两台机器的host文件均已经进行hostname解析 两节点本已经加入了同一rabbitmq cluster 但controlle ...

  6. RabbitMQ 端口号解析

    转自:https://www.cnblogs.com/liuxingke/articles/9889517.html 端口号解析 12345 - 4369 (epmd), 25672 (Erlang ...

  7. 探索解析微服务下的RabbitMQ

    概览 本文主要介绍如何使用RabbitMQ消息代理来实现分布式系统之间的通信,从而促进微服务的松耦合. RabbitMQ,也被称为开源消息代理,它支持多种消息协议,并且可以部署在分布式系统上.它轻量级 ...

  8. rabbitMQ消息队列 – Message方法解析

    消息的创建由AMQPMessage对象来创建$message = new AMQPMessage("消息内容");是不是很简单. 后边是一个数组.可以对消息进行一些特殊配置$mes ...

  9. RabbitMQ安装、集群搭建、概念解析

    RabbitMQ安装.集群搭建.概念解析 基本概念 为什么会产生MQ 1.解耦:采用异步方式实现业务需求达到解耦的目的. 2.缓冲流量,削峰填谷: 问:为什么会有流量冲击? 答:采用"直接调 ...

随机推荐

  1. Tomcat配置MySql连接池问题

    配置过程如下: 1.修改Tomcat—>conf目录下的context.xml文件 <Context path="/DBTest" docBase="DBTe ...

  2. vs2015解决fopen、fscanf 要求替换为fopen_s、fscanf_s的办法

    在工程项目设置一下就行:项目属性 -- C/C++-- 预处理器 -- 预处理器定义,添加:_CRT_SECURE_NO_WARNINGS

  3. idea-spark-sbt 打包jar

    1.打开idea下的terminal窗口 2.只打包部分项目 sbt insight-import/clean  insight-import/assembly 这表示只打包主目录下的insight- ...

  4. 【转】Pro Android学习笔记(十七):用户界面和控制(5):日期和时间控件

    目录(?)[-] DatePicker和TimePicker控件 DigitalClock和AnalogClock控件 DatePicker和TimePicker控件 使用DatePicker和Tim ...

  5. Velocity常用标签的讲解

    Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象. 当Veloci ...

  6. 浏览器重绘(repaint)和回流(reflow)的那点事

    第一次听到重绘和回流是在鹅厂实习面试,那个时候对浏览器没有任何的概念,所以面试官说到这个问题的时候整个人都蒙圈了.下面是近期学习总结: 重绘(repaint)和回流(reflow) 文档初次加载时,H ...

  7. USACO-Your Ride Is Here(你的飞碟在这儿)-Section1.2<1>

    [英文原题] Your Ride Is Here It is a well-known fact that behind every good comet is a UFO. These UFOs o ...

  8. C++知识点总结(二)

    1.字符串的部分拷贝 ① 利用标准库函数strncpy(),可以将一字符串的一部分拷贝到另一个字符串中.strncpy()函数有3个参数:第一个参数是目录字符串:第二个参 数是源字符串:第三个参数是一 ...

  9. 【spring boot logback】日志颜色渲染,使用logback-spring.xml自定义的配置文件后,日志没有颜色了

    接着spring boot日志logback解析之后,发现使用logback-spring.xml自定义的配置文件后,日志没有颜色了 怎么办? 官网处理日志链接:https://logback.qos ...

  10. 【Hadoop】hiveserver2 不能启动端口 10000 开启服务的相关经验总结

    转载来自http://blog.csdn.net/lsttoy/article/details/53490144. 这个问题困扰了我三天,各种查资料踩坑填坑的尝试,终于搞定了这个问题. 首先来品尝下喜 ...