SpringCloud--Gateway网关

本文介绍了Spring Cloud Gateway作为微服务架构中的API网关,详细阐述了其功能、优势、入门案例,包括基础版、增强版和简写版的配置。内容涵盖了Gateway的核心架构、断言、过滤器等关键概念,通过实例展示了自定义路由断言工厂和全局过滤器的实现,以解决认证、监控和路由转发等问题。
摘要由CSDN通过智能技术生成

目录

1.网关简介

 2.Gateway简介

3.Gateway入门案例 

3.1基础版

1.创建一个shop-gateway的工程并加入依赖

2.创建启动类

3.修改配置文件

 4.启动项目, 并通过网关去访问微服务 

3.2增强版

第1步:加入nacos依赖

第二步:修改配置文件

 3.3简写版 也就是配置自动路由

第1步: 去掉关于路由的配置

第2步: 启动项目,并通过网关去访问微服务

4.Gateway核心架构 

4.1基本概念

4.2 执行流程 

5. 断言  

5.1内置路由断言工厂

5.1.1 测试 

5.2 自定义路由断言工厂

第1步:在配置文件中,添加一个Age的断言配置 

第2步:自定义一个断言工厂, 实现断言方法

第3步:启动测试

6.过滤器 

6.1局部过滤器  

 6.2全局过滤器

6.2.1 内置全局过滤器

 6.2.2自定义全局过滤器


1.网关简介

大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端(pc androud ios 平板)要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。 axios.get(ip:port/url)   axios.get(ip:port/url)

 这样的架构,会存在着诸多的问题:

  1. 客户端多次请求不同的微服务,增加客户端代码或配置编写的复杂性
  2. 认证复杂,每个服务都需要独立认证。
  3. 存在跨域请求,在一定场景下处理相对复杂。
  4. (跨域: 浏览器的ajax从一个地址访问另一个地址: 协议://ip:port  如果三则有一个不同,则会出现跨域问题。  http://192.168.10.11:8080 ----->https://192.168.10.11:8080

        http://127.0.0.1:8080--->http://localhost:8080  跨域)

上面的这些问题可以借助API网关来解决。

所谓的API网关,就是指系统的统一入口,它封装了应用程序的内部结构,为客户端提供统一服 务,一些与业务本身功能无关的公共逻辑可以在这里实现,诸如认证、鉴权、监控(黑白名单)、路由转发等等。 添加上API网关之后,系统的架构图变成了如下所示: 

在业界比较流行的网关,有下面这些:

  1. Ngnix+lua

使用nginx的反向代理和负载均衡可实现对api服务器的负载均衡及高可用

lua是一种脚本语言,可以来编写一些简单的逻辑, nginx支持lua脚本

  1. Kong

基于Nginx+Lua开发,性能高,稳定,有多个可用的插件(限流、鉴权等等)可以开箱即用。 问题:

只支持Http协议;二次开发,自由扩展困难;提供管理API,缺乏更易用的管控、配置方式。

  1. Zuul 1.0(慢 servlet 2.0 ) zuul2.0 没出来。

Netflix开源的网关,功能丰富,使用JAVA开发,易于二次开发 问题:缺乏管控,无法动态配

置;依赖组件较多;处理Http请求依赖的是Web容器,性能不如Nginx

  1. Spring Cloud Gateway

Spring公司为了替换Zuul而开发的网关服务,将在下面具体介绍。

注意:SpringCloud alibaba技术栈中并没有提供自己的网关,我们可以采用Spring Cloud Gateway来做网关

 2.Gateway简介

Spring Cloud GatewaySpring公司基于Spring 5.0Spring Boot 2.0  Project Reactor 等术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。它的目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 的方式提供了网关基本的功能,例如:安全,监控和限流。

优点:

  1. 性能强劲:是第一代网关Zuul1.6
  2. 功能强大:内置了很多实用的功能,例如转发、监控、限流等
  3. 设计优雅,容易扩展.

缺点:  

  1. 其实现依赖NettyWebFlux,不是传统的Servlet编程模型,学习成本高
  2. 不能将其部署在TomcatJettyServlet容器里,只能打成jar包执行 web.Jar
  3. 需要Spring Boot 2.0及以上的版本,才支持

gateway内置了服务器 netty服务器。所以不需要引入web依赖

3.Gateway入门案例 

3.1基础版

1.创建一个shop-gateway的工程并加入依赖

  <!--只需要使用该依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值