原文链接:服务监控系统(客户端实现)

//单线程运行+睡眠运行package com.heart.beat.runner;import com.heart.beat.heatbeat.HeartSenderHttp;
import com.heart.beat.heatbeat.HeartSenderSocket;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;/*** 类描述:心跳组件插件* Created by 李泽阳 on 2019/8/6*/
@Component//把对象实例化到spring容器中,等于配置文件
@PropertySource("classpath:heart.properties")
public class HeartPluginRunner implements Runnable {private Logger logger = LoggerFactory.getLogger(HeartPluginRunner.class);private static boolean isStart = false;//初始化默认未启动获取配置文件@Value("${heart.beatKey}")//获取配置文件基础文件参数private String heartKey;@Value("${heart.url}")//心跳返回urlprivate String heartUrl;@Autowiredprivate HeartSenderHttp heartSenderHttp;//组件启动public synchronized void start() {if (isStart) {//防止重复启动return;}try {//文件地址静态加载buildConfig();logger.info("[心跳服务器组件]启用成功......");run();isStart = true;//修改启动状态} catch (Exception e) {e.printStackTrace();logger.info("[心跳服务器组件]启用失败!!!");}}//心跳记录发送 http请求@Overridepublic void run() {try {while (true) {heartSenderHttp.getInstance().sendHttpPost();synchronized (HeartSenderSocket.class) {//单线程等待,激活时间,this.wait(15 * 1000);}}} catch (Exception e) {e.printStackTrace();logger.info("【心跳服务发送失败!!!】");logger.info(e.getMessage());logger.info(e.getStackTrace().toString());}}//加载静态参数对象private void buildConfig() {try {HeartPluginConfig hpc = HeartPluginConfig.getInstance();//参数必填校验if ("".equals(heartKey) || "".equals(heartUrl))return;//静态资源加载hpc.setUrl("http://" + heartUrl + "/monitor/heartBeatController/beat?key=" + heartKey);//封装前、后缀hpc.setKey(heartKey);} catch (Exception e) {logger.info("【文件地址路径加载失败!!!】");}}}
//静态类加载package com.heart.beat.runner;/*** 类描述:静态加载类* Created by 李泽阳 on 2019/8/7*/
public class HeartPluginConfig {public static HeartPluginConfig instance;public static HeartPluginConfig getInstance() {if (instance == null) {instance = new HeartPluginConfig();}return instance;}//private String url="/monitor/heartBeatController/beat";//访问路径前缀private String url;//请求地址private String key;//发送key值public String getUrl() {return url;}public void setUrl(String url) {this.url = url;//this.url = ("http://" + url + "/monitor/heartBeatController/beat");}public String getKey() {return key;}public void setKey(String key) {this.key = key;}}
//监听启动类package com.heart.beat.listener;import com.heart.beat.runner.HeartPluginRunner;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;/*** 类描述:伴随组件启动类* Created by 李泽阳 on 2019/8/6*/
@Component
@Order(Ordered.LOWEST_PRECEDENCE)//过滤器,最低过滤权限,最后执行过滤操作
//@Order(Ordered.HIGHEST_PRECEDENCE)//最高过滤权限
public class HeartUploadListener implements ApplicationListener<ContextRefreshedEvent>, ApplicationRunner {//ApplicationListener spring 监听@Autowiredprivate HeartPluginRunner heartPluginRunner;@Overridepublic void run(ApplicationArguments args) throws Exception {startHearts();}@Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {if (event.getApplicationContext().getParent() != null) {startHearts();}}private void startHearts() {//启动心跳组件heartPluginRunner.start();}}
//http请求package com.heart.beat.heatbeat;import com.heart.beat.runner.HeartPluginConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Date;/*** 类描述:心跳客户端发送类* Created by 李泽阳 on 2019/8/7*/
@Repository
public class HeartSenderHttp {private Logger logger = LoggerFactory.getLogger(HeartSenderHttp.class);private static HeartSenderHttp instance;//初始化类对象>>>单例模式public static HeartSenderHttp getInstance() {if (instance == null) {synchronized (HeartSenderHttp.class) {instance = new HeartSenderHttp();}}return instance;}//心跳发送 http请求public String sendHttpPost() {HttpURLConnection connection = null;InputStream inputStream = null;//输入流OutputStream outputStream = null;//输出流BufferedReader bufferedReader = null;String result = null;try {URL url = new URL(HeartPluginConfig.getInstance().getUrl());//通过远程连接对象connection = (HttpURLConnection) url.openConnection();//设置连接方式connection.setRequestMethod("POST");//设置连接主机服务超时时间 15000毫秒connection.setConnectTimeout(15000);//设置读取主机服务返回数据超时时间:60000毫秒connection.setReadTimeout(60000);//是否向远程服务写入数据/默认falseconnection.setDoOutput(true);//设置传入参数格式connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 设置鉴权信息:Authorization: Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0//connection.setRequestProperty("Authorization", "");connection.setRequestProperty("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");// 通过连接对象获取一个输出流outputStream = connection.getOutputStream();// 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的outputStream.write(HeartPluginConfig.getInstance().getKey().getBytes());//通过连接对象获取一个输入流,向远程读取if (connection.getResponseCode() == 200) {inputStream = connection.getInputStream();// 对输入流对象进行包装:charset根据工作项目组的要求来设置bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));StringBuffer sbf = new StringBuffer();String temp = null;// 循环遍历一行一行读取数据while ((temp = bufferedReader.readLine()) != null) {sbf.append(temp);sbf.append("\r\n");}result = sbf.toString();}logger.info(HeartPluginConfig.getInstance().getKey() + ":[心跳发送成功!]" + new Date());} catch (Exception e) {e.printStackTrace();logger.info(HeartPluginConfig.getInstance().getKey() + ":[心跳消息发送失败!]" + new Date());} finally {//关闭资源if (null != bufferedReader) {try {bufferedReader.close();} catch (IOException e) {e.printStackTrace();}}if (outputStream != null) {try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream != null) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}//断开与远程地址url的连接connection.disconnect();}return result;}}

git项目地址:https://github.com/lizyangcoco/monitor_heart.git
面向开发过程,记录学习之路。

服务监控系统(客户端实现)相关推荐

