【SpringCloud学习笔记】gateway网关

gateway网关

核心概念:

  • 路由(route):路由信息由 D、目标 RI、一组断言和一组过滤器组成。如果断言路由为真,则说明请求的 URI 和配配
  • 断言(predicate): Java8 中的断言函数,可以配置http请求的断言条件,断言成功会对匹配的路径进行路由
  • 过滤器(filter):过滤器分为两种类型,分别是 Gateway Filter 和Global Filter。过滤器可以对请求和响应进行处理

工作原理

在这里插入图片描述
客户端向Spring Cloud网关发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到网关Web处理程序。该处理程序运行通过特定于请求的筛选器链发送请求。筛选器由虚线分隔的原因是,筛选器可以在发送代理请求之前或之后执行逻辑。执行所有“前置”过滤器逻辑,然后发出代理请求。发出代理请求后,将执行“后”过滤器逻辑

开始使用

  • 工程目录

gateway-demo
|----eureka-server 注册中心 8761
|----gateway-server 网关服务 9002
|----user-service 用户服务 9001,提供一个查询用户列表的功能

  • 添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 配置文件添加路由配置
server:port: 9002
spring:application:name: gateway-servercloud:gateway:routes:- id: user-service #路由iduri: http://localhost:9001 #目标url,路由到微服务的地址predicates: #断言条件- Path=/user-service/**filters: #过滤器- StripPrefix=1
  • 将网关服务注册到注册中心
eureka:instance:prefer-ip-address: trueinstance-id: ${spring.cloud.client.ip-address}:${server.port}client:service-url:defaultZone: http://localhost:8761/eureka/

最初的路由配置还没有接入到注册中心,路由的配置uri: http://localhost:9001写死的映射地址。注册到注册中心后映射地址通过服务名动态获取

cloud:gateway:routes:- id: user-service #路由iduri: lb://user-service #目标url,路由到微服务的地址predicates: #断言条件- Path=/user-service/**filters: #过滤器- StripPrefix=1

断言的使用

predicates路由匹配规则,当匹配对应的断言条件为true,才回映射到目标url

  • Path=/user/** 匹配对应的url,将匹配的url追加在目标url后面
  • Query=xxx 匹配请求参数中有指定参数的请求
  • Method=GET,POST 匹配任意get请求
  • After= 路由指定时间之后的请求
  • Before=路由指定时间之前的请求
  • RemoteAddr=192.168.21.1 匹配请求远程地址是RemoteAddr的地址
  • Header=X-Reques-Id \d+ 匹配包含指定请求头的请求
  • Cookie=匹配带有指定cookie的请求
cloud:gateway:enabled: trueroutes:- id: user-service #路由iduri: lb://user-servicepredicates: #断言条件- Path=/user-service/**- Query=abc- Method=post- After=

filters使用

  • 全局过滤器:Spring Cloud Gateway内置了很多不同类型的过滤器,另外也可以自定义全局过滤器
@Component
public class CustomGlobalGateWayFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {System.out.println("自定义全局过滤器执行了");return chain.filter(exchange);}/** 过滤器执行顺序,数值越小优先级越高*/@Overridepublic int getOrder() {return 0;}
}
  • 局部过滤器
@Component
public class CustomGateWayFilter implements GatewayFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {System.out.println("自定义过滤器执行了");return chain.filter(exchange);}/** 过滤器执行顺序,数值越小优先级越高*/@Overridepublic int getOrder() {return 0;}
}
  • 注册过滤器
