Spring Cloud Gateway系列:简介和入门

Spring Cloud入门系列(十六)- 服务网关之Gateway 断言 predicates 官网参考文档: https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories gateway的三大术语 Route: The basic building block of the gateway. It is defined by an ID, a destination URI, a collection of 阅读详情

一、简介

官网:https://cloud.spring.io/spring-cloud-gateway/reference/html/

SpringCloud Gateway是SpringCloud的一个全新项目,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。SpringCloud Gateway作为SpringCloud生态系统中的网关,目标是替代Zuul,由于Zuul 1.x使用的仍然是非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通讯框架Netty。
SpringCloud Gateway的目标提供统一的路由方式,且基于filter链的方式提供了网关基本的功能,例如:安全,监控和限流 。

二、重要概念

1、route 路由

路由是网关的最基本组成,由一个路由 id、一个目标地址 url,一组断言工厂及一组 filter组成。若断言为 true,则请求将经由 filter 被路由到目标 url。

2、predicate 断言

断言即一个条件判断,根据当前的 http 请求进行指定规则的匹配,比如说 http 请求头,请求时间等。只有当匹配上规则时,断言才为 true,此时请求才会被直接路由到目标地址(目标服务器),或先路由到某过滤器链,经过过滤器链的层层处理后,再路由到相应的目标地址(目标服务器)。

3、filter 过滤器

对请求进行处理的逻辑部分。当请求的断言为 true 时,会被路由到设置好的过滤器,以对请求或响应进行处理。例如,可以为请求添加一个请求参数,或对请求 URI 进行修改,或为响应添加 header 等。总之,就是对请求或响应进行处理。

三、工作原理

image

四、使用

环境:

jdk:17

idea:2023.2

spring-boot:3.0.2

1、创建父工程

引入坐标

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mcode</groupId>
    <artifactId>gateway-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>gateway-demo</name>
    <url>http://maven.apache.org</url>
    <description>the gateway</description>

    <modules>
        <module>gateway-config</module>
    </modules>

    <properties>
        <java.version>17</java.version>
        <spring-boot.version>3.0.2</spring-boot.version>
        <spring-cloud.version>2022.0.0</spring-cloud.version>
        <spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring-boot.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2、创建gateway-config模块(配置式)

导入坐标

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.mcode</groupId>
        <version>1.0-SNAPSHOT</version>
        <artifactId>gateway-demo</artifactId>
    </parent>
  
    <artifactId>gateway-config</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>gateway-config</name>
    <description>gateway-config</description>
  
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
  
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
    </dependencies>
</project>

注意:引入gateway后不能引入spring-web

Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway.

Action:

Please set spring.main.web-application-type=reactive or remove spring-boot-starter-web dependency.

编写路由

Application.yml

server:
  port: 8080
spring:
  cloud:
    gateway:
      routes:
        - id: baidu_route
          uri: https://www.baidu.com
          predicates:
            - Path=/**

image

3、创建gateway-api模块(API式)

导入坐标

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.mcode</groupId>
        <artifactId>gateway-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>gateway-api</artifactId>
    <packaging>jar</packaging>

    <name>gateway-api</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
    </dependencies>
</project>

修改配置文件

image

添加Gateway配置类

package com.mcode.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;

/**
 * ClassName: GatewayConfig
 * Package: com.mcode.config
 * Description:
 *
 * @Author: robin
 * @Create: 2023/10/25 - 10:26 PM
 * @Version: v1.0
 */
@Configuration
public class GatewayConfig {
    @Bean
    public RouteLocator routeLocator(RouteLocatorBuilder builder) {
        return builder.routes().route("baidu_route", predicateSpec ->
                        predicateSpec.path("/**").uri("https://www.baidu.com"))
                .build();
    }
}

image

Spring Cloud入门系列(十四)- 服务网关之Gateway 代码演示 新建模块: cloud-gateway9527 阅读详情

相关推荐

Spring Cloud Gateway 11种断言工厂

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。Spring Cloud Gateway路由匹配是Spring WebFlux基础功能的一部分,在Spring Cloud Gateway中内置了很多路由断言工厂类。不同的断言工厂类针对HTTP请求的不同属性。多个断言工厂类可以使用逻辑“and”进行组合使用。官方文档:POM引入:

pleaseprintf的博客 1964

Spring Cloud学习笔记—网关Spring Cloud Gateway官网教程实操练习

Spring Cloud学习笔记—Spring Cloud Gateway官网教程实操练习1、Spring Cloud Gateway介绍2、在Spring Tool Suite4或者IDEA中创建Gateway工程3、通过代码创建一个Router(路由)4、运行测试5、通过改进程序加深网关理解6、总结 1、Spring Cloud Gateway介绍 Spring Cloud Gateway官网地址:https://spring.io/guides/gs/gateway/ 在SpringCloud微服

分享技术,传播知识! 1878

Spring-Cloud-Gateway源码分析系列 | Spring-Cloud-Gateway之请求处理流程

