在这里插入图片描述

Gateway

一、简介

网关作为流量的入口,常用功能包括路由转发、权限校验、先流控制等。而 springcloud gateway 作为SpringCloud官方推出的第二代网关框架,取代了Zuul网关。

网关提供API全托管服务,丰富的API管理功能,辅助企业管理大规模的API,以降低管理成本和安全风险,包括协议适配、协议转发、安全策略、防刷、流量、监控日志等功能。

Spring Cloud Gateway旨在提供一种简单而有效的方式来对API进行路由,并为他们提供切面,列入:安全性,监控/指标和弹性等。

gateway官网:https://spring.io/projects/spring-cloud-gateway
在这里插入图片描述
gateway2.1.3稳定版官方文档https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.1.3.RELEASE/single/spring-cloud-gateway.html#_glossary

很多实例
在这里插入图片描述

二、三个概念

1、路由

发一个请求给网关,网关把请求路由到指定的服务或地址。

2、断言

断言为真才允许通过路由,条件判断,是Java8里面的断言函数,

3、过滤器

过滤器就是spring框架里面提供的网关过滤器,所有请求的获取与发送都有过滤操作。请求发送的各个阶段都可以存在过滤处理。

请求到达网关,网关先利用断言来判定请求是否符合某个路由规则,如果符合了,就按这个路由规则把请求路由到指定地方,要去这些指定地方,就要经过一系列的filter进行过滤

三、配置GateWay

1、创建一个新服务用作网关服务

所有的外部请求必须经过网关服务转发至其它服务。

创建一个springboot的子服务,搜索gateway,只选择gateway
在这里插入图片描述

2、依赖公共工程common工程

common工程中有服务的注册发现依赖nacos-discovery配置中心依赖nacos-config
在这里插入图片描述

3、网关启动类添加服务注册发现注解

网关也需要把自己注册到注册中心去,也需要发现其它服务的位置,这样请求发过来,网关就可以找到其他服务的位置,以便路由过去。

springboot项目自动加载数据库资源,如果没有配置数据库就会报错,所以需要配置不加载数据源相关的配置。
在这里插入图片描述

4、子项目配置nacos

在这里插入图片描述

5、引入配置中心

在这里插入图片描述

四、使用gateway

1、查看官方实例

4是断言配置,5是过滤器配置
在这里插入图片描述

2、路由基本格式

spring:
  cloud:
    gateway:
      routes:
      #断言精确度较低的路由放在下面,精确度较高的放在上面
      #商品服务路由
      - id: product_route
        uri: lb://gulimall-product #路由地址
        predicates:
          - 断言参数1=断言规则
          - 断言参数2=断言规则
        filters: #filters可通过RewritePath参数进行路径重写
          - 过滤参数1=过滤规则
          - 过滤参数2=过滤规则
      #第三方服务路由
      - id: third_party_route
        uri: lb://gulimall-third-party
        predicates:
          - 参数1=断言规则
        filters:
          - 参数1=过滤规则
          - 参数2=过滤规则

3、路由实战

server:
  port: 88
spring:
  application:
    name: gulimall-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    gateway:
      routes:
#       product_route
        - id: product_route
          uri: lb://gulimall-product
          predicates:
            - Path=/api/product/**
#         路径重写
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}
#       third_party_route
        - id: third_party_route
          uri: lb://gulimall-third-party
          predicates:
            - Path=/api/thirdparty/**
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}
#       admin_route(精确度较低,放下面)
        - id: admin_route
          uri: lb://renren-fast
          predicates:
            - Path=/api/**
          filters:
            - RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}

## 所有来网关的请求都需要带上/api

断言参数 作用
– After 接受一个参数datetime。此断言匹配发生在当前日期时间之后的请求。
– Before 接受一个参数datetime。此断言匹配发生在当前日期时间之前的请求。
– Between 接受两个参数用逗号隔开。第一个参数为datetime1,第二个参数为datetime2。此断言匹配datetime1之后和datetime2之前发生的请求。datetime2参数必须在datetime1之后。
– Cookie 接受两个参数:Cookie名称和正则表达式。此断言匹配具有给定名称且值与正则表达式匹配的cookie。
– Header 接受两个参数:Header名称和正则表达式。此断言与具有给定的请求头匹配,值与正则表达式匹配。
– Host 接受一个参数:Host的列表。逗号作为分隔符。这个断言与请求的主机名匹配www.baidu.com。
– Method 接受一个参数:要匹配的HTTP请求方法。参数:GET、POST
– Path 接收一个参数:请求地址的列表,如- Path=/api/product/**、- - Path=/foo/{segment},/bar/{segment}
– Query 接受两个参数:一个必需的param和一个可选的regexp。如果请求中包含param参数,则请求通过,
– RemoteAddr 接收一个参数:请求的远程地址,如- RemoteAddr=192.168.1.1/24,如果请求的远程地址是192.168.1.10,则此路由将匹配。
过滤器参数 作用
– AddRequestHeader 接收两个参数:请求头名,请求头值。添加一个请求头对象。
– AddRequestParameter 接收两个参数:参数名,参数值。添加一个参数对象。
还有二十几个,官方文档有。

版权声明:本文为weixin_42295814原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42295814/article/details/107503623