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