在springboot的基础上构建的微服务框架
1.引入组件的启动器
2.覆盖默认配置
3.在引导类上添加相应的注解
复制代码
eureka
注册中心,服务的注册与发现
服务端
1.引入服务端启动器:eureka-server
2.添加了配置
spring.applicaiton.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.client.register-with-eureka
是否注册给eureka容器
默认true
eureka.client.fetch-registry
是否拉取服务列表
默认true
eureka.client.registry-fetch-interval-seconds
拉取服务的间隔时间
3.@EnableDiscoveryClient
启用eureka客户端
复制代码
ribbon
负载均衡组件
eureka、feign以及zuul已集成
配置负载均衡策略
<服务名>.ribbon.NFLoadBalancerRuleClassName
负载均衡策略的全路径
@LoadBalanced
在RestTemplate的@Bean方法上
复制代码
hystrix
容错组件
降级
1.引入hystrix的启动器
2.添加配置,超时时间的配置
3.@EnableCircuitBreaker
启用熔断组件
@SpringCloudApplication
@SpringBootApplication
@EnableDiscveryClient
代码
局部
返回值和参数列表和被熔断的方法一致
在被熔断的方法上@HystrixCommand(fallbackMethod="熔断方法名")
全局
返回值和被熔断的方法返回值一致,不能有参数列表
在类上@DefaultProperties(defaultFallbck="全局熔断方法名")
在具体的被熔断方法上@HystrixCommand
熔断
close
关闭状态
所有请求都正常访问
open
打开状态
所有请求都无法访问
触发:连续失败的比例大于50%或者失败次数不少于20
维持5s的休眠时间
half open
半开状态
释放部分请求通过
正常
close
不正常
open
触发:休眠时间之后
复制代码
feign
远程调用组件
集成ribbon和hystrix
使代码更加优雅
1.引入feign的启动器
2.feign.hystrix.enable=true
开启熔断
3.@EnableFeignClients
开启feign的功能
代码
定义一个接口
@FeignClient(value="服务名", fallback=实现类.class)
方法上的注解使用的都是springMVC的注解
复制代码
zuul
网关组件
路由
过滤器
1.引入启动器
2.添加配置
路由的配置
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/**
不配置
默认服务的入口就是以服务名为前缀
3.@EnableZuulProxy
开启zuul网关组件
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
复制代码
原文
https://juejin.im/post/5d8e38426fb9a04df00ecbb5