Spring cloud

目录

一、概述

1.spring cloud 介绍

2.spring cloud 技术组成

3.Spring Cloud特点

二、注册中心

1.概念

2.搭建eureka注册中心

3.eureka客户端

4.eureka四条运行机制

5.高可用

三、远程调用

1.添加Feign,用Feign的声明式客户端接口做远程调用

2.Feign集成了Ribbon,实现负载均衡和重试

3.Ribbon重试

四、API网关

1.统一的调用入口

2.统一权限校验

3.zuul集成ribbon负载均衡和重试

4.zuul集成Hystrix容错、限流

zuul默认已经启用了Hystrix,可以直接写降级代码

hystrix限流--熔断

半开状态:

Hystrix监控

搭建Hystrix  Dashboard(仪表盘:监控可视化)

五、Turbine 聚合监控数据

六、配置中心

1.准备 git 仓库

2、搭建配置中心

3.连接配置中心获取配置


一、概述

1.spring cloud 介绍

spring cloud 是一系列框架的集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。spring cloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 spring boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

2.spring cloud 技术组成

  • 注册和发现

    • Nacos

    • Eureka

  • 远程调用 - OpenFeign

    • 负载均衡

    • 重试

  • 系统容错和限流 - Sentinel, Hystrix

    • 降级

    • 熔断

  • 错误监控 - Hystrix Dashboard、Turbine

  • 配置中心 - Nacos、Config

  • 链路跟踪 - Sleuth、Zipkin

hystrix
断路器,服务降级、熔断

zuul
API 网关,提供微服务的统一入口,并提供统一的权限验证

bus
消息总线, 配置刷新

3.Spring Cloud特点

(1)框架集      

(2)提供了一整套微服务解决方案(全家桶)

(3)基于http调用,RestAPI

二、注册中心

1.概念

微服务系统的核心服务,所有模块启动都向注册中心注册,模块之间互相调用,要从注册中心互相发现

常用的注册中心:nacos、eureka、zookeeper、etcd、consul...

2.搭建eureka注册中心

  • 新建spring模块:sp05-eureka
  • 添加eureka server依赖
  • pom.xml调整版本:springboot:2.3.2.RELEASE     springcloud:Hoxton.SR6
  • yml:  1.禁用自我保护模式     2.主机名    3.针对单台服务器,不向自己注册,不从自己拉取
  • 启动类的注解: @EnableEurekaServer      通过注解来触发自动配置
spring:
  application:
    name: eureka-server
server:
  port: 2001


eureka:
  server:
    #禁用自我保护模式
    enable-self-preservation: false
  instance:
    #主机名
    hostname: eureka1
  client:
    #针对单台服务器,不向自己注册,不从自己拉取
    register-with-eureka: false
    fetch-registry: false

3.eureka客户端

  • 修改要连接注册中心的客户端,添加eureka client依赖
  • yml文件配置eureka服务器连接地址
  • 启动类添加@EnableDiscoveryClient
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka

4.eureka四条运行机制

  1. 注册 :客户端会一次一次反复连接服务器进行注册,直到注册成功为止
  2. 拉取 :客户端每30秒拉取一次注册表,来刷新注册表
  3. 心跳 :客户端每30秒发送一次心跳,如果服务器连续三次收不到一个服务的心跳,会删除这个服务
  4. 自我保护模式 :
  • 由于网络不稳定,网络中断,15分钟内,85%服务器出现心跳异常,就会进入自我保护模式
  • 中这种特殊情况下,所有服务都不删除
  • 网络恢复正常后,可以自动退出保护模式
  • 开发调用期间,可以禁用保护模式,避免影响测试                                                                                                                                                            

5.高可用

启动命令行参数: java -jar item,jar  --server.port=8001

右键点商品的启动配置 -- edit configuration

在 program arguments 中填 --server.port=8001

右键点商品的启动配置 -- copy configuration

端口改成 8002

三、远程调用

1.添加Feign,用Feign的声明式客户端接口做远程调用

  • pom.xml添加Feign依赖
  • 启动类添加注解:@EnableFeignClients
  • 定义两个客户端接口      1.ItemClient     2.UserClient
  • 修改OrderServiceImpl 完成远程的调用

2.Feign集成了Ribbon,实现负载均衡和重试

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

3.Ribbon重试

远程调用后台服务失败时,可以自动重试调用

  • 失败: 出现异常、一台服务器宕机、阻塞延迟超时

  • 重试参数:

    • MaxAutoRetries: 单台服务器重试次数,默认值是 0

    • MaxAutoRetriesNextServer: 更换服务器的次数, 默认值是 1

    • ReadTimeout: 等待响应的超时时间,默认值是 1000

    • OkToRetryOnAllOperations: 是否对所有请求方式都重试,默认只对GET重试

    • ConnectTimeout: 与后台服务器建立网络连接的超时时间

