Spring Cloud

2023-12-25 18:57:58

是什么

????????工具集, 框架集
????????微服务全家桶
????????微服务整套解决方案

不是什么

????????不是单独的框架

1. eureka

注册中心

运行参数

????????注册

????????????????一次次反复尝试注册,直到注册成功

????????拉取

????????????????每30秒拉取一次注册表

????????心跳

????????????????每30秒发送一次心跳

????????????????eureka连续3次收不到心跳, 就会删除该服务

????????自我保护模式

????????????????由于网络不稳定, 15分钟内85%服务器心跳异常

????????????????保护所有的注册信息, 不删除

????????????????网络稳定后, 可以自动退出保护模式, 恢复正常

????????????????开发期间可以先关闭保护模式

eureka和zookeeper

eureka

????????AP, 强调可用性

????????集群 - 对等结构

zookeeper

????????CP, 强调一致性

????????集群 - 主从结构

2. ribbon

一般不直接使用Ribbon, 而是在Feign或Zuul中集成

负载均衡

????????@LoadBalanced 对 RestTemplate 进行增强

????????请求地址用 service-id: http://item-service/....

重试

????????添加 spring-retry 依赖

????????配置重试参数

????????????????MaxAutoRetries?单台服务器重试次数

????????????????MaxAutoRetriesNextServer 更换服务器的次数

????????????????OkToRetryOnAllOperations 是否对所有类型请求都重试,默认只对GET重试

????????????????ConnectTimeout 建立连接超时时间

????????????????ReadTimeout 接收响应的超时时间

3. Hystrix

系统容错

限流

配置

????????添加Hystrix依赖

????????@EnableCircuitBreaker

降级

????????快速失败

????????@HystrixCommand(fallbackMethod="降级方法名")

????????添加降级方法, 实现降级代码

熔断

????????10秒20次请求 (必须首先满足)

????????50%失败, 执行降级代码

????????半开状态

????????????????会尝试发送一次请求

????????????????????????成功, 自动关闭断路器, 恢复正常

????????????????????????失败, 断路器继续保持打开

4. Hystrix dashboard

监控工具

利用actuator

????????暴露监控数据

????????????????监控端点: hystrix.stream

对 hystrix.stream 进行监控

搭建配置

????????Hystrix dashboard 依赖

????????主程序注解 @EnableHystrixDashboard

5. Turbine

聚合监控数据

????????把多台服务器的监控数据聚合起来, 提供给仪表盘, 同时监控

配置

????????app-config: order-service, aaa, bbb, ccc

????????cluster-name-expression: new String("default")

????????@EnableTrubine

监控端点

????????/turbine.stream

6. Feign

声明式客户端

@FeignClient(name="item-service")
public interface ItemFeignClient {
     @GetMapping("/{orderId}")
     JsonResult<List<Item>> getItems(@PathVariable String orderId)
}

集成 Ribbon

默认已经启用负载均衡和重试

????????默认参数

  • MaxAutoRetries=0
    MaxAutoRetriesNextServer=1
    ReadTimeout=1000

集成 Hystrix (不推荐启用)

默认不启用Hystrix

Feign不推荐启用Hystrix (后面再进行分析)

配置启用Hystrix

????????添加 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. 在仪表盘中, 对监控端点进行监控

7. Zuul

API网关

????????统一的调用入口

????????@EnableZuulProxy

????????只需要配置转发路由规则

zuul:
    routes:
        item-service: /item-service/**
        user-service: /user-service/**

????????上面是默认规则

????????默认规则可以根据eureka注册中心的注册表,进行自动配置?

统一的权限校验

????????继承ZuulFilter父类

????????在过滤器中,检查用户权限

集成Ribbon

????????默认启用负载均衡

????????默认不启用重试, 不推荐启用重试

????????????????启用重试

????????????????????????添加spring-retry依赖

????????????????????????zuul.retryable=true

????????????????????????配置重试参数

集成Hystrix

默认启用Hystrix

降级

????????实现FallbackProvider接口

用 actuator 暴露监控端点 hystrix.stream

8. Config配置中心(集中地管理和维护配置文件)

存储

????????默认使用Git存储

????????????????分支

????????????????版本历史

????????????????Tag

????????????????......

????????本地存储

????????数据库存储

配置

????????Config Server依赖

????????Git仓库连接信息

????????@EnableConifigServer注解

Config客户端

????????config client依赖

????????bootstrap.yml

????????????????从eureka获取配置中心服务器的地址

????????????????指定下载的配置文件

9. Bus消息总线

同时刷新多台服务器的配置

向多台服务器群发刷新指令, 要求多台服务器同时刷新

配置

????????添加 Bus 和 RabbitMQ 依赖

????????添加 RabbityMQ 连接信息

????????刷新端点

????????????????在配置中心暴露 bus-refresh

????????接收刷新指令

????????????????其他服务接收刷新指令, 执行刷新操作

10. Sleuth+Zipkin(链路跟踪)

Sleuth

????????产生监控数据

????????只需要添加Sleuth依赖

Zipkin

????????分析展现监控数据

????????默认10%的监控数据发送到Zipkin

配置

????????添加zipkin客户端依赖

????????zipkin.sender.type=rabbit

????????添加RabbitMQ依赖, 和连接信息

文章来源:https://blog.csdn.net/m0_58660225/article/details/135201486
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。