1、面试题:SpringCloud vs SpringCloudAlibaba 什么关系?
SpringCloud 属于Spring家族的一员
Eureka Gateway Feign Ribbon Hystrix SpringCloudConfig Slueth
看依赖:spring-cloud-starter-eureka-server/client
SpringCloudAlibaba 属于SpringCloud的一套组件
Nacos Sentinel Seata
看依赖:spring-cloud-starter-alibaba-xxxx
2、面试题:Sentinel 和 Hystrix 的区别?
1)隔离方式不同,Sentinel采用信号量,Hystrix默认采用线程池,信号号量性能比线程池好
2)熔断策略不同,Sentinel可以基于超时和异常比例,Hystrix只支持异常比例
3)限流功能不同,Sentinel有丰富限流功能(QPS,链路模式等),Hystrix限流功能弱
4)第三方框架整合,Sentinel可以整合SpringCloud和Dubbo,Hystrix只能整合SpringCLoud
3、面试题:项目中使用了熔断机制吗?
项目也使用了Sentinel作为熔断机制。Sentinel实现熔断机制主要有线程隔离和熔断降级,首先我们项目要
在yml配置中开启Sentinel的线程隔离和熔断降级功能,然后在Sentinel界面加上隔离最大并发线程数或熔断参数配置,接着给Feign接口定制一个服务降级实现类,在隔离和熔断发生后,给用户提示友好信息。
feign:
sentinel:
enabled: true # 开启sentinel支持
public class UserClientFallbackFactory implements FallbackFactory
@Override
public UserClient create(Throwable throwable) {
return new UserClient() {
@Override
public User findById(Long id) {
User user = new User();
user.setUsername(“查无此人”);
user.setAddress(“查无地址”);
return user;
}
};
}
}
1)线程隔离:
在服务消费方加入服务调用占用线程数统计,一旦超过线程数上限,则做服务降级(在服务消费方定制一个降级处理方法,定制失败消息)
2)熔断降级:
在服务消费方加入超时或异常比例统计程序,该程序一旦统计超过比例,一旦比例超过阈值,则做服务降级(在服务消费方定制一个降级处理方法,定制失败消息),熔断有时长,时间到达会尝试请求1次,如果成功,则正常调用,如果失败,继续熔断。
4、面试题:请问 熔断 和 降级 的区别?
1)熔断:是一个Sentinel或Hystrix框架的一个自带的机制,该机制统计超时比例或异常比例的程序。当熔断达到异常比例或超时比例的阈值时,就会发生降级。
2)降级:其实本质就是一个Fallback实现类,返回给用户友好信息。
3)通常在项目中可以加入线程隔离或熔断机制,一旦程序线程隔离或者熔断了,就会进入降级。
5、面试题:请解释一下SpringCloud中Feign接口调用的过程?
首先,Feign接口写在服务消费方,消费方在调用Feign接口的时候,会扫描Feign接口上面的注解(如@FeignClient、@GetMapping @RequestParam等),然后拼接需要调用的url路径和参数值,接着,在
底层利用JDK动态代理产生代理对象,其中代理对象底层使用RestTemplate向服务提供方发出请求,获取响应结果
响应结果返回到消费方后,会进行结果解析(如返回json数据的话会利用Jackson或fastjson框架转换为对象给我们返回)
6、面试题:能不能大概解释一下熔断器的执行流程?
首先,熔断器就是一个超时比例或异常比例的统计程序,该程序放在服务消费方,当超时比例或异常比例没有达到阈值,熔断器处于关闭状态,请求可以正常通过。
但是,当超时比例或异常比例到达阈值,熔断器开启,所有请求会立即被降级,请求降级后会执行我们定制的Fallback接口,返回给用户友好提示信息。
接着,熔断器会等待一段时间(如5s),然后进入半开状态,半开状态会放行一个请求尝试调用,如果失败,继续保持打开状态,如果成功,则回到关闭状态。
7、在SpringBot项目中如何让一个Bean放到IOC容器?
常用的有:
1)直接在Bean上面加@Component,让该Bean的包名在项目启动类同级或子级下。
2)直接在Bean上面加@Component,在项目下写@Configuration配置类,通过@ComponentScan注解自行扫描Bean的目录
3)在项目下写@Configuration配置类(放在启动类同级或子级下),直接写一个方法创建Bean对象,方法上添加@Bean注解
4)在项目下写@Configuration配置类(不放在启动类同级或子级下),在resources/META-INF/目录下创建spring.factories文件 把配置类添加到SpringBoot自动装配列表中,让其加载,在配置类中写一个方法创建Bean对象,方法上添加@Bean注解