四、API网关

Zuul       

  •   统一的调用入口
  •   统一的权限校验
  •   集成Ribbon
  •   集成Hystrix

1.统一的调用入口

  • 新建spring模块:sp06-zuul
  • 添加依赖:zuul、eureka client、sp01
  • yml
  • 启动类注解:@EnableZuulProxy
spring:
  application:
    name: zuul
server:
  port: 3001
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
zuul:
  routes:
    item-service: /item-service/**
    user-service: /user-service/**
    order-service: /order-service/**
  retryable: true   #重试
management:
  endpoints:
    web:
      exposure:
        include: "*"

2.统一权限校验

通过Zuul的过滤器,判断用户权限(有权限继续转发调用,没有权限从网关直接返回结果)

继承ZuulFilter——>添加@Component

3.zuul集成ribbon负载均衡和重试

  • zuul默认启用负载均衡
  • zuul默认不启用重试,zuul不推荐启用重试(一般不在网关执行重试,否则会造成后台大面积服务器压力倍增)

zuul启用ribbon重试:

  • 1.添加spring-retry依赖
  • 2.yml配置启用zuul重试:zuul.retryable=true
  • 3.配置重试参数

4.zuul集成Hystrix容错、限流

zuul默认已经启用了Hystrix,可以直接写降级代码

  • 1.实现FallbackProvider接口
  • 2.添加@Component
  • zuul会用自动配置类,对降级类进行自动配置

hystrix限流--熔断

当流量过大,后台服务出现故障,可以断开后台服务的链路,等待后台服务恢复

短路器的打开条件:1.10秒20次请求(必须首先满足) 2.50%失败,执行的降级代码

半开状态:

  • 断路器打开一段时间后,会进入半开状态
  • 会尝试发送一次客户端调用(成功,关闭断路器,恢复正常;失败,继续保持打开状态)

Hystrix监控

对Hystrix降级和熔断的情况进行监控,可以快速定位错误,查找系统中的问题

中06项目中,Hystrix利用actuator来暴露自己的监控日志数据

  • 1.添加actuator依赖
  • 2.yml配置暴露监控日志
m.e.w.e.i="*"		暴露所有监控日志

m.e.w.e.i=health,bean,mappings

m.e.w.e.i=hystrix.stream

搭建Hystrix  Dashboard(仪表盘:监控可视化)

  • 1.新建spring模块:sp07-hystrix-dashboard
  • 2.添加依赖:Hystrix  Dashboard
  • 3.yml
  • 4.启动类注解:@EnableHystrixDashboard 

五、Turbine 聚合监控数据

  • 1.新建spring模块:sp08-turbine
  • 2.添加eureka  client,turbine依赖
  • 3.yml配置
  • 4.启动类注解:@EnableTurbine

六、配置中心

1.准备 git 仓库

  1. 新建 springcloud1/config 文件夹

  2. 复制 2,3,4 的 application.yml 到config目录

    • item-service-dev.yml

    • user-service-dev.yml

    • order-service-dev.yml

  3. 创建本地仓库(已经有仓库不用重复创建),并提交

    • 双击 shift 搜索 "create git repository"

    • 选择 springcloud1 工程目录

    • ctrl+k或搜索"commit",填写提交信息、选择全部文件,提交

  4. 在 gitee 创建远程仓库(已经有仓库不用重复创建)

  5. 推送远程仓库

    • ctrl+shift+k或搜索 "push"

    • 点 "define remote",粘贴远程库地址,完成推送

调整三个配置文件

配置中心的配置优先级最高,会覆盖模块的本地配置和本地启动参数,

防止配置中心配置,覆盖本地启动参数,添加 override-none: true

然后提交推送到远程仓库

2、搭建配置中心

  • 1.新建spring模块:sp09-config-server
  • 2.添加依赖:eureka client、config server
  • 3.yml
  • 4.启动类注解:@EnableConfigServer
git.uri = git仓库地址,例如https://gitee.com/nais_cgb/springcloud01
search-paths = config

3.连接配置中心获取配置

  • 修改需要连接的module,添加config  client依赖
  • 所有module的application.yml全部注释,或者删除
  • 添加bootstrap.yml
#1.连接eureka
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
#2.设置配置中心的服务id
#3.设置下载的配置文件
spring:
  cloud:
    config:
      discovery:
        enabled: true
        service-id: config-server
      name: user-service
      profile: dev
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值