[记录点滴]Spring Boot Admin源码分析笔记
[记录点滴]Spring Boot Admin源码分析笔记
0x00 摘要
本文是过去使用Spring Boot Admin时候分析源码的笔记。虽然比较简单,但是也可以看出Spring Boot Admin的实现思想。
0x01 如何使用
如何使用?
在你自己application中加入 @EnableAdminServer,就可以被监控到。
@EnableAdminServer的实现
@Import(AdminServerImportSelector.class) ----- 引入Spring Boot Admin的自动配置类
@EnableZuulServer -------------------------- Spring Boot Admin做了个gateway
public @interface EnableAdminServer {
}
@Import(AdminServerImportSelector.class)
其作用是导出配置:
NotifierConfiguration,
HazelcastStoreConfiguration,
AdminServerCoreConfiguration,
AdminServerWebConfiguration,
DiscoveryClientConfiguration,
RevereseZuulProxyConfiguration
0x02 configuration
以下是各种相关配置
- AdminServerCoreConfiguration 生成很多基础bean
- AdminServerWebConfiguration web相关的配置和bean,EventListener
- DiscoveryClientConfiguration 与client发现相关的bean
- NotifierConfiguration: NotifierListener,以及各种notify需要的配置:CompositeNotifierConfiguration,MailNotifierConfiguration。TelegramNotifierConfiguration......
- RevereseZuulProxyConfiguration 关于zuul的配置, 比如 ApplicationHeadersFilter,SimpleHostRoutingFilter... 因为SBA默认使用@EnableZuulServer
- HazelcastStoreConfiguration 暂时用不到,网格存储用的
0x03 几个关键类
以下是一些关键类
- ApplicationRegistry - 主要作用是: 响应各个service client的注册,生成一个application,然后放到 ApplicationStore中。很多地方会用到,比如 RegistryController 会调用它获取application列表, 获取某一个app details。
- ApplicationStore --- 存储application,可以从这里入手来进行mysql存储,比如自己写一个MysqlApplicationStore。
- SimpleApplicationStore -------- 就是一个内存map
- HazelcastApplicationStore ----- 开源的可扩展的内存数据网格
- ApplicationIdGenerator --- 就是产生个id
- AdminServerProperties --- 每个应用对应的属性,用来配置zuul路由
0x04 discovery
Spring Boot Admin 使用 Spring Clouds DiscoveryClient @EnableDiscoveryClient 来发现应用。
把org.springframework.cloud.client.ServiceInstance转换成Application。其中还获取了 instance.getMetadata().get(KEY_HEALTH_PATH); instance.getMetadata().get(KEY_MANAGEMENT_PATH);
ApplicationDiscoveryListener : 分别响应了以下消息来发现client
import org.springframework.cloud.client.discovery.event.HeartbeatEvent;
import org.springframework.cloud.client.discovery.event.InstanceRegisteredEvent;
import org.springframework.cloud.client.discovery.event.ParentHeartbeatEvent;
import org.springframework.boot.context.event.ApplicationReadyEvent;
如果收到了HeartbeatEvent,则在discover中,会通过 discoveryClient.getServices() 得到目前注册到eureka的服务名字列表,然后注册。
0x05 event
这是内部的各种event,发现了client之后就在内部进行消息传递,进行内部后续动作,比如updateStatus,更新application store
0x06 journal
数据结构
ApplicationEventJournal 就是用SimpleJournaledEventStore(list) 存储 ClientApplicationEvent
Web resource
使用SseEmitter实现了推送。
所谓的Sse其实就是Server-Sent Events,即服务器推送事件,属于HTML5的一项新功能,常用于服务器主动通知客户端有相关信息的更新。其他替代方法一般有WebSocket和客户端定时轮询,前者过于复杂,后者又过于低效而笨拙。SseEmitter属于ResponseBodyEmitter的子类,可以生成text/event-stream格式的信息。
会不停地往浏览器推送最新的journal。
0x07 Model
StatusInfo, Info 这两个类都在Application中存储。
StatusUpdateApplicationListener 会在 ApplicationReadyEvent/ContextClosedEvent/ClientApplicationRegisteredEvent 各种响应中进行update。
0x08 registry
ApplicationRegistry : 主要作用就是响应各个service client的注册,生成一个application,然后放到 ApplicationStore中。
RegistryController : REST controller for controlling registration of managed applications。也用来给浏览器获取applicaiton列表,application detail。
0x09 web
AdminController : 用来注释了几个类 RegistryController, NotificationFilterController
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AdminController {
}
ApplicationOperations : Handles all rest operations invoked on a registered application. 对于info, health, 就是调用application中的对应url获取数据后转发。
[记录点滴]Spring Boot Admin源码分析笔记的更多相关文章
- Spring Boot缓存源码分析
前言 项目里面要增加一个应用缓存,原本想着要怎么怎么来整合ehcache和springboot,做好准备配置这个配置那个,结果只需要做三件事: pom依赖 写好一个ehcache的配置文件 在boot ...
- spring boot 入口源码分析
public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); / ...
- spring boot admin 源码包的编译
https://github.com/codecentric/spring-boot-admin 下载地址: 编译要求: Build Requirements: Node.js v8.x (LTS) ...
- Spring的IOC源码分析
Spring IOC 容器源码分析 Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器.既然大家平时都要用到 Spring,怎么可以不 ...
- Spring IOC 容器源码分析 - 循环依赖的解决办法
1. 简介 本文,我们来看一下 Spring 是如何解决循环依赖问题的.在本篇文章中,我会首先向大家介绍一下什么是循环依赖.然后,进入源码分析阶段.为了更好的说明 Spring 解决循环依赖的办法,我 ...
- Spring IOC 容器源码分析 - 创建单例 bean 的过程
1. 简介 在上一篇文章中,我比较详细的分析了获取 bean 的方法,也就是getBean(String)的实现逻辑.对于已实例化好的单例 bean,getBean(String) 方法并不会再一次去 ...
- Spring IOC 容器源码分析 - 获取单例 bean
1. 简介 为了写 Spring IOC 容器源码分析系列的文章,我特地写了一篇 Spring IOC 容器的导读文章.在导读一文中,我介绍了 Spring 的一些特性以及阅读 Spring 源码的一 ...
- spring boot @Value源码解析
Spring boot 的@Value只能用于bean中,在bean的实例化时,会给@Value的属性赋值:如下面的例子: @SpringBootApplication @Slf4j public c ...
- Spring Developer Tools 源码分析:三、重启自动配置'
接上文 Spring Developer Tools 源码分析:二.类路径监控,接下来看看前面提到的这些类是如何配置,如何启动的. spring-boot-devtools 使用了 Spring Bo ...
- Spring Developer Tools 源码分析:二、类路径监控
在 Spring Developer Tools 源码分析一中介绍了 devtools 提供的文件监控实现,在第二部分中,我们将会使用第一部分提供的目录监控功能,实现对开发环境中 classpath ...
随机推荐
- (Python基础教程之十九)Python优先级队列示例
1.什么是优先队列 优先级队列是一种抽象数据类型,类似于常规队列或堆栈数据结构,但每个元素还具有与之关联的"优先级". 在优先级队列中,优先级高的元素先于优先级低的元素提供. 如果 ...
- 话说ReferenceQueue
也是几年前写的,在内部邮件列表里发过,在这里保存一下. 看到了这篇帖子: <WeakHashMap的神话>http://www.javaeye.com/topic/587995 因为Jav ...
- 【C++】static 知识整理 【静态与局部静态】
目录 类外 类内 局部静态 local static 类外 类内 类外 C++的静态可以分为两种情况来讨论:在类外和在类内. 对于静态变量/函数,链接将只在内部 (如果不用static,那么在不同文件 ...
- 使用 cProfile 分析和定位 Python 应用性能瓶颈点
一.需求背景 性能压测时,发现某接口存在性能瓶颈,期望借助工具定位该瓶颈,最好能定位至具体慢方法. 二.cProfile 简介 cProfile 是 Python 标准库中的一个模块,用于对 Pyth ...
- docker-compose安装mysql
0. 安装docker-compose,参见:[Amadeus原创]docker compose的安装 1. 目录结构:按以下目录结构mkdir文件夹和相关文件 mysql 目录下的 data 为数据 ...
- 12C++循环结构-for循环(2)
一.循环变量为字符型 试编一程序,按字典顺序输出26个字母. 流程图: 程序代码如下: #include <iostream> //包含输入输出流头文件iostream using nam ...
- Ubuntu中文件夹建立软链接方法
1:预备知识 -s 是代号(symbolic)的意思. 这里有两点要注意:第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化:第二,ln的链接又软链 ...
- Qt/C++编写onvif工具(搜索/云台/预置位/OSD/录像存储)
一.前言 从最初编写这个工具开始的时间算起来,至少5年多,一直持续完善到今天,这个工具看起来小也不小大也不大,但是也是经历过无数个现场的洗礼,毫不夸张的说,市面上能够遇到的主流的厂商的设备,都测试过, ...
- yarn : 无法加载文件 C:\Users\duany\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本
在win10 下安装yarn后,在编辑器中检查yarn的安装的时候会出现: 解决方法 1:搜索powershell,以管理员方式运行powershell2:使用命令更改计算机的执行策略 执行: set ...
- 在C++中实现委托事件的方法
参考链接: 1.在C++中模拟委托事件的方法(一) 2.利用C++的模板模拟.net的代理语法 源码学习: 1.https://pan.baidu.com/s/15vbryvzDnvmJ6FMku6_ ...