推荐 Spring Boot/Cloud 视频: Java 微服务实践 - Spring Boot Java 微服务实践 - Spring Cloud Spring-Cloud-Gateway 初始化,路由模型,以及路由加载等源码在上几篇学习文档中已经描述,接下来来看Spring-Cloud-Gateway是怎么通过这些来对我们的请求进行路由处理的 Spring-Cloud-Gateway整体...

qq_43253123的博客 5748

Spring Cloud 之 Gateway 网关

Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是`替代Netflix ZUUL`,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:身份验证,权限效验,服务路由,负载均衡,

总结分享 3019

Spring Cloud Gateway深入探究

文章目录Spring Cloud Gateway介绍Spring Cloud Gateway 配置MavenYmlJava ConfigSpring Cloud Gateway使用RoutePredicateFilterSpring Cloud Gateway 工作原理Spring Cloud Gateway 总结相关文档 Spring Cloud Gateway介绍 废话不多说,看官方文档的介绍...

Nico专栏 6912

Spring Cloud2024.x实战 | Gateway系列 | 第1篇:springcloud整合网关gateway

Spring Cloud Gateway 是 Spring Cloud 生态系统中的一部分,它是一个基于 Spring Framework 构建的 API 网关解决方案,用于构建微服务架构中的路由、过滤和转发请求,是由 WebFlux + Netty + Reactor 实现的响应式的 API 网关。Spring Cloud Gateway 旨在为微服务架构提供一种简单且有效的 API 路由的管理方式,并基于 Filter 的方式提供网关的基本功能,例如说安全认证、监控、限流等等。

zhuzhongji的博客 1188

SpringCloud - GateWay服务网关

在微服务架构中,一个系统往往由多个微服务组成,而这些服务可能部署在不同机房、不同地区、不同域名下。这种情况下,客户端(例如浏览器、手机、软件工具等)想要直接请求这些服务,就需要知道它们具体的地址信息,例如 IP 地址、端口号等。当服务数量众多时,客户端需要维护大量的服务地址,这对于客户端来说,是非常繁琐复杂的。在某些场景下可能会存在跨域请求的问题。身份认证的难度大,每个微服务需要独立认证。web 请求,通过一些匹配条件,定位到真正的服务节点,并在这个转发过程的前后,进行一些精细化控制。

m0_66689823的博客 3675

SpringCloud Alibaba系列 Gateway(四)

springcloud gateway 微服务网关

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 686

SpringCloud - Gateway 网关

Spring Cloud Gateway 是基于 Spring 生态系统(包括 Spring 6、Spring Boot 3 和 Project Reactor)构建的 API 网关。它旨在为 API 提供简单而有效的路由,并处理诸如安全性、监控/指标和弹性等跨领域关注点。

2201_75490194的博客 1532

Spring Cloud系列教程:构建下一代网关服务Gateway-入门实战篇

Spring Cloud系列教程:构建下一代网关服务Gateway-入门实战篇引言在微服务架构中,网关服务起着至关重要的作用。它是整个系统的入口,负责路由请求、鉴权、日志记录等功能。Spring Cloud Gateway作为Spring Cloud提供的下一代网关服务,具备了更高的性能和灵活性。本文将带你深入了解并实践Spring Cloud Gateway的入门知识。第一部分:概述Spring Cloud Gateway是一个基于Spring Framework 5、Project Reactor和Sp

CodeShiftZ的博客 299

PPPoE上网配置不求人:华为路由器命令行操作指南(2023最新版)

本文提供2023年最新的华为路由器PPPoE上网配置命令行操作指南。通过详细的步骤讲解,从连接设备、创建拨号接口、绑定PPPoE客户端到配置内网与NAT,手把手教你完成配置,并附有验证排错方法,助你轻松实现稳定上网。

s4t5u6v的博客 679

Spring Cloud Gateway系列【2】网关工作原理及入门案例

