11. Interview-SpringCloud/Spring

2020-07-21  本文已影响0人  allen锅
微服务治理

1 Eureka与ZooKeeper的区别?各自优缺点?

2 使用了springcloud什么组件?

3 springcloud和springboot版本号多少?

springcloud&springboot版本对应

4 服务注册与发现机制

微服务注册与发现方案对比

5 服务治理怎么做?

6 服务网关怎么做?

服务网关

服务网关功能

服务网关选型

四大开源服务网关

服务网关性能

7 链路追踪实现原理

7.1 链路追踪实现方案

7.2 链路追踪实现原理

trace架构 四种时间 计算

8 微服务限流

8.1 合法性验证限流

8.2 容器限流

8.3 服务端限流

令牌桶算法

9 zuul网关限流

zuul网关限流实现原理

zuul网关限流配置

zuul网关限流参数 通用配置 Policy属性

zuul网关限流实现步骤

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
     <groupId>com.marcosbarbero.cloud</groupId>
     <artifactId>spring-cloud-zuul-ratelimit</artifactId>
     <version>2.0.0.RELEASE</version>
</dependency>
spring:
  application:
    name: gateway-server #服务名称
  cloud:
    # 设置偏好网段
    inetutils:
      preferred-networks: 127.0.0.
    loadbalancer:
      retry:
        enabled: true
  jackson:
    date-format: yyyy-MM-dd
    joda-date-time-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  redis:
    host: 127.0.0.1
    port: 6379
    timeout: 1000ms
    database: 0
    lettuce:
      pool:
        max-active: 8
        max-wait: -1ms
        max-idle: 8
        min-idle: 0
  zipkin:
    enabled: true
    base-url: http://zipkin-dashboard/


zuul:
  routes:
    user-service:
      path: /user/**
      serviceId: user-service
  add-host-header: true
  sensitive-headers: Access-Control-Allow-Origin,Access-Control-Allow-Methods
  strip-prefix: true
  ratelimit:
    # 开启限流
    enabled: true
    # 存储方式
    repository: REDIS
    # 限流策略
    policies:
      # 指定限流服务
      user-service:
        # 每个周期内请求次数
        limit: 3
        # 单位时间内允许访问的总时间
        quota: 30
        # 周期时间
        refresh-interval: 60
        # 限流方式 USER 根据用户;ORIGIN 原始请求;URL 请求地址;
        type: ORIGIN
server:
  port: 9001    # 端口号

eureka:
  client:
    serviceUrl:
      # 服务器注册/获取服务器的zone
      defaultZone: http://127.0.0.1:9000/eureka/
    healthcheck:
      enabled: true
  instance:
    prefer-ip-address: true

10 服务熔断机制

10.1 微服务熔断实现方案

10.2 熔断器实现原理

10.3 Spring Cloud熔断机制

  1. 添加pom.xml依赖
<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
 </dependency>
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
  1. 启动类注解开启熔断器@EnableCircuitBreaker
@EnableDiscoveryClient
@EnableCircuitBreaker
@SpringBootApplication
@EnableFeignClients(basePackageClasses = {PaymentClient.class})
@EnableScheduling
public class Goods {
 
    public static void main(String[] args) {
        SpringApplication.run(Goods.class, args);
    }
}
  1. FeignClient开启hystrix
feign:
  hystrix:
    enabled: true
  1. 启动类开启hystrix监控@EnableHystrixDashboard
@EnableHystrixDashboard
@EnableDiscoveryClient
@EnableCircuitBreaker
@SpringBootApplication
@EnableFeignClients
public class GoodsApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(GoodsApplication.class, args);
    }
}
  1. 服务熔断
  2. 服务降级

10.4 dubbo熔断机制

11 微服务降级

12 springcloud超时设置和重试机制

##timeout config
hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: true
        isolation:
          thread:
            timeoutInMilliseconds: 60000
ribbon:
  ReadTimeout: 60000
  ConnectTimeout: 60000
  MaxAutoRetries: 0
  MaxAutoRetriesNextServer: 1
  eureka:
    enabled: false

zuul:
  max:
    host:
      connections: 500
  host:
    socket-timeout-millis: 60000
    connect-timeout-millis: 60000

12.1 zuul超时设置

12.2 ribbon超时设置

12.3 hystrix超时设置

hystrix超时设置

13 springcloud hystrix隔离策略

14 重启zuul后为啥第一次访问经常会超时?怎么解决?

hystrix超时设置

15 Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。

16 Spring Boot 的配置文件有哪几种格式?它们有什么区别?

17 Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:

18 SpringBoot开启的两种方式?

19 Spring Boot 自动配置原理是什么?

注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置。META-INF/spring.factories

20 Spring Boot 有哪几种读取配置的方式?

21 SpringBoot 实现热部署有哪几种方式?

22 SpringBoot配置加载顺序?

1、开发者工具 `Devtools` 全局配置参数;

2、单元测试上的 `@TestPropertySource` 注解指定的参数;

3、单元测试上的 `@SpringBootTest` 注解指定的参数;

4、命令行指定的参数,如 `java -jar springboot.jar --name="Java技术栈"`;

5、命令行中的 `SPRING_APPLICATION_JSONJSON` 指定参数, 如 `java -Dspring.application.json='{"name":"Java技术栈"}' -jar springboot.jar`

6、`ServletConfig` 初始化参数;

7、`ServletContext` 初始化参数;

8、JNDI参数(如 `java:comp/env/spring.application.json`);

9、Java系统参数(来源:`System.getProperties()`);

10、操作系统环境变量参数;

11、`RandomValuePropertySource` 随机数,仅匹配:`ramdom.*`;

12、JAR包外面的配置文件参数(`application-{profile}.properties(YAML)`)

13、JAR包里面的配置文件参数(`application-{profile}.properties(YAML)`)

14、JAR包外面的配置文件参数(`application.properties(YAML)`)

15、JAR包里面的配置文件参数(`application.properties(YAML)`)

16、`@Configuration`配置文件上 `@PropertySource` 注解加载的参数;

17、默认参数(通过 `SpringApplication.setDefaultProperties` 指定);

23 保护 Spring Boot 应用有哪些方法?

https://mp.weixin.qq.com/s/HG4_StZyNCoWx02mUVCs1g

24 Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?

25 Spring Boot中的监视器是什么?

26 springboot常用的starter有哪些?

27 如何在不使用BasePACKAGE过滤器的情况下排除程序包?

过滤程序包的方法不尽相同。但是弹簧启动提供了一个更复杂的选项,可以在不接触组件扫描的情况下实现这一点。在使用注释@ SpringBootApplication时,可以使用排除属性。请参阅下面的代码片段:

@SpringBootApplication(exclude= {Employee.class})

public class FooAppConfiguration {}

28 如何禁用特定的自动配置类?

//By using "exclude"

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})

//By using "excludeName"

@EnableAutoConfiguration(excludeName={Foo.class})

//By using property file

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAuto

29 springboot优缺点

30 springboot修改过哪些配置

上一篇下一篇

猜你喜欢

热点阅读