????????工具集, 框架集
????????微服务全家桶
????????微服务整套解决方案
????????不是单独的框架
????????????????一次次反复尝试注册,直到注册成功
????????????????每30秒拉取一次注册表
????????????????每30秒发送一次心跳
????????????????eureka连续3次收不到心跳, 就会删除该服务
????????????????由于网络不稳定, 15分钟内85%服务器心跳异常
????????????????保护所有的注册信息, 不删除
????????????????网络稳定后, 可以自动退出保护模式, 恢复正常
????????????????开发期间可以先关闭保护模式
eureka
????????AP, 强调可用性
????????集群 - 对等结构
zookeeper
????????CP, 强调一致性
????????集群 - 主从结构
一般不直接使用Ribbon, 而是在Feign或Zuul中集成
负载均衡
????????@LoadBalanced 对 RestTemplate 进行增强
????????请求地址用 service-id: http://item-service/....
重试
????????添加 spring-retry 依赖
????????配置重试参数
????????????????MaxAutoRetries?单台服务器重试次数
????????????????MaxAutoRetriesNextServer 更换服务器的次数
????????????????OkToRetryOnAllOperations 是否对所有类型请求都重试,默认只对GET重试
????????????????ConnectTimeout 建立连接超时时间
????????????????ReadTimeout 接收响应的超时时间
系统容错
限流
配置
????????添加Hystrix依赖
????????@EnableCircuitBreaker
降级
????????快速失败
????????@HystrixCommand(fallbackMethod="降级方法名")
????????添加降级方法, 实现降级代码
熔断
????????10秒20次请求 (必须首先满足)
????????50%失败, 执行降级代码
????????半开状态
????????????????会尝试发送一次请求
????????????????????????成功, 自动关闭断路器, 恢复正常
????????????????????????失败, 断路器继续保持打开
监控工具
利用actuator
????????暴露监控数据
????????????????监控端点: hystrix.stream
对 hystrix.stream 进行监控
搭建配置
????????Hystrix dashboard 依赖
????????主程序注解 @EnableHystrixDashboard
????????把多台服务器的监控数据聚合起来, 提供给仪表盘, 同时监控
????????app-config: order-service, aaa, bbb, ccc
????????cluster-name-expression: new String("default")
????????@EnableTrubine
????????/turbine.stream
@FeignClient(name="item-service")
public interface ItemFeignClient {
@GetMapping("/{orderId}")
JsonResult<List<Item>> getItems(@PathVariable String orderId)
}
默认已经启用负载均衡和重试
????????默认参数
MaxAutoRetries=0
MaxAutoRetriesNextServer=1
ReadTimeout=1000
????????添加 Hystrix 完整依赖
????????yml配置: feign.hystrix.enabled=true
????????@EnableCircuitBreaker
????????降级
????????????????在声明式客户端接口上, 指定一个降级类 @FeignClient(name="item-service", fallbak=ItemFB.class)
????????????????降级类必须实现"声明式客户端接口"
Hystrix dashboard
????????首先有: actuator依赖, hystrix完整依赖, @EnableCircuitBreaker注解
????????1. 暴露监控端点: hystrix.stream
????????2. 重启09项目
????????3. 访问后台服务, 产生监控数据
????????4. 测试监控端点是否可访问, 是否有数据
????????5. 在仪表盘中, 对监控端点进行监控
????????统一的调用入口
????????@EnableZuulProxy
????????只需要配置转发路由规则
zuul:
routes:
item-service: /item-service/**
user-service: /user-service/**
????????上面是默认规则
????????默认规则可以根据eureka注册中心的注册表,进行自动配置?
????????继承ZuulFilter父类
????????在过滤器中,检查用户权限
????????默认启用负载均衡
????????默认不启用重试, 不推荐启用重试
????????????????启用重试
????????????????????????添加spring-retry依赖
????????????????????????zuul.retryable=true
????????????????????????配置重试参数
默认启用Hystrix
降级
????????实现FallbackProvider接口
用 actuator 暴露监控端点 hystrix.stream
????????默认使用Git存储
????????????????分支
????????????????版本历史
????????????????Tag
????????????????......
????????本地存储
????????数据库存储
????????Config Server依赖
????????Git仓库连接信息
????????@EnableConifigServer注解
Config客户端
????????config client依赖
????????bootstrap.yml
????????????????从eureka获取配置中心服务器的地址
????????????????指定下载的配置文件
同时刷新多台服务器的配置
向多台服务器群发刷新指令, 要求多台服务器同时刷新
配置
????????添加 Bus 和 RabbitMQ 依赖
????????添加 RabbityMQ 连接信息
????????刷新端点
????????????????在配置中心暴露 bus-refresh
????????接收刷新指令
????????????????其他服务接收刷新指令, 执行刷新操作
????????产生监控数据
????????只需要添加Sleuth依赖
????????分析展现监控数据
????????默认10%的监控数据发送到Zipkin
????????添加zipkin客户端依赖
????????zipkin.sender.type=rabbit
????????添加RabbitMQ依赖, 和连接信息