gateway

系列文章目录


1.hystrix的局部降级逻辑的处理方式

	服务降级:
		触发降级的原因:调用服务超时 服务本身内部错误 服务的线程资源被耗尽
	什么是服务降级:
		当访问某个服务出现了异常之后,用户不需要等待,而是立马给用户返回一个友好提示方法
	局部降级逻辑:
		fallback 可以在服务的提供方进行处理,也可以在服务的消费方进行处理
	在服务提供方进行处理:	
		在服务提供方的service里面 给指定的方法编写降级的方法,降级方法编写的原则是形参跟返回值类型保持一致
		在启动类上开启服务熔断的功能  @EnableCircuitBreaker  也可以使用 @SpringCloudApplication
	将降级的逻辑应用在某个服务上:
		 @HystrixCommand(fallbackMethod="降级逻辑的方法名",commandProperties={
                        @HystrixProperties(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1500")
                    })
                 public String timeout(){}

2.全局降级处理方式

注意:降级逻辑的优先级  局部的降级逻辑>全局的降级逻辑
	   1.在消费方的启动类上面要加上一个@EnableCircuitBreaker
           2.在消费方的controller里面,定义一个全局降级的方法。
           3.在controller上面 添加一个注解@DefaultProperties(defaultFallback = "handleAll")
           4.在指定的被降级的方法上添加一个@HystrixCommand
            降级服务的抽取:
                 1.在消费方的启动类上面要加上一个@EnableCircuitBreaker
                 2.在配置文件里面,开启feign对Hystrix的支持
                 feign:
                   hystrix:
                     enabled: true
                 3.定义一个类,实现Feign客户端。重写里面的方法(编写降级处理方法)
                 4.将这个类绑定到Feign客户端上去
                    @FeignClient(name = "cloud-payment-service",fallback = HandleAllService.class)

什么是熔断? 熔断有哪几种状态 断路器的工作原理

	当用户访问某个服务,达到了最大的访问量之后,直接拒绝用户访问。
	关闭状态 开启状态 半开状态
        服务熔断原理(断路器的原理):
     		 统计用户在指定的时间范围(默认10s)之内的请求总数达到指定的数量之后,如果不健康的请求(超时、异常)占总请求数		量的百分比(50%)到了指定的阈值之后,就会触发熔断。触发熔断,断路器就会打开(open),此时所有请求都不能通过。在		5秒之后,断路器会恢复到半开状态(half open),会允许少量请求通过,如果这些请求都是健康的,那么断路器会回到关闭状		态(close).如果 这些请求还是失败的请求,断路器还是恢复到打开的状态(open).

如何开启熔断?

	有两种方式 一种是xml配置   另一种是 注解
	在指定请求方法上,开启熔断
        @HystrixCommand(fallbackMethod = "handleCircuitBreaker",commandProperties = {
             @HystrixProperty(name="circuitBreaker.enabled", value="true"),  // 是否开启断路器
             @HystrixProperty(name="circuitBreaker.requestVolumeThreshold", value="10"),  //请求次数
             @HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds", value="10000"), // 时						间窗口期
             @HystrixProperty(name="circuitBreaker.errorThresholdPercentage", value="60"),  // 失败率				达到多少后跳闸//整体意思:10秒内 10次请求,有6次失败,就跳闸
        })
        public String enableCircuitBreaker(Integer id){
            if(id < 0){
                throw  new RuntimeException();
            }
            String uuid = UUID.randomUUID().toString();
            return "返回的uuid是:" + uuid;
        }	
	xml配置
		使用XML的方式进行熔断的配置
           hystrix:
           command:
               default:
                circuitBreaker:
                 enabled: true
                  requestVolumeThreshold: 10
                    sleepWindowInMilliseconds: 10000
                      errorThresholdPercentage: 60

什么是网关?

在这里插入图片描述

gateway 的核心概念

	Route(路由)
		路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由
	Predicate(断言)
		开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由
	Filter(过滤)
		指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改

如何简单使用gateway

pom.XML引入依赖

	 <dependencies>
        <!--GateWay网关-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>2.2.1.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--熔断器-->
        <dependency>
            <groupId>com.netflix.hystrix</groupId>
            <artifactId>hystrix-javanica</artifactId>
            <version>RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>cloud-commons-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
	    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.netflix.hystrix</groupId>
            <artifactId>hystrix-metrics-event-stream</artifactId>
        </dependency>
    </dependencies>

修改properties或者yml配置文件

server:
  port: 9527
spring:
  application:
    name: cloud-gateway
  ## GateWay配置
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名进行路由
      routes:
        - id: payment_routh  # 路由ID , 没有固定的规则但要求唯一,建议配合服务名
          uri: lb://cloud-payment-service  # 匹配后提供服务的路由地址
          predicates:
            - Path=/payment/**  # 断言,路径相匹配的进行路由

        - id: payment_routh2  # 路由ID , 没有固定的规则但要求唯一,建议配合服务名
          uri: lb://cloud-payment-service  # 匹配后提供服务的路由地址
          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

主启动类:

@SpringBootApplication
@EnableDiscoveryClient
public class GatewayMain9527 {
    public static void main(String[] args) {
        SpringApplication.run(GatewayMain9527.class,args);
    }
}

总结:

以上就是今天要讲的内容,本文仅仅简单介绍了 降级处理 gateway 的小案例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值