SpringCloud

版本

springboot: 2.3.2.RELEASE
springcloud: Hoxton.SR12

1. Eureka服务注册和发现

1.1 客户端

  • 添加eureka client依赖
  • yml配置eureka服务器连接地址
  • (可选)启动类添加 @EnableDiscoveryClient 注解
  • 客户端启动反复尝试注册,直到注册成功
  • 客户端每30秒向服务中心拉取一次注册表
  • 客户端每30秒发送一次心跳

1.2 服务端

  • 添加 eureka server 依赖
  • 启动类添加 @EnableEurekaServer 注解,通过注解来触发自动配置
  • 注册中心连续3次收不到心跳,就会删除该服务
  • yml配置eureka服务器连接地址
  • 自我保护模式:
    • 由于网络不稳定,15分钟内85%的服务器心跳异常就会触发自我保护模式.
    • 自我保护模式时,保护所有的注册信息,不删除
    • 网络稳定后,自动退出保护模式,恢复正常
    • 开发期间建议关闭保护模式
  • 单台服务器
    • 针对单台Eureka服务器,设置为不向自己注册,不向自己拉取
  • 集群服务器
    • 集群服务器之间互相注册,互相拉取
    • yml profile文件特殊写法

2.Feign远程服务调用

2.1 远程服务调用

  • 添加openfeign依赖

  • 用Feign的声明式客户端接口做远程调用

    • 接口上添加 @FeignClient 注解
      • 三个配置:
        调用哪个服务
        调用这个服务的哪个路径
        向这个路径传递什么参数
  • 主启动类添加 @EnableFeignClients 注解

2.2 集成Ribbon(负载均衡)

  • 默认已经启用负载均衡和重试
    • 重试参数(默认已配置)
      MaxAutoRetries: 单台服务器重试次数,默认值是 0
      MaxAutoRetriesNextServer: 更换服务器的次数, 默认值是 1
      ReadTimeout: 等待响应的超时时间,默认值是 1000毫秒
      OkToRetryOnAllOperations: 是否对所有请求方式都重试,默认只对GET重试
      ConnectTimeout: 与后台服务器建立网络连接的超时时间

2.3 集成Hystrix

  • 不建议开启,直接在网关层面做降级熔断

3. Zuul API网关

