Spring Cloud Gateway简介与使用

一、网关简介

在微服务架构中,通常一个系统会被拆分为多个微服务,API网关为微服务架构的系统提供简单、有效且统一的API路由管理,作为系统的统一入口。

API网关也是一个微服务,它是运行于外部请求与内部服务之间的一个API统一入口。它可以提供内部服务的路由中转,给客户端提供统一的服务,可以实现一些和业务没有耦合的公用逻辑,主要功能包含认证、鉴权、路由转发、安全策略、防刷、流量控制、监控日志等。

1、Gateway简介

Spring Cloud Gateway 是 Spring Cloud官方推出的第二代网关框架,定位于取代 Netflix Zuul。它构建于Spring Boot 2.x、Spring WebFlux和 Project Reactor等技术之上。

在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 2.0之前的非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway是基于 WebFlux框架实现的,而 WebFlux框架底层则使用了高性能的 Reactor模式通信框架 Netty。

Spring Cloud Gateway 旨在为微服务架构提供一种简单且有效的 API 路由的管理方式,并基于 Filter 的方式提供网关的基本功能,例如:安全认证、监控/指标、限流等等。

注意:Spring Cloud Gateway 是由 WebFlux + Netty + Reactor 实现的响应式的 API 网关。它不能在传统的 Servlet 容器中工作,也不能构建成 war 包。

官网文档:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/

2、核心概念

  • 1)Route(路由):
    路由是网关配置的基本组成模块。一个Route模块由一个ID,一个目标URI,一组断言工厂和一组Filter过滤器定义。如果断言为真,则路由匹配,目标URI会被访问。

  • 2)Predicate(断言):
    这是Java 8中的一个断言函数,断言函数的输入类型是 Spring5框架中的 ServerWebExchange。断言函数允许开发者定义匹配来自 Http request中的任何内容,例如 headers 或参数。如果断言为真,则说明请求的URL和配置的路由匹配。

  • 3)Filter(过滤器):
    SpringCloud Gateway中的 Filter分为 Gateway FilIer和 Global Filter。Filter可以对它拦截的请求和响应进行二次处理(在发送下游请求之前或之后修改请求和响应)。

3、工作原理

在这里插入图片描述

Spring Cloud Gateway 的工作原理跟 Zuul 的差不多,最大的区别就是 Gateway 的 Filter 只有 pre 和 post 两种。

客户端向 Spring Cloud Gateway 发出请求,如果请求与网关程序定义的路由匹配,则会将该请求发送到网关 Web 处理程序,此时处理程序运行特定的请求过滤器链。

过滤器之间用虚线分开的原因是:过滤器可能会在发送代理请求的之前和之后执行逻辑。

  • 先执行所有 pre 过滤器逻辑;
  • 然后执行代理请求;
  • 代理请求完成后,执行 post 过滤器逻辑。

二、快速入门

将微服务快速接入 Spring Cloud Gateway。使用 Nacos做服务注册与发现。

注意:在没有端口的路由中定义的URI分别获得HTTP和HTTPS URI的默认端口值 80和 443。

1、引入依赖

创建一个maven项目,引入依赖:

    <!-- gateway网关 -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>

    <!-- nacos服务注册与发现 -->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

2、配置文件

server:
  port: 18088
spring:
  application:
    name: app-gateway

  #配置 nacos注册中心
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.xxx.xxx:8848

    #配置 gateway网关
    gateway:
      #设置路由:路由id、路由到微服务的uri、断言
      routes:
        # app-order服务路由配置
        - id: app-order  #路由ID,全局唯一,建议配置服务名。
          uri: lb://app-order  #lb 整合负载均衡器ribbon,loadbalancer
          predicates:
            - Path=/order/**   # 断言,路径相匹配的进行路由
        # app-user服务路由配置
        - id: app-user
          uri: lb://app-user
          predicates:
            - Path=/app-api/app-user/user/**
          filters:
            # 删除前缀:1代表去除第一个路径
            - StripPrefix=1

启动类:

@SpringBootApplication
public class AppGatewayApplication {

	public static void main(String[] args) {
		SpringApplication.run(AppGatewayApplication.class, args);
	}
}

3、测试

启动微服务:

在这里插入图片描述
微服务访问地址:

  • http://localhost:18081/app-user/user/findOrderByUserId/1
  • http://localhost:18082/order/findOrderByUserId/1
    网关访问地址:
  • http://localhost:18088/app-api/app-user/user/findOrderByUserId/1
  • http://localhost:18088/order/findOrderByUserId/1

在这里插入图片描述
访问OK,说明我们的 Gateway网关接管了 服务的API。

– 求知若饥,虚心若愚。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值