RabbitMQ监控(3)——核心监控类实现
2016-03-23 13:45
801 查看
在监控时,我们的思路大概是这样的,使用rabbitmq的java客户端开发检测端口,发现不符合要求的性能参数,予以警告,给负责人发送短信或邮件,并提供前台可视化的监控界面,大家先看整体设计:
请参看文章底部《附录:数据库设计》
RabbitMQ监控类:
数据库设计(部分字段已经改动):
d_responsible_user(责任人)
d_service(需要监控的服务)
d_service_user(服务与负责人关系)
d_ business(需要监控的业务)
d_ business_user(监控的业务与用户关系)
流程设计:
数据设计
根据这个过程,我们看看数据库设计图:请参看文章底部《附录:数据库设计》
代码实现
其中我们用到一个比较关键的方法,在官方api中如此介绍:RabbitMQ监控类:
@Service("rabbitMQService") public class RabbitMQServiceImpl implements IRabbitMQService, IDebugService { @Override public Boolean checkOneBusinessMQ(Business business) throws Exception { if(business == null ){ return false; } boolean isFinish=false; Channel channel = null; Connection conn = null; ConnectionFactory factory = new ConnectionFactory(); factory.setUsername(business.getMqUsername()); factory.setPassword(business.getMqPassword()); if(!(business.getMqVirtualhost()==null || business.getMqVirtualhost().trim().isEmpty() || business.getMqVirtualhost().equals("no"))){ factory.setVirtualHost(business.getMqVirtualhost()); } factory.setHost(business.getMqHost()); factory.setPort(Integer.valueOf(business.getMqPort())); try { conn = factory.newConnection(); channel = conn.createChannel(); long count = channel.messageCount(business.getMqQueueName()); HashMap<String,String> hashMap = JSON.parseObject(business.getWarningconfig(),HashMap.class); Integer max=Integer.valueOf(hashMap.get(RabbitMQ.WarningConfig_Max.getValue())); try { FileSaveMq.addOneBusinessDate(business.getId().toString(), count + ""); }catch (Exception e){ log.error("=checkOneBusinessMQ=>error write file"+business.getBusinessName(),e); } if(count <=max){ isFinish=true; }else{ isFinish=false; isFinish = sendWarningOnebusiness(business); } }catch(Exception e){ log.error("=checkOneBusinessMQ=>error business name:"+business.getBusinessName(),e); sendWarningOnebusiness(business); }finally { if(channel !=null){ channel.close(); if(conn != null){ conn.close(); } } } return isFinish; } @Override public Boolean checkOneService(ControlService controlService) throws Exception { if(controlService == null ){ return false; } boolean isFinish=false; if(URLUtils.isConnect(controlService.getServiceUrl())){ isFinish=true; }else{ isFinish = sendWarningOneservice(controlService); isFinish=false; } return isFinish; } }
总结:
有了核心代码,其他的都是辅助其实现的工具,在这个基础之上,我们就可以扩展我们的思路,想想如何做页面展示,如何发送短信,邮件等,看似高大上的技术,其实也是简单技术的积累加上人的大脑创新!现在看看,“世上无难事,只怕有心人”这句话,真的是至理名言!附录
File帮助类:/** * Created by Administrator on 2016/3/22. */ public class FileSaveMq { public static void addOneBusinessDate(String key,String value){ String json = getDate(); HashMap<String,String> hashMap = null; List<String> listvalue=null; if(json==null||json.trim().isEmpty()){ hashMap=new HashMap<String,String>(); }else{ hashMap = JSON.parseObject(json,HashMap.class); } if(hashMap.containsKey(key)){ String OneValueJson = hashMap.get(key); if(OneValueJson==null ||OneValueJson.trim().isEmpty()){ listvalue = new ArrayList<String>(); listvalue.add(value); }else{ listvalue = JSON.parseObject(OneValueJson, List.class); listvalue.add(value); if(listvalue.size()>100){ listvalue.remove(listvalue.size()-1); } } }else{ listvalue = new ArrayList<String>(); listvalue.add(value); } hashMap.put(key,JSON.toJSONString(listvalue)); addDate(JSON.toJSONString(hashMap)); } public static void addDate(String oneValue){ File file = new File("D://export/date/mq.log"); if(!file.canWrite()){ try { file.createNewFile(); }catch (Exception e){ e.printStackTrace(); } } try { FileUtils.write(file, oneValue); }catch (Exception e1){ e1.printStackTrace(); } } public static String getDate(){ File file = new File("D://export/date/mq.log"); if(!file.canRead()){ try { file.createNewFile(); }catch (Exception e){ e.printStackTrace(); } } String result = ""; try { result =FileUtils.readFileToString(file); }catch (Exception e){ e.printStackTrace(); } return result; } }
数据库设计(部分字段已经改动):
d_responsible_user(责任人)
字段名称 | 类型 | 必填 | 备注 |
id | integer | y | id |
username | string | y | 用户名(未来登录用) |
password | string | y | 密码(未来登录用) |
chinesename | string | y | 中文姓名 |
mobile | integer | y | 手机号 |
email | string | y | 邮箱 |
remark | string | y | 备注 |
created | timestamp | n | 创建时间 |
modified | timestamp | n | 修改时间 |
createusername | string | n | 创建人 |
字段名称 | 类型 | 必填 | 备注 |
id | integer | y | id |
servicename | string | y | 服务名称 |
serviceurl | string | y | 服务监控地址 |
warningmsg | string | y | 报警信息 |
remark | string | n | 备注 |
created | timestamp | n | 创建时间 |
modified | timestamp | n | 修改时间 |
createusername | string | n | 创建人 |
字段名称 | 类型 | 必填 | 备注 |
id | integer | y | id |
serviceid | integer | y | 服务id |
servicename | string | y | 服务名称 |
uid | integer | y | 用户id |
chinesename | string | y | 中文名称 |
isemail | integer | y | 报警是否发邮件 |
ismessage | integer | y | 报警是否发短信 |
remark | string | n | 备注 |
created | timestamp | n | 创建时间 |
modified | timestamp | n | 修改时间 |
createusername | string | n | 创建人 |
字段名称 | 类型 | 必填 | 备注 |
id | integer | y | id |
businessname | string | y | 业务名称 |
mqhost | string | y | mqhost |
mqport | string | y | mq端口 |
mqusername | string | y | mq用户名 |
mqpassword | string | y | mq密码 |
mqvirtualhost | string | y | mq虚拟host |
mqconnectiontimeout | string | y | mq链接超时 |
warningconfig | string | y | 警告策略(阻塞值等) |
remark | string | n | 备注 |
created | timestamp | n | 创建时间 |
modified | timestamp | n | 修改时间 |
createusername | string | n | 创建人 |
字段名称 | 类型 | 必填 | 备注 |
id | integer | y | id |
businessid | integer | y | 业务id |
businessname | string | y | 业务名称 |
uid | integer | y | 用户id |
isemail | integer | y | 报警是否发邮件 |
ismessage | integer | y | 报警是否发短信 |
remark | string | n | 备注 |
created | timestamp | n | 创建时间 |
modified | timestamp | n | 修改时间 |
createusername | string | n | 创建人 |
相关文章推荐
- [nginx] 网上最全面nginx教程(近100篇文章整理)
- Linux/Ubuntu下编译Qt4.8.2源码
- OPENCV jpg图片合成avi视屏
- CentOS 安装 Hadoop 完整流程
- Linux上ZooKeeper单机及集群的安装
- Linux解压缩命令
- Linux并发(多线程协作)
- Face-landmarks-detection-benchmark 人脸特征定位网站汇总
- securtCRT,使用linux命令sz
- centos配置mutt跟msmtp发送邮件
- centos直接yum安装nginx
- Opencv直方图的生成与绘制
- ubuntu14.04安装opencv3.10的过程
- opencv源码解析之(1):滤波前言1
- opencv源码解析之(2):滤波前言2
- [转]Tomcat启动java.lang.OutOfMemoryError: PermGen space错误解决
- HTML网页之进入网站口令脚本
- linux_shell
- linux环境编程之 fork() || fork()
- 19. NSOperation