Spring cloud Netflix

Spring cloud Netflix,第1张

Spring cloud Netflix

目录

一、Eureka 注册中心

1、搭建 Eureka 配置中心

2、eureka运行机制

自我保护模式:

客户端连接 eureka

3、高可用

Ⅰ、项目的高可用:

Ⅱ、eureka高可用

4、Feign 远程调用,和 Ribbon 负载均衡和重试

Ⅰ、Feign的远程调用步骤

Ⅱ、Feign 集成的 Ribbon

二、Zuul  API网关

1、统一的入口

①新建网关项目模块

②添加依赖:向eureka进行注册并且添加zuul依赖

③配置yml

④启动类注解:@EnableZuulProxy

2、统一的权限校验

1、新建过滤器类:

2、继承接口ZuulFilter(重写里面的方法)

3、zuul的自动配置,会在 spring 容器中发现过滤器实例,完成自动配置

3、Zuul集成Ribbon

4、Zuul 集成 Hystrix

Hystrix的使用

Zuul 网关使用 Hystrix 进行容错处理,执行降级

Zuul 集成 Hystrix 实现限流,熔断

5、Hystrix dashboard

一、Hystrix 使用 Actuator 暴露自己的监控日志

二、暴露Actuator监控指标

三、搭建 Hystrix-dashboard 仪表盘

6、压力测试工具--Apache24

7、TurBine

使用步骤:


一、Eureka 注册中心

以订单模块远程调用用户模块和商品模块。并且向eureka进行注册为背景

1、搭建 Eureka 配置中心

1、新建 spring boot项目模块

2、修改pom.xml    添加 eureka server 依赖

3、修改yml文件

        ①、禁用自我保护模式    

        ②、主机名​​​​​

​ ​       ③、针对单台服务器,不注册也不拉取

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

4、启动类注解: @EnableEurekaServer 通过注解来触发 eureka 服务器的自动配置

5、浏览器访问注册表: http://localhost:2001/

2、eureka运行机制

注册:客户端向服务器注册时,会一次次反复注册,直到注册成功为止

拉取:客户端每30秒拉取一次注册表,更新本地的缓存的注册表

心跳:客户端每30秒发送一次心跳数据,服务器连续三次收不到一个服务的心跳, 就会删除该服务

自我保护模式:

        1、在网络中断时,15分钟内,85%服务器出现心跳异常,自动进入自我保 护模式

        2、保护模式下,所有注册信息都不删除

        3、网络恢复后,可以自动退出保护模式

        4、开发调试期间,可以禁用保护模式,避免影响测试

客户端连接 eureka

1、添加 eureka client 依赖


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client

2、yml 配置 eureka 地址:http://eureka1:2001/eureka

3、修改 hosts,完成映射。添加 eureka1 和 eureka2

  1. win+r,输入 drivers
  2. 进入 etc 目录,找到 hosts 文件

    用管理员运行启动编辑器,修改 hosts 文件

    127.0.0.1 eureka1

    127.0.0.1 eureka2

3、高可用

服务器的高可用就是服务器内部设备应用热备份方式(多台相同服务设备同时接受和记录数据),保证提供的服务不中断

Ⅰ、项目的高可用:

1、修改服务的启动配置,添加 springboot 启动参数:--server.port=8001

2、复制启动配置,修改端口 8002

Ⅱ、eureka高可用

1、添加 eureka1 和 eureka2 的 profile 配置

2、配置启动参数

# eureka1         --spring.profiles.active=eureka1  --server.port=2001

# eureka2         --spring.profiles.active=eureka2  --server.port=2002

3、修改需要向eureka注册的项目,使之可以在两台eureka服务器间切换:

​
  client:
    service-url:
      # 可以从云服务商购买不同地点的eureka服务器
      #这里可以改成云服务商提供的地点
      #自己的eureka服务器只能填写 defaultZone
      defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka

​

4、Feign 远程调用,和 Ribbon 负载均衡和重试

Ⅰ、Feign的远程调用步骤

1、添加 feign 依赖


    org.springframework.cloud
    spring-cloud-starter-openfeign

2、启动类添加注解 @EnableFeignClients

3、定义远程调用接口

  

Ⅱ、Feign 集成的 Ribbon

        功能:负载均衡和重试

①Ribbon 负载均衡

Feign 集成 Ribbon,默认启动负载均衡

②Ribbon 重试        

调用后台服务时,如果失败可以自动发起重试调用

重试原因: 出异常;调用超时;服务器宕机

Feign 集成 Ribbon,默认启动了重试

重试参数:

ribbon:
  MaxAutoRetries: 1    # 请求阻塞:单台服务器请求次数  默认0
  MaxAutoRetriesNextServer: 2   # 请求阻塞:更换服务器次数次数   默认1  修改为0表示关闭重试功能
  #ReadTimeout: 1000  #接受响应的超时,默认1000毫秒超时
  #ConnectTimeout:  1000 #与后台服务器建立连接的超时时间,默认1000毫秒
  #OkToRetryOnAllOperations: true  #是否对所有的请求方式都重试,默认只对get请求方式重试

二、Zuul  API网关
  • 统一的入口
  • 统一的权限校验
  • 集成 Ribbon
  • 集成 Hystrix

1、统一的入口 ①新建网关项目模块 ②添加依赖:向eureka进行注册并且添加zuul依赖
 

     org.springframework.cloud

     spring-cloud-starter-netflix-eureka-client

   
    org.springframework.cloud
    spring-cloud-starter-netflix-zuul

③配置yml

