全局降级和熔断器以及Getway网关

本文介绍了如何在Spring Cloud中实现全局降级和Hystrix熔断器的功能。首先通过引入Hystrix依赖并启用全局降级注解简化了代码。接着展示了当服务出现异常或超时时,Hystrix如何自动进行熔断,并在达到预设条件后阻止请求以保护服务器,同时能自动恢复。最后,搭建了Gateway网关,隐藏了真实服务端口,增强了系统的安全性。

上一编我们做了局部降级,但是局部降级有一个缺点,就是如果需要做降级的方法一两个还好说,但是一旦多了,就会造成大量的重复代码,看着非常杂乱,今天我们来做一个全局降级来解决

这里我们接着上一篇写的,所以有好多就不在做了
来,我们在消费者里边加入hystrix依赖

<dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
         </dependency>

现在我们需要给启动类上加上开启全局降级的注解
在这里插入图片描述
修改我们的controller
在这里插入图片描述
给我们提供者里边做个异常
在这里插入图片描述
启动测试一下,有异常情况下是这样的
在这里插入图片描述
做了降级是这样的
在这里插入图片描述

全局降级测试成功,接下来我们来做Hystix熔断器,首先呢我们先需要了解一下什么是熔断器,干什么用的

我们在访问服务器的时候,有的时候访问的是健康的,有的时候访问的是有异常或者是超时的,但是服务器里边的某个方法不可能一直是有异常或者是一直连接超时,这时我们就需要让它进行判断,在指定的时间里,有几次请求,这几次请求有几次失败的,根据我们设定的访问成功率判断它到底是否正常

来,我们还在这个8001上的项目测试,这里我们设置了10秒之内发送10次请求,有6次错误就会熔断,熔断之后不管什么请求就都会拦截,以免对服务器造成阻塞

在这里插入图片描述
我们测试一下,这是正常情况下
在这里插入图片描述
这是请求错误的情况下,来我们快速点10次,然后在请求正确的会怎么样
在这里插入图片描述
我们可以看出,一旦熔断的情况下,正常访问也会阻止在外面,但是它会自动恢复,并不是一直阻止在外面不能访问,它默认是5秒自动熔合,到底是不是呢?我们等五秒在试一下
在这里插入图片描述
可以看出这会恢复正常了
在这里插入图片描述
这就是Hystix熔断器,能断开,能熔合

接下来我们来写Getway网关

导入相关的依赖

<dependencies>
        <!--gateway-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!--eureka-client gateWay作为网关,也要注册进服务中心-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!-- gateway和web不能同时存在,即web相关jar包不能导入 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
            <groupId>org.example</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

配置文件

server:
  port: 9527
spring:
  application:
    name: cloud-gateway
  ## GateWay配置
  cloud:
    gateway:
      routes:
        - id: payment_routh  # 路由ID , 没有固定的规则但要求唯一,建议配合服务名
          uri: http://localhost:8001  # 匹配后提供服务的路由地址
          predicates:
            - Path=/payment/**  # 断言,路径相匹配的进行路由

        - id: payment_routh2  # 路由ID , 没有固定的规则但要求唯一,建议配合服务名
          uri: http://localhost:8001  # 匹配后提供服务的路由地址
          predicates:
            - Path=/payment/lb/**  # 断言,路径相匹配的进行路由

# 注册进 eureka Server
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
    register-with-eureka: true
    fetch-registry: true

网关前是这样的
在这里插入图片描述
网关后是这样的,把我们真实的端口号给隐藏起来,以保证安全
在这里插入图片描述
好了,今天太晚了,先到此结束,明天见
在这里插入图片描述

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aspoil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值