SpringCloud总结

三步走

1、搭springboot项目  引入启动器
2、覆盖默认配置
3、springboot的引导类上加上注解,告诉eureka是服务还是客户端

什么是SpringCloud?


   是一套微服务架构的解决方案,是很多组件的集合。
   Eureka:注册中心  服务注册和发现服务
   Ribbon:负载均衡
   Hystrix:熔断组件
   Feign:基于Http远程调用组件
   Zuul:网关 请求鉴权  服务路由  过滤器

一、Eureka


   注册中心:eureka-server
   1、引入服务端启动器
             
                  org.springframework.cloud
                  spring-cloud-starter-netflix-eureka-server
             

   2、配置应用名spring.application.name=eureka-server
      注册地址
       eureka:
         client:
           service-url:
             defaultZone: http://localhost:端口/eureka
   3、在引导类上加上注解@EnableEurekaServer

   客户端:service-provider   service-consumer
   1、引入客户端启动器
             
                  org.springframework.cloud
                  spring-cloud-starter-netflix-eureka-client
             

   2、配置应用名spring.application.name=service-provider
      从哪个注册地址获取服务ip列表
      eureka:
        client:
          service-url:
            defaultZone: http://localhost:10089/eureka
   3、在引导类上加注解@EnableEurekaClient(eureka提供)  或 @EnableDiscoveryClient(推荐使用:springcloud提供)

二、Ribbon


   1、正常是引入启动类,但是ribbon已经被Eureka集成了,所以ribbon不用再单独引入启动类
   2、在引导类中注册的RestTemplate工具类上加注解@LoadBalanced(负载均衡)
   3、修改调用方式,用服务名去调用
      由原来的固定ip调用User user = restTemplate.getForObject("http://"+host+":"+port+"/user/" + id, User.class);
      改造为负载均衡调用User user = restTemplate.getForObject("http://service-provider/user/" + id, User.class);


三、Hystrix


   降级:检查每次的请求,  是否请求超时   或   连接池已满
   1、引入启动器
             
                  org.springframework.cloud
                  spring-cloud-starter-netflix-hystrix
             

   2、在引导类上加注解@EnableCircuitBreaker
   3、定义降级方法:
                 局部:降级方法要和被降级方法的入参和返回值都保持一致,方法名可以任意,但是要见名知意
                 全局:降级方法返回值和被降级方法的返回值保持一致,入参必须为空(因为能用的降级方法会被多个方法使用,多个方法无法保证入参一致),方法名可以任意,但是要见名知意
   4、使用
         局部:在被降级方法上加上注解@HystrixCommand(fallbackMethod="局部降级方法名"),要在注解内指定降级方法名
         全局:在被降级的类上加注解@DefaultProperties(defaultFallback="全局降级方法名")   并且要在  降级的方法上加上注解@HystrixCommand

   熔断:如果失败请求次数达到阈值(默认最低20次,50%失败率)不再发送请求到服务端
   1、close:熔断闭合状态, 所有发送请求都能正常送达   (没有开启熔断)
   2、open:熔断打开状态, 所有请求都无法发送到达      (开启了熔断,就像保险丝被烧断了)
   3、half open:熔断半开状态,在打开状态状态默认5s后,过了熔断打开状态的休眠期后,进入到的状态,会放过去部分请求:
                        如果放过到请求全部健康返回,则将状态切换为close熔断关闭状态(所有请求都正常放行);
                        如果放过的请求没有健康正常返回,则将状态切换为open熔断打开状态

四、Feign


   1、引入OpenFeign启动器
             
                  org.springframework.cloud
                  spring-cloud-starter-openfeign
             

   2、在引导类上加注解@EnableFeignClients
   3、定义接口,在接口上加注解@FeignClient(value = "service-provider",  fallback=UserClientFallback.class, configuration = FeignConfig.class) //标注了一个feign接口
   4、接口定义要求:入参和出参必须和调用的目标方法接口保持一致,类似于之前的controller,将uri写到方法上@GetMapping("/user/{id}")
   5、开启熔断:
      feign:
        hystrix:
          enabled: true # 开启Feign的熔断功能
   6、创建一个熔断降类,实现feign接口,实现对应的方法,方法中写降级内容

五、Zuul


   1、引入启动器
             
                  org.springframework.cloud
                  spring-cloud-starter-netflix-zuul
             

   2、配置路由规则
        1、zuul.routes.服务路由的名称.path=/service-provider/**
           zuul.routes.服务路由的名称.url=http://127.0.0.1:8081

        2、zuul.routes.服务路由的名称.path=/service-provider/**
           zuul.routes.服务路由的名称.serviceId=service-provider

        3、zuul.routes.服务名称=/service-provider/**    简写版,推荐使用

        4、不配,即默认配置,默认情况,每个微服务的服务名,即是访问映射地址
   3、在引导类加注解@EnableZuulProxy

   4、zuul过滤器
       自定义的过滤器继承顶级父类
          public abstract ZuulFilter implements IZuulFilter{

               //过滤类型  pre  route   post   error
              abstract public String filterType();

               //优先级  数字越小优先级越高  建议留下可扩展空间    为什么会有:有多个过滤器时,如果返回的过滤类型filterType都相同,则需要配置优先级
              abstract public int filterOrder();

               //true表示会运行run方法    false不运行run方法
              boolean shouldFilter();// 来自IZuulFilter

               //真正实现的业务逻辑
              Object run() throws ZuulException;// IZuulFilter
          }

你可能感兴趣的:(java后端,SpringCloud,spring,cloud,spring,后端)