一 Springcloud微服务面试题
1.1 为何使用注册中心
1)问题描述
在多个单体微服务之间,可以直接通过http请求进行通信,但是存在以下问题:
1.调用服务提供者时需要写ip和端口,如果出现ip和端口进行了修改,没有及时告知调用者,那么将无法调用服务提供者。
2.被调用的服务,因为机器迁移,多个被调用的服务修改了ip和端口,被调用者需要手动进行修改维护,成本比较高,维护困难。
2)注册中心的作用
注册中心便解决了这些问题,当服务注册到注册中心,我们只需要知道服务名,便可以从注册中心拉取服务提供者最新的信息。当服务变更的时候,注册中心也会通知到各个客户端。
服务注册:就是服务启动的时候吧自己的一些信息(包括ip、端口)等发送给注册中心,由注册中心统一管理。当每个注册中心客户端启动时,会从注册中心获取所有服务的信息存到客户端本地
服务发现:当注册中心发现有新的服务注册进来的时候,会把新服务的信息群发给所有的服务客户端。
健康检查和服务摘除:主动的检查服务健康情况,对于宕机的服务将其摘除服务列表。
3)总结
所有各个微服务需要首先注册到注册中心里面去, 调用者然后从注册中心拿到服务信息,再对具体的微服务发起调用。
注册中心是所有服务的一个统一的管理者。微服务的之间的访问是通过一个注册中心来实现的。
谈一谈我所理解的微服务中的注册中心-WinFrom控件库|.net开源控件库|HZHControls官网
运维高阶必知——微服务注册中心那些事 - 知乎
https://blog.csdn.net/qq_41316955/article/details/127031155
1.2 springcloud的网关为何要注册到注册中心中
Gateway它是间接的起了一个内部微服务的作用,app请求过来是一个具体的微服务的地址连接,网关拿到这个东西以后仍然是要去注册中心去寻址去找到到具体的调用地址,然后再去直接调用下面的微服务。
【微服务】一文读懂为什么需要微服务网关+注册中心_网关和注册中心_Old丶x的博客-CSDN博客
1.3 springcloud如何优雅的进行关闭
1.自定义程序实现:设置预留时间,比如关闭前40s,清除掉nacos需要关闭服务的信息,让请求方刷新到最新的服务列表(最新列表中不包含删除的服务信息),防止请求方再次请求到要删除的服务。
2.使用springboot 版本大于2.3 自带的优雅停机方案。在配置文件中配置server.shutdown=graceful,在web容器关闭时,web 服务器在设定的时间缓冲其内将不再接收新请求。使用 timeout-per-shutdown-phase配置最长等待时间,超过该时间后关闭。
3.使用插件ShutdownHook进行优雅关闭
Spring Cloud 框架优雅关机和重启 - 简书
1.4 @autoconfiguration注解是怎么自动配置的
1)springbootapplication的作用:Springboot最重要的功能是:自动配置。
Spring Boot 的开启注解是:@SpringBootapplication,其实它就是由下面三个注解组成的:@Configuration,@componentscan,@EnableAutoConfiguration这3个注解。
2)@autoconfiguration注解作用
其中最核心的就是这个@EnableAutoConfiguration注解,@EnableAutoConfiguration注解是Spring Boot自动配置机制的入口点,它会启用Spring Boot的自动配置机制,并根据当前应用程序所依赖的jar包和类路径上的资源,自动装配各种组件和配置。
该注解通过@Import注解导入了EnableAutoConfigurationImportSelector类,这个类是自动配置机制的核心实现,负责加载META-INF/spring.factories文件中的自动配置类,并将它们注入Spring容器中。
springboot 自动配置原理
截图如下:
3)总结
@EnableAutoConfiguration 代表开启 SpringBoot的自动装配。
总的来说,Spring Boot自动配置机制的核心就是基于条件注解和类路径扫描机制,在应用程序启动时自动装配各种组件和配置。通过Starter包的定义,Spring Boot可以实现对各种功能模块的自动配置,大大简化了应用程序的开发和部署。
https://blog.csdn.net/yyxiaozhang/article/details/119903577
https://www.zhihu.com/tardis/bd/art/621911639?source_id=1001
https://www.bilibili.com/read/cv11916999/
1.5 @enablexxx注解的理解
@EnableXX内部工作原理就是 @Import导入一个或多个配置。@EnableXX的工作原理实际上就是通过@Import导入指定的配置文件或bean装配到spring容器
https://blog.csdn.net/ye17186/article/details/88052910
SpringBoot入门(6)- @EnableXXX 注解的工作原理_上官天夜的博客-CSDN博客
【SpringBoot】SpringBoot自定义@EnableXX_程序员小菜鸡QAQ的博客-CSDN博客