Spring Cloud Gateway简介

SpringCloud中的gateWay (网关) 一、网关基本概念 1、API网关介绍 2、Spring Cloud Gateway 3、Spring Cloud Gateway核心概念 二、创建api-gateway模块(网关服务) 1、在创建api_gateway网关模块(springboot) 注意:很重要 所有服务,都需要在nacos中注册服务 ** 2、在pom.xml引入依赖 注意版本号 <dependencies> <!--服务注册nacos--> <dependency> 阅读详情

前言

Spring Cloud Gateway为Spring生态系统上的一个API网关组件,主要提供一种简单而有效的方式路由映射到指定的API,并为他们提供安全性、监控和限流等等。

前提条件

1.在项目中包含Spring Cloud Gateway,在Maven项目中pom.xml中将groupId=org.springframework.cloud和artifactId=spring-cloud-starter-gateway依赖进去,如下:

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

2.如果包含了spring-cloud-starter-gateway启动器,由于某种原因,不希望启动gateway,则可以在 application.properties配置文件中进行设置:

spring.cloud.gateway.enabled=false

或在application.yml配置:

spring:
  cloud:
    gateway:
      enabled: false

3.Spring Cloud Gateway基于Spring Boot2.0,Spring WebFlux和Project Reactor构建;如果想深入了解建议先了解它们。
4.需要了解的用到词汇
Route(路由):路由网关的基本构建模块,它是由ID、目标URl、断言集合和过滤器集合定义,如果集合断言为真,则匹配路由。
Predicate(断言):这是java 8的一个函数式接口predicate,可以用于lambda表达式和方法引用,输入类型是:Spring Framework ServerWebExchange,允许开发人员匹配来自HTTP请求的任何内容,例如请求头headers和参数paramers.
Filter(过滤器):这些是使用特定工厂构建的Spring Framework GatewayFilter实例,这里可以在发送下游请求之前或之后修改请求和响应。
5.必须知道Spring Cloud Gateway运行流程:
在这里插入图片描述解释:当客户端向spring cloud gateway发送请求,如果网关处理程序映射请求与路由匹配,就将其发送到指定的网关web处理程序服务,此处理程序服务运行并通过特定请求的过滤器之后发送请求,过滤器被虚线划分的原因是过滤器可以在发送代理请求之前或之后执行逻辑,执行完前面指定"pre"类型的过滤器之后进行代理服务请求,在代理服务请求被执行之后,又执行指定"post"类型的过滤器的相关逻辑处理。

具体使用

一、路由断言(Route Predicate)使用
0.使用之前先说一下关于断言predicate的用法:
predicate是java 8中的新特性,java.util.function.Predicate的一个功能接口,可用做lambda表达式的赋值目标。Predicate接口表示采用单个输入并判断返回boolean值的操作;判断的条件可以使用与或非(and,or,negate)等,通过一个断言predicate可以重复利用判断。用例:

	package com.demo.pakage;

import java.util.function.Predicate;

public class PredicateDemo {

	public static void main(String[] args) {

/*
 * 1.predicate test()方法
 * 
 * */		
		//predicate Sting
		Predicate<String> predicateStr=str->{
			return str.equals("String");			
		};
		//使用test()方法执行断言,输出true,false
		System.out.println(predicateStr.test("String"));
		System.out.println(predicateStr.test("string"));
		//Predicate integer
		Predicate<Integer> predicateInt=i->{
			return i>0;
		};
		//输出true,false
		System.out.println(predicateInt.test(5));
		System.out.println(predicateInt.test(-1));
/*
 * 
 * 2.predicate add(),or(),negate()方法
 * */		
	Predicate<String> predicate=s->{
		return s.equals("String");
	};
	//and()方法,输出true
	Predicate<String> predicateAnd=predicate.and(s->s.length()>5);
	System.out.println(predicateAnd.test("String"));
	//or()方法,输出true
	Predicate<String> predicateOr=predicate.or(s->s.length()==4);
	System.out.println(predicateOr.test("String"));
	//negate()方法,取反,输出false
	Predicate<String> predicateNegate=predicate.negate();
	System.out.println(predicateNegate.test("String"));
	}
}