zuul:
  routes:
    item-service: /item-service

        //第一步:获得一个请求上下文对象
        RequestContext ctx  = RequestContext.getCurrentContext();

        //第二步:从上下文对象获得调用的后台服务的ServerId
        String serviceId = (String) ctx.get(FilterConstants.SERVICE_ID_KEY);

        //第三步:如果调用的item-service,返回true,表示不需要检查权限,false需要检查权限
        return "item-service".equals(serviceId);


    }


    //过滤规则代码
    @Override
    public Object run() throws ZuulException {

        //第一步:获得上下文对象
        RequestContext ctx  = RequestContext.getCurrentContext();

        //第二步:获得request对象
        HttpServletRequest request = ctx.getRequest();

        //第三步:以请求路径种携带token信息为过滤规则,接收token参数。
        String token =  request.getParameter("token");

        //第四步:如果token不存在阻止继续调用
        if (StringUtils.isBlank(token)){

            //阻止继续调用
            ctx.setSendZuulResponse(false);

            //直接返回响应
            String json =  JsonResult.build().code(400).msg("Not Login!").toString(); //转成json格式
            ctx.addZuulResponseHeader("Content-Type","application/json;charset=UTF-8");
            ctx.setResponseBody(json);
        }
        return null; //Zuul在当前版本不起任何作用,以后版本更新扩展使用
    }
}

3、Zuul集成Ribbon

①负载均衡默认启用

②重试默认禁用

        禁用的原因:在最前面重试,能能造成后台服务器大面积压力倍增,大面积出现故障

③启用重试

        添加 spring-retry 依赖

   
    org.springframework.retry
    spring-retry

        yml 配置启用重试: zuul.retryable=true

zuul:
 	    retryable: true

        如果需要可以配置重试参数

ribbon:
  MaxAutoRetries: 1   #单台服务器重试次数,全局生效

  #针对item—service模块进行单独配置
  item-service:
    ribbon:
      MaxAutoRetries: 0

4、Zuul 集成 Hystrix

Hystrix是容错和限流工具

        1、Hystrix容错:降级

        2、Hystrix限流:熔断

Hystrix的使用
  1. 新建降级类 ItemFB,实现 FallbackProvider 接口
  2. 添加注解 @Component,交给spring管理
  • Zuul的自动配置,可以自动发现降级类实例,完成自动配置

Zuul 网关使用 Hystrix 进行容错处理,执行降级

Zuul 默认已经启用Hystrix,任何基础配置都不用做

调用后台服务失败,执行前面模块中的降级代码,向客户端返回降级结果

  • 错误提示
  • 缓存数据
  • 据业务逻辑,返回任何结果都可以

        

Zuul 集成 Hystrix 实现限流,熔断

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

  • 断路器打开条件:
    • 10秒20次请求(必须首先满足)
    • 50%请求出错,执行了降级代码
    • 这些参数都可自定义
  • 断路器打开后,会进入半开状态 在半开状态下,会向后台服务尝试发送一次客户端调用, 调用成功,自动关闭断路器恢复正常, 调用失败,继续保持打开状态

5、Hystrix dashboard

对 Hystrix 降级和熔断的情况进行监控,可以通过监控快速定位故障模块

一、Hystrix 使用 Actuator 暴露自己的监控日志

Actuator是 springboot 提供的项目监控指标工具,可以暴露项目的多种监控指标

                

  • 健康状态
  • spring容器中所有的对象
  • spring mvc 映射的所有路径
  • 环境变量
  • 堆内存镜像
  • .....
二、暴露Actuator监控指标

1、添加actuator 依赖

  
    org.springframework.cloud
    spring-cloud-starter-netflix-zuul

2、配置yml

2、配置yml
# 暴露 actuator 监控指标
management:
  endpoints:
    web:
      exposure:
        include: "*"  
# *表示暴露所有监控指
# health,beans,mappings   表示暴露这3个监控指标
# m.e.w.e.i=hystrix.stream      

3、浏览器访问http://localhost:该项目端口/actuator(子路径)/hystrix.stream

看到如下信息,不停的在ping

三、搭建 Hystrix-dashboard 仪表盘

作用:图形化展示监控指标

使用步骤:

1、新建 spring 模块: sp07-hystrix-dashboard

 2、调整pom.xml,添加 hystrix dashboard 

  
    org.springframework.cloud
    spring-cloud-starter-netflix-hystrix-dashboard

  3、配置yml

hystrix:
  dashboard:
    proxy-stream-allow-list: localhost  #允许抓取服务器列表

4、启动类注解:@EnableHystrixDashboard

5、访问

浏览器访问:http://localhost:4001/hystrix

输入框填入 http://localhost:3001/actuator/hystrix.stream

 出现如下页面

6、压力测试工具--Apache24

 在bin目录下执行cmd,在cmd执行访问命令:

        ab -n 20000 -c 50 http://localhost:3001/item-service/35

        n表示访问次数共计20000  c表示并发50次(一个时间点上50次)

7、TurBine

作用:从多态服务器聚合 Hystrix 监控数据,Hystrix dashboard仪表盘可以从Turbine抓取聚合后的日志数据

使用步骤:

①、新建 spring 模块: sp08-turbine

②、pom.xml 添加 eureka client、turbine

  
    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client



    org.springframework.cloud
    spring-cloud-starter-netflix-turbine

③、配置yml

turbine:
  app-config: zuul   #从哪台服务器抓取日志,多个可以使用逗号隔开(aaa,bbb,ccc)
  cluster-name-expression: new String("default")  
            #服务的id。default为默认id,访问不需要加参数
            #如果自定义名字,则访问路径为:
                            https://ip:port/turbine.stream?cluster=[clusterName]

④、启动类注解: @EnalbeTurbine

⑤、访问日志数据: http://localhost:5001/turbine.stream

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5522981.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存