工作原理 核心概念 路由(Route):路由是网关最基础的部分,路由信息由ID、目标URl、一组断言和一组过滤器组成。如果断言路由为真,则说明请求的URI和配置匹配。 断言(Predicate) : Java8中的断言函数。Spring Cloud Gateway 中的断言函数输入类型是Spring 5.0框架中的ServerWebExchange。Spring Cloud Gateway 中的断言函数允许开发者去定义匹配来自于Http Request中的任何信息,比加如请求头和参数等。 过滤器(Filte

记录知识、锤炼自我 3588

大模型事件抽取学习——论文学习笔记《LLMs Learn Task Heuristics from Demonstrations:......》

本篇博客介绍一篇发表在2024 ACL main上的文章:《LLMs Learn Task Heuristics from Demonstrations: A Heuristic-Driven Prompting Strategy for Document-Level Event Argument Extraction》 方向:大模型事件抽取 本篇博客为个人阅读论文的总结与笔记,在这里进行简单的分享 论文链接:https://arxiv.org/abs/

weixin_53751318的博客 1850

Spring Cloud 入门系列十一 -- API 网关 Spring Cloud Gateway

1 什么是 Spring Cloud Gateway? Spring Cloud Gateway 是 Spring Cloud 生态系统中的网关,用于替代 zuul。 zuul 基于 Servlet,使用阻塞 API 且不支持长连接(WebSockets),而 Spring Cloud Gateway 使用非阻塞 API,支持 WebSockets。 Spring Cloud Gateway 是 ...

Geffin的博客 560

第4章 本地一键部署(新手首选)

本文介绍了OpenClaw的本地部署方法,特别适合新手用户。部署过程仅需执行一条命令,通过自动脚本完成安装和配置向导。安装完成后,用户可通过终端TUI或Web控制面板验证部署是否成功。文章还提供了常见问题的排查方法,包括端口占用、权限不足、APIKey无效和安装卡顿等情况。整个部署流程简单直观,无需手动修改配置文件,适合快速搭建使用。

eastyuxiao的专栏 192

经典EMC案例-汽车车载电子行车记录仪显示屏EMC BCI整改案例

拿到这款汽车前装车载电子行车记录仪,小编首先在实验室还原客户描述的现象,确定现象符合客户的描述,再根据现象出现的对应频率做好记录,因为通常BCI FAIL的现象不局现于一个频率点,然后通过这些现象及频点,再结合产品的构造、线束,分析构思出大致解决方案。

jack_luo4913的博客 3737

微服务系列:服务网关 Spring Cloud Gateway 入门

`Spring Cloud Gateway` 是基于 `Spring 5.0、Spring Boot 2.0 和 Project Reactor` 等技术开发的网关。所以就有了前置知识 `WebFlux` 的学习,而学习 WebFlux 又需要 `Stream` 流和 `Lambda` 表达式等技术作为前置知识。 从这篇文章开始,将正式开始 微服务系列 的相关技术学习。 话不多说,开始今天的学习。 介绍 Spring Cloud Gateway Spring Cloud Gateway是基于Spring生.

zhang33565417的博客 1097

软考中级-软件设计师 Python基础

软考中级-软件设计师 Python知识点整理

片言可决讼,半纸能缚龙 3641

Spring Cloud入门系列(十三)- 服务网关之Gateway

待续

会者定离,一期一祈 614

绕过Cloudflare的两种简便方案

绕过Cloudflare的两种简便方案

自成背后的博客 1万+

Unity接入抖音小程序侧边栏

Unity接入抖音小程序侧边栏功能实践总结 本文分享了Unity游戏接入抖音小程序侧边栏复访功能的实现过程。针对官方文档不清晰的问题,作者详细介绍了关键实现步骤:通过TT.CheckScene检测侧边栏可用性,利用OnShow事件监听判断用户是否从侧边栏进入,并提供了完整的UI交互代码示例。重点功能包括:检测宿主版本支持、区分侧边栏入口与非侧边栏入口的界面展示、实现跳转侧边栏场景等。文中附有官方文档链接和效果截图,为开发者提供了实用的接入参考方案。

类人_猿的博客 612

Spring Cloud入门系列(十五)- 服务网关之Gateway

GateWay的网关路由 有两种配置方式: 通过 application.yml 进行配置 通过 java代码 的方式进行配置 这一章将探讨通过 java代码的方式 配置路由。

会者定离,一期一祈 533

华为OD机试真题 新系统【查找温度记录统计信息】

华为OD机试 新系统真题【查找温度记录统计信息】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【查找温度记录统计信息】多语言题解。

qq_45776114的博客 485

Spring cloud gateway 详解和配置使用(文章较长)

目录 spring cloud gateway 介绍 1. 网关是怎么演化来的 2. 网关的基本功能 3.关于Spring Cloud Gateway 4.Spring Cloud Gateway 功能特征 5.predicate简介 6.GatewayFilter 工厂介绍 7.集成Hystrix的断路器功能 8.请求限流 pom.xml application.ym...

荡漾 21万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Spring Cloud Alibaba 系列之 Gateway(网关)

一、前言 Spring Cloud 原先整合 Zuul 作为网关组件,Zuul 由 Netflix 公司提供的,现在已经不维护了。后面 Netflix 公司又出来了一个 Zuul2.0 网关,但由于一直没有发布稳定版本,所以 Spring Cloud 等不及了就自己推出一个网关,已经不打算整合 zuul2.0 了。 Spring Cloud Gateway 是 Spring 公司基于 Spring 5.0, Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微

m0_58559010的博客 5203

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Spring Cloud Gateway 简介

Spring Cloud Gateway 是 Spring 官方推出的第二代 API 网关,基于 Project Reactor 和 WebFlux 构建,采用非阻塞 IO 模型,性能优越,适用于现代微服务架构。其核心功能包括路由、断言、过滤器、服务发现集成、熔断降级和限流控制。通过 YAML 或 Java Config 配置,Spring Cloud Gateway 可以轻松实现请求转发、鉴权、日志记录等功能。与 Netflix Zuul 相比,Spring Cloud Gateway 性能更高,配置更简

红血哥 1543

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: Spring Cloud OpenFeign系列:简介和使用
下一篇: MySQL系列:binlog日志详解(参数、操作、GTID、优化、故障演练)
Code技术分享
博客等级 码龄7年 3327粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值