springcloud gateway

 

1 为什么需要网关

传统的单体架构中只有一个服务开放给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,那么作为客户端如何去调用这些微服务呢?如果没有网关的存在,只能在本地记录每个微服务的调用地址。

 

无网关的微服务架构往往存在以下问题:

客户端多次请求不同的微服务,增加客户端代码或配置编写的复杂性。
认证复杂,每个服务都需要独立认证。
存在跨域请求,在一定场景下处理相对复杂。

 

 

 

2  网关的基本功能?

网关是所有微服务的门户,路由转发仅仅是最基本的功能,除此之外还有其他的一些功能,比如:认证鉴权熔断限流日志监控等等.........

 

 

3 为什么选择Spring cloud Gateway?

在1.x版本中都是采用的Zuul网关;但在2.x版本中,zuul的升级一直跳票,Spring Cloud最后自己研发了一个网关替代Zuul,那就是Spring Cloud Gateway。

肯定选择亲儿子Spring Cloud Gateway,它的很多思想都是借鉴zuul,所谓青出于蓝而胜于蓝,功能和性能肯定是优于zuul,不然Spring Cloud 为嘛要发布它?

Spring Cloud Gateway 基于Spring Boot 2.x、Spring WebFlux和[Project Reactor构建

 

 

 

4 Spring Cloud Gateway几个必知的术语?

路由(route):gateway的基本构建模块。它由ID、目标URI、断言集合和过滤器集合组成。如果聚合断言结果为真,则匹配到该路由。
断言(Predicate ):参照Java8的新特性Predicate,允许开发人员匹配HTTP请求中的任何内容,比如头或参数。
过滤器(filter):可以在返回请求之前或之后修改请求和响应的内容。

 

 

5 什么是断言

Predicate来自于java8的接口。Predicate接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)。

可以用于接口请求参数校验、判断新老数据是否有变化需要进行更新操作。

Spring Cloud Gateway内置了许多Predict,这些Predict的源码在org.springframework.cloud.gateway.handler.predicate包中。

 

 

spring:
  cloud:
    gateway:
      ## 路由
      routes:
        ## id只要唯一即可,名称任意
        - id: gateway-provider_1
          uri: http://localhost:9024
          ## 配置断言
          predicates:
            ## Path Route Predicate Factory断言,满足/gateway/provider/**这个请求路径的都会被路由到http://localhost:9024这个uri中
            - Path=/gateway/provider/**
            ## Weight Route Predicate Factory,同一分组按照权重进行分配流量,这里分配了80%
            ## 第一个group1是分组名,第二个参数是权重
            - Weight=group1, 8
            
        ## id必须唯一
        - id: gateway-provider_2
          ## 路由转发的uri
          uri: http://localhost:9025
          ## 配置断言
          predicates:
            ## Path Route Predicate Factory断言,满足/gateway/provider/**这个请求路径的都会被路由到http://localhost:9024这个uri中
            - Path=/gateway/provider/**
            ## Weight Route Predicate Factory,同一分组按照权重进行分配流量,这里分配了20%
            ## 第一个group1是分组名,第二个参数是权重
            - Weight=group1, 2

routes下就是配置的路由策略,各个组件如下:

id:路由的唯一id,名称任意
uri:路由转发的uri
predicates:断言配置,可以配置多个

 

Spring Cloud Gateway中的断言命名都是有规范的,格式:xxxRoutePredicateFactory。

比如权重的断言:WeightRoutePredicateFactory,那么配置时直接取前面的Weight。

默认的路由转发如果路由到了两个,则是的按照配置先后顺序转发,上面都配置了路径:Path=/gateway/provider/**,如果没有配置权重,则肯定是转发到http://localhost:9024。

但是既然配置配置了权重并且相同的分组,则按照权重比例进行分配流量。

 

 

6 什么是过滤器

 

7 如何实现动态路由

 

8 如何自定义全局异常

 

posted @ 2023-04-23 11:22  喻聪  阅读(321)  评论(0编辑  收藏  举报