博达网站建设流程,wordpress4.7优化,电商网站建设是做什么的,wordpress整站下载文章目录 1. 关系缘由2. Actuator简介及简单使用3. Endpoint和Actuator的关系4. Endpoint和HasFeatures的关系5. Endpoint和HasFeatures原理解析5.1 Endpoint的实现原理5.2 HasFeatures的实现原理 6. 个人闲谈 1. 关系缘由
我们经常可以在Springboot中看到Endpoint注解#x… 文章目录 1. 关系缘由2. Actuator简介及简单使用3. Endpoint和Actuator的关系4. Endpoint和HasFeatures的关系5. Endpoint和HasFeatures原理解析5.1 Endpoint的实现原理5.2 HasFeatures的实现原理 6. 个人闲谈 1. 关系缘由
我们经常可以在Springboot中看到Endpoint注解被该注解标注的类里面一般都会有XXXOperation注解也可以在Springcloud中看到带有Endpoint字样的实现类和带有Features等字样的实现类初次看到总会觉得很疑惑完全不知道这些类的作用以及相关的框架但却很常见。这次我们便来捋一下各种带有Endpoint、HasFeatures和NamedFeature这些类具体的作用以及和Actuator的关系。
2. Actuator简介及简单使用
Actuator是基于Springboot体系开发的其作用在于实时的监控程序获取程序的运行数据如获取健康检查、指标收集、程序bean运行情况及配置属性等信息。因此Actuator的作用便是对外暴露获取程序信息的HTTP接口可以对Actuator进行扩展从而实现实时监控的目的。下面是Actuator的简介图 想要引入Actuator也非常简单只需要配置以下maven配置即可
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactIdversion${springboot对应的版本}/version
/dependency引入后配置需要加载哪些监听信息
management:endpoints:web:exposure:include: *上面的配置意为开放所有的HTTP接口调用/actuator接口即可查看具体有哪些接口开放至于Actuator有哪些接口、作用是什么及调用路径是什么这里便不一一介绍了。
3. Endpoint和Actuator的关系
前面说了Actuator的主要作用便是开放HTTP接口供开发者查询程序的运行状态而支持哪些HTTP接口便是由Endpoint来决定的。Endpoint一般指的是Springboot的Endpoint注解而被该注解标注的类名称一般都会带有Endpoint的字样该注解源码如下
Target(ElementType.TYPE)
Retention(RetentionPolicy.RUNTIME)
Documented
public interface Endpoint {/** Endpoint的唯一名称该属性为开放的HTTP接口路径名称 */String id() default ;/** 是否默认打开设置为false则需要手动配置打开 */boolean enableByDefault() default true;}所以我们可以把Endpoint的功能近似理解成SpringMVC中的RequestMapping注解其仅仅是用来标注类并定义HTTP接口的路径。所以当我们看到某个类被Endpoint标注了我们就能知道这是Actuator开放出去用来监听程序信息的HTTP接口。
那现在又有个问题看Endpoint的代码我们可知这个注解只能标注在类上那我开放出去的这个HTTP接口被调用了会具体应该调用哪个方法这就涉及到另外一些必须搭配使用的三个注解ReadOperation、WriteOperation和DeleteOperation。
Endpoint一般都会前面三个注解当中的一个进行搭配使用Endpoint用来定义HTTP接口的路径而XXXOperation注解则用来定义接收请求的调用方法。搭配使用就做到了Actuator对开发者开放监听系统层面HTTP接口的能力。其关系图如下 至此Actuator和Endpoint、ReadOperation、WriteOperation、DeleteOperation四个注解的关系便讲到这里。
4. Endpoint和HasFeatures的关系
如果要说Endpoint和HasFeatures的关系我们就需要先知道Springcloud和Actuator的关系。Actuator是基于Springboot开发的而Springcloud则是在Springboot的基础上扩展了微服务相关的框架和功能因此Springcloud天然的支持使用Actuator。
Springcloud是面向于微服务的因此注定了框架会十分的庞杂想要不仔细看系统从而精确的掌握某个微服务使用的技术栈是不现实的问题。因此Springcloud就需要一个机制来让开发者可以快速的了解程序使用的技术栈及其版本而天然支持的Actuator则是不二之选。
Springcloud使用Actuator管理对外暴露的HTTP接口在此基础上又开发了一套由HasFeatures、NamedFeature和Feature所组成的功能注册机制需要对接进来的框架只需要往Spring容器中注册HasFeatures对象Springcloud便可以使用Actuator暴露的接口返回程序具体使用了哪些框架。示意图如下 所以HasFeatures、NamedFeature和Features这一套是Springcloud开放给其它框架用来注册自身的机制再使用Endpoint注解结合Actuator对外暴露HTTP接口最终使开发者可以快速了解程序所使用的框架。
5. Endpoint和HasFeatures原理解析
对于Endpoint和HasFeatures的原理解析我们分为两个大阶段
解析Endpoint的实现原理这部分是基于Springboot实现的在Endpoint实现原理基础上再去分析HasFeatures的原理这部分是Springcloud新增的特性。
5.1 Endpoint的实现原理
先分析Actuator原本最基础的Endpoint注解实现原理我们也把这个实现原理分为4部分
搜索并创建Endpoint注解的bean对象处理bean对象中被XXXOperation注解的方法并将其解析成WebOperation对象将获取到的Endpoint对象信息注册为Servlet的HTTP接口调用时解析HTTP请求并调用到WebOperation对象中完成方法的调用与返回。 5.2 HasFeatures的实现原理
HasFeatures是Springcloud引入的新机制其实现也非常简单只需要各个框架使用HasFeatures封装框架的核心类并注册到Spring容器即可。Springcloud会从Spring容器中获取所有的HasFeatures类并传递到FeaturesEndpoint调用HTTP接口时便转成Features对象返回注册的功能特性。总的来说可以总结成三步
框架使用HasFeatures封装核心类并注册到Spring容器中从Spring容器中获取所有的HasFeatures并传递到FeaturesEndpointbean中调用HTTP接口时将HasFeatures转成Features对象并返回。
下图将以Feign框架为例 6. 个人闲谈
这套实现单独拎出来分析确实是比较简单的只要对Spring容器和Servlet的注册实现机制稍微有所了解就可以把整个来龙去脉理的比较清楚因此便不对源码进行过多的分析了。
Springcloud框架提供出了HasFeatures功能特性注册机制确实是一种非常好的思路可以让开发者通过调用一次HTTP接口便可以得知系统所引入的功能特性。但这种基于Actuator的机制还是不够便利并且而不是所有的人都需要使用Actuator来对程序进行监控有一定规模的公司都有自己的监控系统Actuator反倒是有点鸡肋了。
因此个人认为Springcloud除了可以将HasFeatures对接进Actuator的规范和实现方式还可以把HasFeatures机制和Logger结合提供一个开关系统启动时直接打印引入的功能特性这样或许可以提升一定的独立性和便利性使用面更广。