1.通过配置applicaton.yml文件进行路由断言使用,predicate根据具体的请求规则,匹配具体的route去处理;Spring Cloud Gateway包含很多的内置路由断言(Route Predicate),这些断言可以去匹配HTTP请求的不同属性如Cookie匹配、Header匹配、Host匹配、Method匹配、Path匹配、Query匹配、RemoteAddr匹配以及匹配路由断言之前或之后或之间的请求。如下图:
在这里插入图片描述

具体yml配置文件格式如下:

spring:
  profiles:
    active: "与下面的某个id值相同"
---
#路由断言之后匹配
spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: https://xxxx.com
        predicates:
        - After=xxxxx
#路由断言之前匹配
spring:
  cloud:
    gateway:
      routes:
      - id: before_route
        uri: https://xxxxxx.com
        predicates:
        - Before=xxxxxxx
#路由断言之间
spring:
  cloud:
    gateway:
      routes:
      - id: between_route
        uri: https://xxxx.com
        predicates:
        - Between=xxxx,xxxx
#路由断言Cookie匹配,此predicate匹配给定名称(chocolate)和正则表达式(ch.p)
spring:
  cloud:
    gateway:
      routes:
      - id: cookie_route
        uri: https://xxxx.com
        predicates:
        - Cookie=chocolate, ch.p
#路由断言Header匹配,header名称匹配X-Request-Id,且正则表达式匹配\d+
spring:
  cloud:
    gateway:
      routes:
      - id: header_route
        uri: https://xxxx.com
        predicates:
        - Header=X-Request-Id, \d+
  #路由断言匹配Host匹配,匹配下面Host主机列表,**代表可变参数
  spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: https://xxxx.com
        predicates:
        - Host=**.somehost.org,**.anotherhost.org
#路由断言Method匹配,匹配的是请求的HTTP方法
spring:
  cloud:
    gateway:
      routes:
      - id: method_route
        uri: https://xxxx.com
        predicates:
        - Method=GET
#路由断言匹配,{segment}为可变参数
spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: https://xxxx.com
        predicates:
        - Path=/foo/{segment},/bar/{segment}
 #可以通过java方法获取{segname}:
#Map<String, String> uriVariables = ServerWebExchangeUtils.getPathPredicateVariables(exchange);
#String segment = uriVariables.get("segment");

#路由断言Query匹配,将请求的参数param(baz)进行匹配,也可以进行regexp正则表达式匹配 (参数包含foo,并且foo的值匹配ba.)
spring:
  cloud:
    gateway:
      routes:
      - id: query_route
        uri: https://xxxx.com
        predicates:
        - Query=baz 或 Query=foo,ba.
#路由断言RemoteAddr匹配,将匹配192.168.1.1~192.168.1.254之间的ip地址,其中24为子网掩码位数即255.255.255.0  
spring:
  cloud:
    gateway:
      routes:
      - id: remoteaddr_route
        uri: https://example.org
        predicates:
        - RemoteAddr=192.168.1.1/24
  