@Configuration
public class RoutesConfiguration {@Beanpublic RouteLocator routeLocator(RouteLocatorBuilder builder) {return builder.routes().route(r -> r.path("/user/**").uri("lb://user-service").filters(new CustomGateWayFilter()).id("user-service")).build();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/1573.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

总结911

目标规划&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化5讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 每日规划 今日已做 1.回诵之前文章 2.每日长难句&#xff0c;句句…

人工智能(1):机器学习工作流程

1 什么是机器学习 机器学习是从数据中自动分析获得模型&#xff0c;并利用模型对未知数据进行预测。 2 机器学习工作流程 机器学习工作流程总结 1 获取数据 2 数据基本处理 3 特征工程 4 机器学习(模型训练) 5 模型评估 结果达到要求&#xff0c;上线服务没有达到要求&a…

1.2g可视化大屏项目分享【包含数字孪生、视频监控、智慧城市、智慧交通等】

1.2g可视化大屏项目分享【包含数字孪生、视频监控、智慧城市、智慧交通等】 链接&#xff1a;https://pan.baidu.com/s/1KSNll7b6bVoVPPqcQmNKeQ 提取码&#xff1a;w13x

计算机组成原理(期末或考研备考)-计算机系统概述重点

1.1计算机发展历程 讲解视频&#xff1a; https://www.bilibili.com/video/BV15s4y1F7eC/?spm_id_from333.999.0.0 1946第一台电子数字计算机(ENIAC)第一代计算机&#xff08;1946-1957&#xff09;-- 电子管&#xff1b;体积大&#xff0c;容量小&#xff0c;成本高&#x…

Tomcat的部署和优化

目录 一、Tomcat简介 二、Tomcat 的构成 三、Tomcat 功能组件结构 四、Tomcat 请求过程 五、Tomcat 服务部署 六、Tomcat 虚拟主机配置 七、Tomcat优化 1.Tomcat 配置文件参数优化 2.JVM优化 一、Tomcat简介 Tomcat 是 Java 语言开发的&#xff0c;Tomcat 服务器是一个…

03 Web全栈 浏览器内置对象/事件/ajax

浏览器是一个JS的运行时环境&#xff0c;它基于JS解析器的同时&#xff0c;增加了许多环境相关的内容&#xff0c;用一张图表示各个运行环境和JS解析器的关系如下&#xff1a; 我们把常见的&#xff0c;能够用JS这门语言控制的内容称为一个JS的运行环境&#xff0c;常见的运行环…

three.js通过CubeTexture加载环境贴图,和RGBELoader加载器加载hdr环境贴图

一、使用CubeTexture进行环境贴图 1.CubeTexture使用介绍 Three.js中可以通过使用CubeTexture进行环境贴图&#xff0c;CubeTexture需要将6张图片&#xff08;正面、反面、上下左右&#xff09;包装成一个立方体纹理。下面是一个简单的例子&#xff1a; 首先需要加载六张贴图…

前端JavaScript入门-day03

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 1、循环-for 1. for 循环-基本使用 1. for循环语法 2. 退出循环 2. for 循环嵌套 2、数组 1 数组是…

18.RocketMQ中消息重复的场景和幂等处理

highlight: arduino-light 消息重复的场景 发送消息异常,重试发送导致消息重复★ 当一条消息已被成功发送到服务端并完成持久化。此时出现网络闪断或者客户端宕机&#xff0c;导致服务端对生产者的确认应答失败。生产者发送消息到mq时发送成功未获取到响应,然后生产者进行消息发…

java.util.concurrent.Executionexception 异常

报错截图&#xff1a; 今天运行时发生了如下报错。自己捣鼓半天也没发现问题出在哪儿&#xff0c;感谢大佬的帮助&#xff0c;记录下来防止再犯。。 caused by org.apache.flink.client.program.programInvocationException: Job failed。程序调用异常。网上找了很多解决方法…

数字图像处理-图像复原与重建

文章目录 一、图像退化/复原过程的模型二、噪声模型2.1噪声的空间和频率特性2.2一些重要的噪声概率密度函数2.2.1高斯噪声2.2.2瑞利噪声2.2.3爱尔兰&#xff08;伽马&#xff09;噪声2.2.4指数噪声2.2.5均匀噪声2.2.6脉冲&#xff08;椒盐&#xff09;噪声 2.3周期噪声 三、只存…

移动WEB开发之rem适配布局

css基础&#xff08;一&#xff09;css基础&#xff08;一&#xff09;_上半场结束&#xff0c;中场已休息&#xff0c;下半场ing的博客-CSDN博客Emmet语法Emmet语法_上半场结束&#xff0c;中场已休息&#xff0c;下半场ing的博客-CSDN博客css基础&#xff08;二&#xff09;c…