当前位置: 首页 > news >正文

Spring-boot-admin功能说明

http://blog.csdn.net/xingfulangren/article/details/52304413

***************************************************

1.      准备

1.1   介绍

spring-boot-admin的Github源码地址:https://github.com/codecentric/spring-boot-admin

在Spring Boot Actuator的基础上提供简洁的可视化WEB UI,是用来管理 Spring Boot 应用程序的一个简单的界面,提供如下功能:

显示 name/id 和版本号

显示在线状态

Logging日志级别管理

JMX beans管理

Threads会话和线程管理

Trace应用请求跟踪

应用运行参数信息,如:

Java 系统属性

Java 环境变量属性

内存信息

Spring 环境属性


1.2组成部分

Spring-boot-admin由服务器端和客户端组成

服务器端配置(gradle工程):

build.gradle:compile("de.codecentric:spring-boot-admin-server:1.4.1")

compile("de.codecentric:spring-boot-admin-server-ui:1.4.1")

application.properties:server.port= 8090  (自定义)

spring.application.name=Spring Boot Admin Web (自定义)

spring.boot.admin.url=http://localhost:${server.port}(自定义)

spring.jackson.serialization.indent_output=true

endpoints.health.sensitive=false

info.version=1.0.0(自定义)

启动spring-boot项目时需要加上@SpringBootApplication和 @EnableAdminServer 标签

客户端配置(gradle工程):

build.gradle:compile("de.codecentric:spring-boot-admin-starter-client:1.4.1")

application.properties:spring.application.name=spring-boot-admin-client (自定义)

spring.boot.admin.url=http://localhost:8090(注册到server)

server.port=8080(自定义)

info.version=1.0.0 (自定义)


spring-boot-admin-server:服务器后端处理逻辑代码

spring-boot-admin-server-ui:前端界面展示

spring-boot-admin-starter-client:客户端,需要添加到spring-boot项目中


2.      工作原理

2.1   客户端注册

客户端启动后会实例化RegistrationApplicationListener,listener默认会每隔10s到服务端去注册下,如果已经存在,会refresh

具体代码如下:


在跟服务器注册之前,客户端会先实例化Application信息,获取相应的信息,然后通过restful http post请求跟服务器交互


服务端代码逻辑:服务器端首先会根据客户端的HealthUrl,通过SHA-1 算法得到客户端的id值,借此区分不同的客户端节点

获取到客户端id后,从服务端保存的ConcurrentHashMap 对象中,根据id获取客户端状态信息,如果存在状态信息,则refresh或者replace,否则往map中新加客户端信息


2.2   路由

客户端注册到服务端,会由服务端维护一层路由映射,会在路径上添加前缀、客户端id和后缀,默认前缀为:/api/applications  后缀:/**

Mapped URL path [/api/applications/73abdba9/health/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/env/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/metrics/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/trace/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/dump/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/jolokia/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/info/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/activiti/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/logfile/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/refresh/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/flyway/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/liquibase/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]
Mapped URL path [/api/applications/73abdba9/heapdump/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController]

73abdba9 为客户端的id

具体代码如下:


 

具体的路由信息如下:

route matched=Route(id=73abdba9-health, fullPath=/api/applications/73abdba9/health/**,path=/**,location=http://pc-PC:8090/health,prefix=/api/applications/73abdba9/health, retryable=false, sensitiveHeaders=[],customSensitiveHeaders=false)

包含请求的路径,以及具体节点的实际访问路径(location)

2.3 具体请求执行路径

用户触发界面 -> 界面发起请求(带有具体的客户端id)  -> 经过服务器端路由映射-> 具体节点的访问路径 -> 调用Spring Boot Autuator 监控接口获取数据返回

界面代码:

经过测试发现health 接口,默认每隔20秒都会触发一次,其它接口只有刷新后才会触发接口调用,也许health被设计成心跳连接(猜测)

 

3.Spring Boot Autuator 监控

Spring boot autuator 提供很多的Endpoints 访问

endpoints = { "env", "metrics","trace", "dump", "jolokia", "info","activiti", "logfile", "refresh","flyway", "liquibase", "heapdump" };

endpoints说明以及自定义:

https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html

 

相关文章:

  • Linux 进程与线程六
  • UML课程复习重点
  • 前端面试通关指南
  • 网络广告计费方式常用术语
  • sails 跨域请求处理 -- config.cors
  • memcache命令
  • openlayers 3监听地图分辨率变化事件
  • Jython开发环境搭建
  • 【树莓派】树莓派网络对时间,时间调整
  • CodeDom系列四--Code生成
  • X 1 BT5kali
  • TCP协议中的三次握手和四次挥手(图解)【转】
  • 转载:年轻人,你着什么急?
  • 例25:二分查找
  • 常识性概念
  • Django 博客开发教程 16 - 统计文章阅读量
  • interface和setter,getter
  • js ES6 求数组的交集,并集,还有差集
  • Laravel 中的一个后期静态绑定
  • vue自定义指令实现v-tap插件
  • 记录一下第一次使用npm
  • 前端
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 网页视频流m3u8/ts视频下载
  • 微信小程序--------语音识别(前端自己也能玩)
  • 协程
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 移动端高清、多屏适配方案
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • !!java web学习笔记(一到五)
  • !$boo在php中什么意思,php前戏
  • "无招胜有招"nbsp;史上最全的互…
  • #android不同版本废弃api,新api。
  • (39)STM32——FLASH闪存
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (翻译)terry crowley: 写给程序员
  • (附源码)计算机毕业设计ssm电影分享网站
  • (蓝桥杯每日一题)love
  • (三)elasticsearch 源码之启动流程分析
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .Net7 环境安装配置
  • .NetCore项目nginx发布
  • .NET开发人员必知的八个网站
  • @Pointcut 使用
  • [100天算法】-x 的平方根(day 61)
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——