[记录点滴]SpringBootAdmin源码分析笔记
[记录点滴]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。
<
RevereseZuulProxyConfiguration 关于zuul的配置, ⽐如 ApplicationHeadersFilter, 因为SBA默认使⽤@EnableZuulServer
HazelcastStoreConfiguration 暂时⽤不到,⽹格存储⽤的
0x03 ⼏个关键类
以下是⼀些关键类
ApplicationRegistry - 主要作⽤是: 响应各个service client的注册,⽣成⼀个application,然后放到 A
pplicationStore中。很多地⽅会⽤到,⽐如 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。其中还获取了 Metadata().get(KEY_HEALTH_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.t.event.ApplicationReadyEvent;
如果收到了HeartbeatEvent,则在discover中,会通过 Services() 得到⽬前注册到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格式的信息。
springboot结构会不停地往浏览器推送最新的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, hea
lth, 就是调⽤application中的对应url获取数据后转发。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论