• [记录点滴]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获取数据后转发。

  • 相关阅读:
    GRASS——一个开源的遥感软件
    RSD和GEE的区别
    MIKE 11 GIS是什么?
    使用JavaScript Function.prototype进行代码重构的一些例子
    如何使用Chrome扩展应用postman发送SAP UI5 batch操作
    如何操作SAP UI5应用Footer区域工具栏按钮的背景颜色
    使用VisualVM进行Java应用的性能测量
    如何找到SAP UI5控件ID生成的准确时间点和代码位置
    SAP UI5应用里类型为Edm.DateTime的日期控件设计原理
    SAP UI5应用如果遇到数据绑定问题时,应该如何自己定位问题?
  • 原文地址:https://www.cnblogs.com/rossiXYZ/p/13196317.html
Copyright © 2020-2023  润新知