什么是SpringCloud
在SpringBoot的基础上构建的微服务框架
使用方式
- 引入组件的启动器
- 覆盖默认配置
- 在引导列上添加相应的注解
Eureka注册中心组件
注册中心,服务的注册于发现
服务端使用操作
- 引入服务端启动器:eureka-server
- 添加配置
spring.application.name=服务名
eureka.client.service-url.defaultZone=http://localhost:10086/eureka
eureka.server.eviction-interval-timer-in-ms
剔除无效连接的时间间隔eureka.server.enable-self-preservation
关闭自我保护
@EnableEurekaServer
开启eureka服务端功能
客户端使用操作
- 引入启动器:eureka-client
- 添加配置
spring-application.name
eureka.client.service-url.defaultZone
eureka.instance.lease-renewal-interval-in-seconds
心跳时间eureka.instance.lease-expiration-duration-in-seconds
过期时间eureka.client.register-with-eureka
是否注册给eureka容器(默认true)eureka.client.fetch-register
是否拉取服务列表(默认true)eureka.client.registry-fech-interval-seconds
拉取服务的时间间隔
@EnableDiscoveryClient
启用eureka客户端
Ribbon负载均衡组件
eureka、feign以及zuul已集成
使用步骤
- 配置负载均衡策略:
<服务名>.ribbon.NFLoadBalancerRuleClassName=负载均衡策略的全路径
- @LoadBalanced 在RestTemplate的@Bean方法上
Hystrix容错组件
降级
- 引入hystrix启动器
- 添加配置,超时时间的配置
@EnableCircuitBreaker
启用熔断组件- 可以用
@SpringCloudApplication
替代@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
降级代码实现过程
局部
- 返回值和参数列表和被熔断的方法一致
- 在被熔断的方法上
@HystrixCommand(fallbackMethod="熔断方法名")
- 返回值和被熔断的方法返回值一致,不能有参数列表
全局
- 在类上
@DefaultProperties(defaultFallback="全局熔断方法")
- 在具体的被熔断方法上
@HystrixCommand
熔断
close 关闭状态,所有请求正常访问
open 打开状态,所有请求都无法访问(触发:连续失败的比例大于50%或失败次数不少于20次。维持5s的休眠时间)
half open 半开状态,释放部分请求通过(触发:休眠时间之后)
feign远程调用组件
远程调用组件,内部继承了ribbon和hystrix
使代码更加优雅
使用方式
- 引入feign启动器
feign.hystrix.enable-true
开启熔断@EnableFeignClients
开启feign功能- 定义一个接口
@FeignClient(value="服务名",fallback="熔断实现类.class")
- 方法上使用的注解都是springMVC的注解
zuul网关组件
- 引入启动器
- 添加配置
- 路由的配置
- zuul.prefix 路由前缀
- 四种路由配置方式
zuul.routes.<路由名>.path=/service-provider/**
zuul.routes.<路由名>.url=http://localhost:8081
zuul.routes.<路由名>.path=/service-provider/**
zuul.routes.<路由名>.serviceId=service-provider
zuul.routes.<路有名:服务名>=/service-provider/**
默认服务的入口就是以服务名为前缀,不需要配
- @EnableZuulProxy 开启zuul网关组件
- 自定义过滤器
- IZuulFilter 默认的抽象实现类是ZuulFilter
- filterType(pre post route error)
- filterOrder 执行顺序,返回值越小,优先值越高
- shouldFilter 是否执行run方法,true执行
- run 过滤器的具体逻辑
- 四种执行顺序
- pre route post
- pre/route 异常,error post
- post 异常,执行 error
- error 异常,执行error post