3.1 统一的调用入口

  • 添加 zuul 依赖
  • yml配置转发规则(默认已配置,最好手动再配置一次), serviceId: /serviceId/**
  • 启动类注解 @EnableZuulProxy

3.2 统一的权限验证

自定义权限验证过滤器案例说明

  • 通过Zuul的过滤器,判断用户权限
  • 继承 ZuulFilter ,重写方法,添加 @Component
  • 过滤器类型 pre routing post error
  • 默认有5个过滤器,在第5个过滤器执行的时候,才会把当前调用的服务id写到上下文中

3.3 集成Ribbon

  • Zuul网关默认启用Ribbon负载均衡
  • 默认不启用重试机制(减轻网关压力)
  • 如果启用重试策略,需要添加 spring-retry 依赖,配置文件打开重试设置

3.4 集成Hystrix

自定义降级策略案例说明

3.4.1 Zuul默认启用Hystrix

3.4.2 hystrix容错降级:自定义降级策略:

  • 实现 FallbackProvider 接口, 重写方法
  • 添加 @Component 注解
  • zuul会用自动配置类,对降级类进行自动配置

3.4.3 hystrix 限流 – 熔断

当流量过大,后台服务出现故障,可以断开后台服务的链路,等待后台服务恢复.当出现断路时,如果写了降级方案,就会自动调用降级处理方案

  • 断路器打开的条件
    • 10秒20次请求(必须首先满足)
    • 50%失败,执行了降级的代码
  • 半开状态
    • 断路器打开一段时间后,会进入半开状态
    • 会自动尝试发送一次客户端调用
    1. 成功,关闭断路器,恢复正常
    2. 失败,继续保持打开状态

3.4.3 Hystrix暴露监控日志

  • zuul网关默认关联 actuator 依赖
  • yml配置暴露监控日志 (打开监控端点)

3.5 Hystrix Dashboard

  • 新建moudle
  • 添加 hystrix-dashboard 依赖
  • yml配置允许抓取的服务器列表
  • 启动类添加 @EnableHystrixDashboard 注解
  • 监控网关暴露的 hystrix.stream 端点
  • 访问: http://localhost:port/hystrix,在输入框填写日志数据地址(聚合监控地址)

4. Turbine 聚合监控数据

  • 新建moudle
  • 依赖: eureka client , turbine
  • yml配置:
    • app-config: 要抓取的服务id列表
    • 为聚合后的数据命名: new String(“default”)
  • 启动类添加 @EnableTurbine 注解
  • 查看日志地址:http://localhost:port/turbine.stream

5. config配置中心

  • 准备git仓库存放配置文件
    • 在项目目录下新建 config 文件夹
    • 添加工程所需要的配置文件,命名为:serviceId-dev.yml
    • 把配置文件推送到远程仓库
    • 因为本地iten服务设置了启动参数,所以在配置中心可以设置不覆盖本地启动参数,防止8080端口占用,其他参数同理
      override-none: true			//不覆盖本地参数
      
  • 搭建配置中心服务
    • 新建moudle
    • 依赖: eureka client、config server
    • yml配置文件
      git.uri = git仓库地址
      search-paths = config(配置文件所在目录)
      ​例:
      git.uri = https://gitee.com/chen-chenxin/CGB2105V.git
      search-paths = springcloud1/config
      
      如果是私有库
      username = xxxxxx
      password = xxxxxx
      
    • 启动类 @EnableConfigServer 注解
  • 修改需要连接配置中心的客户端工程
    • 添加 config client 依赖
    • 修改配置文件名为 bootstrap.yml
    1. 连接eureka注册中心
    2. 要获取的配置中心的serviceId
    3. 要下载的配置文件名和profile名

6. BUS 消息总线,配置刷新

目的: 配置中心修改对应服务配置,客户端可以获取到最新配置.
原理: 当修改配置中心的配置后,向 bus-refresh 刷新端点发送 post 请求
http://localhost:port(config-server)/actuator/bus-refresh,然后对应服务会重新连接配置中心重新加载配置信息,以达到实时刷新的目的.
使用的模式为 主题 模式,交换机为 topic

  • 配置中心服务
    • 依赖 bus、rabbitmq-binder、rabbitmq、actuator
    • yml
    1. 设置rebbitmq连接配置
    2. 暴露bus-refresh路径
  • 客户端
    • 依赖 bus、rabbitmq-binder、rabbitmq
    • 在要获取更新的类上添加 @RefreshScope 注解
  • 更新配置中心的对应服务的配置信息

7. 链路跟踪(sleuth + zipkin)

sleuth: 用来产生链路跟踪日志
zipkin: 收集链路跟踪数据,提供可视化的链路分析
过程分析:

sleuth将日志信息发送到rabbitmq,发送方式为rabbit,然后zipkinrabbitmq获取日志信息,默认10%抽样比例,使用简单模式,默认交换机.

  • sleuth
    • 用来产生链路跟踪日志
      请求id: 请求到达第一个微服务时生成一个请求id,该id在调用链路中会一直向后面的微服务传递
      span id: 链路中每一步微服务调用,都生成一个新的id
    默认日志格式
    服务id, 请求id, span id, 是否发送到zipkin(默认10%抽样比例)
    zuul, UHYG45RTG4, UHYG45RTG4, true
    order-service, UHYG45RTG4, JH4TG456UU, true
    item-service, UHYG45RTG4, H5T43F35YY, true
    user-service, UHYG45RTG4, IU56Y4T4FR, true
    
    • 在需要产生链路日志的服务添加 sleuth 依赖
    • 无需添加额外配置
  • zipkin
    • 服务产生的日志发送到zipkin进行处理
    • 服务端
    1. 下载zipkin jar包,运行
    • 客户端
    1. 在需要发送日志的服务添加 zipkin client 依赖
    2. 在网关服务添加 rabbitmq 依赖,用来把收集到的链路日志发送到zipkin
    3. 网关配置文件添加rabbit连接信息
    4. 修改各服务的配置文件,日志发送方式为rabbit

8. eureka客户端,选择正确网卡、注册ip地址

  • 选择正确网卡

    • bootstrap.yml 添加配置
      spring:
       cloud:
        inetutils:
         # 二选一即可
          ignored-interfaces: #忽略的网卡
         	 - VM.*
          preferred-networks: # 要使用的网卡
         	 - 192\.168\.0\..+
      
  • 注册ip地址,不注册主机名

    • 修改 application.yml
      eureka:
        instance:
          prefer-ip-address: true	# 使用ip进行注册
          instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
      

图解

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值