  1. 对微服务监控系统分层和监控架构的理解

    对微服务监控系统分层和监控架构的理解 目录 微服务专栏地址 目录 1. 简介 2. 为什么需要监控体系 3. 与单体应用有什么区别 4. 要监控什么 5. 监控体系和分层 6. 监控架构和主流技术栈 ...

  2. linux搭建天地伟业easy7,easy7视频监控系统客户端|天地伟业easy7监控客户端简洁版(Easy7 Smart Client Express)下载 V7.12 官方版 - 比克尔下载...

    Easy7 Smart Client Express就是天地伟业简洁版的easy7视频监控系统客户端,支持天地伟业的DVR.NVR.网络视频编码器.网络摄像机.高清编码器等设备,该软件属于单机版软件, ...

  3. 新思路设计可视化大型微服务监控系统

    http://www.infoq.com/cn/articles/visualization-microservice-monitoring-system 背景 随着微服务在生产实践中被大量使用,后台 ...

  4. 【SpringBoot】51、Spring-Boot-Admin搭建服务监控系统

    一.写在前面 Spring Boot Actuator 是 spring-boot 自带监控功能 ,可以帮助实现对程序内部运行情况监控,比如监控状况.Bean 加载情况.环境变量.日志信息.线程信息等 ...

  5. zabbix监控系统客户端安装

    服务端的安装可以查看:http://www.cnblogs.com/sunbeidan/p/4940147.html 下载 http://www.zabbix.com/downloads/2.0.3/ ...

  6. 网易云基于Prometheus的微服务监控实践

    当监控遇上微服务 在过去数年里,微服务的落地一直都是业界重点关注的问题,其始终面临着部署.监控.配置和治理等方面的挑战.轻舟微服务平台是网易云为企业提供的一套微服务解决方案,其中微服务监控是其关注的重 ...

  7. Kubernetes 微服务监控体系

    作者|无敌码农 来源|无敌码农 监控系统是运维体系乃至整个软件产品生命周期中最重要的一环,完善的监控可以帮助我们事前及时发现故障,事后快速追查定位问题.而在以微服务为代表的云原生架构体系中,系统分为多 ...

  8. DeVOpS 实战:Kubernetes 微服务监控体系

    来源 | 无敌码农 责编 | 寇雪芹 头图 | 下载于视觉中国 监控系统是运维体系乃至整个软件产品生命周期中最重要的一环,完善的监控可以帮助我们事前及时发现故障,事后快速追查定位问题. 而在以微服务为 ...

  9. ULTRON 分布式监控系统

    概述 在今天这个时代,数据已经成为重要的资源,小到管理系统大到智能AI都脱离不了数据的支持.在面对海量数据的压力下,传统项目不能不走上了变迁的道路.生存还是毁灭,看你自己咯.从传统一个war包走天下, ...

最新文章

  1. Zookeeper 服务注册与发现02——服务消费者
  2. 网页如何有效调用exe
  3. SpringBoot - 构建监控体系03_使用 Admin Server 管理 Spring 应用程序
  4. NOIP 2018 流水账
  5. CTAssetsPickerController 选中图片不显示对号的问题解决
  6. 2013计算机系统导论,计算机系统导论2013期末(20页)-原创力文档
  7. Android手机编程初学遇到的问题及解决方法
  8. POJ-2226 Muddy Fields 最小点集覆盖
  9. 《三国空城计》何为真知己真智慧
  10. 有道云笔记客户端的下载和安装、使用(博主推荐)
  11. 基于springboot+vue的戒毒所人员管理系统 毕业设计-附源码251514
  12. 剧本杀APP发展如何——“我是谜”竞品分析
  13. 手持两把锟斤拷,口中疾呼烫烫烫
  14. http的常见错误代码
  15. 【数据结构与算法 6】栈实现综合计算器
  16. Java中如何快速构建项目脚手架
  17. GR-Fusion:强鲁棒低漂移的多传感器融合系统(IROS2021)
  18. 长虹50名高管激励被隐匿 称绵阳政府不允许宣扬
  19. 除了竞争,中美在自动驾驶领域可以有哪些合作
  20. iec104点号_IEC104规约流程 | 学步园

热门文章

  1. 澄清大数据存储——厂商篇
  2. 360行,行行转Java,这句话到底是什么鬼呢?
  3. matlab中如何检测极大值和极小值?
  4. 女人要学会的四种气质
  5. CentOS下安装xampp
  6. 【场景图生成】Unbiased Scene Graph Generation from Biased Training
  7. Z690主板无法识别硬盘解决办法(核显状态下设置CSM兼容模式无效,无法打开CSM开关)
  8. 系统日志如何导入mysql_如何将日志导入导出
  9. python爬取前程无忧热门城市职位信息
  10. 北京供销大数据集团成立