Spring Cloud Gateway Filter

路由过滤器允许以某种方式修改传入的 HTTP 请求或传出的 HTTP 响应。路由过滤器的范围是特定的路由。Spring Cloud Gateway 包含许多内置的 GatewayFilter 工厂。

image20220107175844624.png

内置Filter

  1. GateWay内置的Filter生命周期为两种:pre(业务逻辑之前)、post(业务逻辑之后)
阅读更多

Spring Cloud Gateway 实现负载均衡

自动负载均衡

首先我们看一下我们之前的网关服务9999的yml配置,这里的配置信息,其实有一些,咱们目前是不清楚的,比如:

  1. gateway.discovery.locator.enabled: true #开启自动路由功能
  2. routes中的uri其实最后是不需要服务名称的,这个位置其实只需要指定的localhost:9001即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server:
 port: 9999
spring:
 application:
   name: cloud-gateway-service
 cloud:
   nacos:
     discovery:
       server-addr: localhost:8848
   gateway:
     discovery:
       locator:
         enabled: true #开启自动路由功能,根据服务名称自动创建routes
     routes:  # 路由
       - id: nacos-provider #路由ID,没有固定要求,但是要保证唯一,建议配合服务名
         uri: http://localhost:9001/nacos-provider # 匹配提供服务的路由地址
         predicates: # 断言
           - Path=/msb/** # 断言,路径相匹配进行路由
阅读更多

Spring Cloud Gateway 通过注解配置

GatewayConfig

其实这种配置方式就是通过代码的方式进行配置,也就是通过@Bean注入一个RouteLocator

那我们直接来操作一下

具体操作

首先我们在新建一个GateWayConfig,其实这里的配置对应的就是我们之前在YML中配置的对应内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.mashibing.com.cloudalibabagateway9999.config;

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GateWayConfig {
   /*
   配置了一个id为path_msb1的路由规则
   当访问地址http://localhost:9999/msb/**
   就会转发到http://localhost:9001/nacos-provider/msb/任何地址
    */

   @Bean
   public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
       // 构建多个路由routes
       RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
       // 具体路由地址
       routes.route("path_msb",r -> r.path("/msb/**").uri("http://localhost:9001/nacos-provider")).build();
       // 返回所有路由规则
       return routes.build();
  }
}
阅读更多

Spring Cloud Gateway 断言 Predicate

每一个Predicate的使用,可以理解为:当满足条件后才会进行转发,如果是多个,那就是满足所有条件才会转发

断言种类

  1. After:匹配在指定日期时间之后发生的请求。
  2. Before:匹配在指定日期之前发生的请求。
  3. Between:需要指定两个日期参数,设定一个时间区间,匹配此时间区间内的请求。
  4. Cookie:需要指定两个参数,分别为name和regexp(正则表达式),也可以理解Key和Value,匹配具有给定名称且其值与正则表达式匹配的Cookie。
  5. Header:需要两个参数header和regexp(正则表达式),也可以理解为Key和Value,匹配请求携带信息。
阅读更多

Spring Cloud 网关介绍

在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的话会产生很多问题,例如:

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

为解决上面的问题所以引入了网关的概念:所谓的API网关,就是指系统的统一入口,提供内部服务的路由中转,为客户端提供统一服务,一些与业务本身功能无关的公共逻辑可以在这里实现,诸如认证、鉴权、监控、路由转发等。

13912782ae2c4387a81b42b1ea1b32db.png

阅读更多