二、Gateway Filter过滤器的使用(网关的重点)
上面的Router Predicate路由断言就决定了请求由哪一个路由处理,在路由处理之前,需要经过"pre"类型的Filter路由过滤器处理,处理完返回响应之后,又可以由"post"类型的路由过滤器处理。Gateway路由过滤器允许修改传入的HTTP请求和返回的HTTP响应,过滤器可以限定作用在某些特定请求路径上;在"pre"类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等;在"post"类型的过滤器可以做响应内容、响应头的修改,日志的输出,流量监控等。因此filter可以分两种类型:"pre"类型和"post"类型。从作用范围又可以分为针对单个路由的filter和针对所有路由的global filter。
Spring Cloud Gateway包含很多内置的GatewayFilter工厂,如下图:
在这里插入图片描述1.列举其中一个Gateway Filter例子:RewritePath GatewayFilter Factory(重写路径,zuul是没有的功能)

	spring:
		profiles:
			action: rewritepath_route
	---
	spring:
		cloud:
			gateway:
				routes:
				- id: rewritepath_route
				  uri: http://www.baidu.com
				  predicate: 
				  - Path=/foo/**
				  filters:
				  - RewritePath=/foo/(?<segment>.*),/$\{segment}
		profiles: rewritepath_route	

上面的配置中,所有的/foo/**开始的路径都会命中配置的router,并执行过滤器的逻辑,在本案例中配置了RewritePath过滤器工厂,此工厂将/foo/(?.*)重写为{segment},然后转发到https://blog.youkuaiyun.com/{segment},{segment}为参数值。

2.自定义过滤器
可以实现自己定义的过滤器,在自己定义的过滤器类中需要实现GatewayFilter接口,主要重写其抽象方法filter(ServerWebExchange,GatewayFilterChain);和实现Ordered接口,重写getOrder()返回该过滤器的优先顺序order;也可以不实现Ordered接口,在启动类调用该过滤器的时候使用注解@Order(-1)来设置优先顺序。
待续。。。。

SpringCloud之网关Gateway 2、基本搭建4.0.0com.gatewaycode0.0.1-SNAPSHOTgatewayDemo 阅读详情

相关推荐

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

代码演示 新建模块: cloud-gateway9527

会者定离,一期一祈 686

Spring Cloud Gateway

在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的话会产生很多问题,例如:客户端多次请求不同的微服务,增加客户端代码或配置编写的复杂性认证复杂,每个微服务都有独立认证存在跨域请求,在一定场景下处理相对复杂为解决上面的问题所以引入了网关的概念:所谓的API网关,就是指系统的统一入口。

杀神lwz的博客 2万+

Spring Cloud Gateway 11种断言工厂

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

pleaseprintf的博客 1964

SpringCloud gateway (史上最全)

前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家介绍三个版本的 高并发秒杀: 一、版本1 :springcloud + zookeeper 秒杀 二、版本2 :springcloud + redis 分布式锁秒杀 三、版本3 :springcloud + Nginx + Lua 高性能版本秒杀 以及有关Springcloud 几篇核心、重要的文章: 一、Springcloud 配置, 史上最全 一文全懂 二、Springcloud 中 Sprin

骏马逸动,心随你动的博客 3万+

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-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的博客 5749

Spring Cloud Gateway重试机制

前言 重试,我相信大家并不陌生。在我们调用Http接口的时候,总会因为某种原因调用失败,这个时候我们可以通过重试的方式,来重新请求接口。 生活中这样的事例很多,比如打电话,对方正在通话中啊,信号不好啊等等原因,你总会打不通,当你第一次没打通之后,你会打第二次,第三次…第四次就通了。 重试也要注意应用场景,读数据的接口比较适合重试的场景,写数据的接口就需要注意接口的幂等性了。还有就是重试次数如...

u010889990的专栏 1万+

解决Spring Cloud Gateway中使用OpenFeign出现的错误

问题描述 Spring Cloud版本: Spring Boot 版本: Spring Cloud Gateway 项目中使用了OpenFeign组件,配置引用均正确。报错如下: feign.codec.EncodeException: No qualifying bean of type 'org.springframework.boot.autoconfigure.http.HttpMessageConverters' available: expected at least 1 bean which

爱码士的博客 1万+

【Spring Cloud】Gateway

API网关、Gateway Filter Factories

每篇博客都不是最终版,都会随着我的学习更新 1865

Spring Cloud Gateway 的简单搭建

在 《服务注册、发现和远程调用》 这篇文章中介绍关于服务注册、发现和远程调用的一个 Demo,本文在这篇文章的基础上介绍如何使用 Spring Cloud Gateway 搭建一个网关。 一、问题 在上篇文章中,分别创建了 service_user 和 service_dict 两个服务,两个服务分别使用了 8001 和 8002 两个端口。这样直接通过 PostMan 或浏览器调用其中的接口没什么问题,如下图所示。 从上图可以看到,访问 user 使用了 8001 端口,访问 dict 使用了

uuqaz的博客 1642

Android 12 HAL开发避坑实录:手把手教你用AIDL在Native层实现一个可开机自启动的Service

本文详细介绍了在Android 12 HAL开发中,如何通过AIDL在Native层实现一个可开机自启动的Service。从环境准备、AIDL接口定义、服务实现到VINTF集成与SELinux策略配置,提供了完整的实战指南,帮助开发者避开常见陷阱,提升开发效率。

weixin_28314575的博客 321

Spring Cloud Gateway 简介

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

红血哥 1543

基于奥比中光Orbbec Astra Pro与ROS实现实时3D环境建模:orb_slam2实战指南

本文提供了一份详细的实战指南,介绍如何使用奥比中光Orbbec Astra Pro深度摄像头与ROS系统,部署并运行ORB-SLAM2算法,实现实时3D环境建模与定位。内容涵盖从驱动安装、环境配置、算法编译到摄像头标定与性能调优的全流程,旨在帮助开发者快速搭建一套高性价比的视觉SLAM系统。

weixin_29054399的博客 334

Spring Cloud Gateway详解

SpringCloudGateway是SpringCloud官方推出的第二代网关框架,取代Netflix中的Zuul网关。SpringCloudGateway旨在为微服务架构提供一种简单且有效的API路由的管理方式,并基于Filter的方式提供网关的基本功能,例如安全认证、监控、限流等等。

qq_41269519的博客 1632

高通410刷OpenWRT后网络共享配置全攻略

本文详细解析了在高通410设备刷入OpenWRT后,因基带文件丢失导致无法上网的常见问题。核心解决方案是通过SMB网络共享,将备份的原厂基带文件传输至OpenWRT系统并正确还原,从而恢复移动网络连接。文章提供了从备份基带、刷机到配置共享和文件替换的完整操作指南。

grafana6viz的博客 571

ms17-010 永恒之蓝漏洞利用+抓包分析过程

一、实验环境: 1、攻击机:Kali 1)攻击工具:msf 2)分析工具:wireshark 3)IP地址:192.168.204.157(自动获得) 2、靶 机:Windows7 1)版本:SP1 2)开启网络共享(SMB协议) 3)关闭防火墙 4)IP地址:192.168.204.150(自动获得) 3、网卡连接方式:Vmnet8(NAT) 二、实验步骤: ...

qq_41976183的博客 6947

Spring Cloud Gateway 入门

很多时候, 有些微服务是不应该被外部(UI) 直接调用的,我们需要API gateway来拦截这些请求。

nvd11的专栏 470

FPGA和USB3.0通信-USB3.0 PHY介绍

可以和FPGA搭配使用的USB3.0 PHY芯片通过之前的介绍<FPGA和USB3.0通信-USB3.0协议介绍USB3.0 PHY简介首先我们需要了解PHY具体完成哪些工作以及我利...

OpenFPGA的博客 4940

【Spring Cloud】Spring Cloud Gateway 网关介绍

Spring Cloud Gateway 允许开发者自定义过滤器,以实现特殊的业务需求。自定义过滤器可以分为两类:全局过滤器和局部过滤器。全局过滤器适用于所有路由,而局部过滤器仅适用于特定路由。全局过滤器示例@Component@Override@Override// 执行顺序局部过滤器示例通过实现@Component@Override}));

国家专精特新小巨人、资深消防行业企业、国家高新技术企业、智慧消防技术实验室、准独角兽企业、浙江省电流AI技术研发中心 1980

彻底解决Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

renkai721的专栏 24万+

《网络安全自学教程》- SQL注入之报错注入原理+步骤+实战操作

这篇文章为大家解析报错注入的实现原理,结合实战案例讲解报错注入的使用步骤。

wangyuxiang946的博客 1万+

创建spring Cloud Gateway

创建spring Cloud Gateway 一、准备pom.xml依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependen...

github_35976996的博客 2614

【Agent实战】Anthropic Skills、MCP与LangGraph的工程实践

随着大语言模型(LLM)应用从简单的Chatbot向自主智能体(Autonomous Agents)演进,如何管理复杂的任务上下文、标准化的工具调用以及确定性的业务流程,成为了系统设计的核心挑战。Anthropic 推出的 Skills 规范,结合 Model Context Protocol (MCP) 与 Function Calling,为构建模块化、可扩展的 Agent 提供了全新的范式。

kakaZhui的博客 584

Spring Cloud Gateway网关

(一)SpringCloudeGateway基本使用 Spring Cloud Gateway是Spring官方基于Spring5.0、SpringBoot2.0和Project Reactor等技术开发的网 关 旨在为微服务框架提供一种简单而有效的统一的API路由管理方式,统一访问接口。 Spring Cloud Gateway作为Spring Cloud生态体系中的网关,目标是替代Netflix的Zuul,其不仅提供统 一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例

m0_60413225的博客 4414

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: java日志框架
下一篇: Swagger2在spring boot API中的集成使用
huahua.Dr
博客等级 码龄8年 87粉丝 68原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值