02-详解请求路由的实现和常见的断言工厂

请求路由

路由转发

第一步: 新建一个SpringBoot工程如gateway模块, 引入网关依赖和nacos服务发现依赖

<!--网关依赖-->
<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>

第二步: 在gateway模块中编写启动类

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

第三步: 编写基础配置和路由规则

  • 路由名称(id): 路由的唯一表示,用户自定义只需要唯一即可
  • 路由目标地址(uri): 可以路由到某个固定地址,也可以路由到某个服务然后根据负载均衡规则选择一个服务实例
  • 路由断言(predicates): 判断请求是否符合路由规则的条件(可以设置多个规则),符合则转发到匹配的主机或者接口上
  • 路由过滤器(filters): 对请求或响应进行一些处理操作
server:port: 10010 # 网关端口
spring:application:name: gateway # 服务名称cloud:nacos:server-addr: localhost:8848 # 将网关服务注册到nacos#server-addr: localhost:80 # 使用nginx反向代理功能gateway:routes: # 网关路由配置- id: userservice uri: lb://userservice # 配置userservice服务的路由规则# uri: http://localhost:8081 predicates: - Path=/user/** # 按照路径匹配,只要是以/user开头的请求路径就符合规则- id: orderservice uri: lb://orderservice # 配置orderservice服务的路由规则predicates: - Path=/order/** # 按照路径匹配,只要是以/order开头的请求路径就符合规则

第四步: 启动网关服务,网关会根据指定的路由规则将请求转发到对应的服务实例,此时会将网关端口号后面的地址拼接到要转发地址的端口号后面

  • 访问http://localhost:10010/user/1时网关会将请求转发到http://userservice/user/1
  • 访问http://localhost:10010/order/101时网关会将请求转发到http://orderservice/order/101
{"id": 1,"username": "柳岩","address": "湖南省衡阳市"
}
{"id": 101,"price": 699900,"name": "Apple 苹果 iPhone 12 ","num": 1,"userId": 1,"user": {"id": 1,"username": "柳岩","address": "湖南省衡阳市"}
} 

网关实现路由的基本流程

在这里插入图片描述

断言工厂

常见的断言规则

我们在配置文件中写的断言规则只是字符串,这些断言规则会被Predicate Factory(断言工厂)读取并转变为路由判断的条件

SpringCloudGatewway提供了11种基本的断言工厂,用来读取用户定义的断言条件并对请求做出判断

在这里插入图片描述

Path表示按照路径匹配,这个规则由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory处理

  • 支持使用**表示匹配任意多层路径,{xx}表示占位符可以匹配一层路径
  • 支持设置多个路径规则,规则之间以逗号分隔
predicates:
# 最终将请求地址拼接到转发地址的端口号后面
- Path=/red/{segment},/blue/**# 同时segment这个参数也可以通过网关过滤工厂拿到
Map<String, String> uriVariables = ServerWebExchangeUtils.getUriTemplateVariables(exchange);
String segment = uriVariables.get("segment");

After表示在xx时间之后才能转发到路由目标地址,可以应用于上传网站做活动

predicates:
- After=2031-04-13T15:14:47.433+08:00[Asia/Shanghai]

Before表示在xx时间之前才能转发到路由目标地址

predicates:
- Before=2017-01-20T17:42:47.789-07:00[America/Denver]

Between表示在两个时间之间才能转发到路由目标地址

predicates:
- Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]

Cookie表示请求必须在cookie里配置对应的key及其value才能转发到路由目标地址

predicates:
- Cookie=chocolate, ch.p

Header表示请求必须配置请求头X-Request-Id ,\d+表示值为数值类型,符合以上条件才能转发到路由目标地址

predicates:
- Header=X-Request-Id, \d+

Host表示请求的主机必须符合指定的表达式才能转发到路由目标地址

predicates:
- Host=**.somehost.org,**.anotherhost.org

Method表示请求的请求的方法为GET或者POST才能转发到路由目标地址

predicates:
- Method=GET,POST

Query表示请求必须包含指定的请求参数name和value,value可以设置多个且以逗号隔开,支持.匹配任意字母

predicates:
# key为Query,value为red或gree.或greet或greed等
- Query=red, gree.

RemoteAddr表示请求的IP地址必须在指定的范围,参数是一个数组可以配置多个,参数格式为IP/子网掩码

predicates:
- RemoteAddr=192.168.1.1/24

Weight表示将多个路由目标地址分为一组,然后给不同的地址设置不同的权重

spring:cloud:gateway:routes:- id: weight_highuri: https://weighthigh.orgpredicates:- Weight=group1, 8 # 80%的请求会路由给https://weighthigh.org- id: weight_lowuri: https://weightlow.orgpredicates:- Weight=group1, 2 # 20%的请求会路由给https://weightlow.org

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

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

相关文章

玄关柜和鞋柜是一回事吗?福州中宅装饰,福州装修

玄关柜和鞋柜虽然都用于存放鞋子&#xff0c;但它们在概念上有所不同。玄关柜是一个更大的概念&#xff0c;它包括鞋柜和其他功能区域&#xff0c;可以说鞋柜是玄关柜的一部分。 1️⃣概念上的不同 玄关柜是一种集成了鞋柜、挂衣架、换鞋凳等多种功能于一体的家居家具&#xf…

Nginx(四层+七层代理)+Tomcat实现负载均衡、动静分离

一、Tomcat多实例部署 具体步骤请看我之前的博客 写文章-CSDN创作中心https://mp.csdn.net/mp_blog/creation/editor/134956765?spm1001.2014.3001.9457 1.1 访问测试多实例的部署 1.2 分别在三个tomcat服务上部署jsp的动态页面 mkdir /usr/local/tomcat/webapps/test vim …

Fork和Join底层原理

文章目录 一、任务类型1. 简介2. CPU密集型3. IO密集型4. 线程数计算方法 二、Fork/Join框架1. 思想2. Fork/Join简介3. Fork/Join使用4. 底层原理5. 总结 一、任务类型 1. 简介 思考: 线程池的线程数设置多少合适? 我们调整线程池中的线程数量的最主要的目的是为了充分并合理…

数字孪生轻量化引擎——AMRT3D引擎

随着全球经济亟待复苏&#xff0c;作为科技发展主要需求技术之一&#xff0c;数字孪生已经成为全球多个国家重点布局行业。例如&#xff0c;美国工业互联网盟将数字孪生作为工业互联网落地的核心和关键&#xff0c;德国工业4.0参考架构将数字孪生作为重要内容。 数字孪生已经形…

SSRF攻击实例讲解

服务器端请求伪造&#xff08;SSRF&#xff09;攻击是一种网络安全漏洞&#xff0c;其中攻击者迫使受影响的服务器向攻击者指定的内部或外部系统发送请求。以下是一个SSRF攻击的实例讲解及其分析。 SSRF攻击实例 当然&#xff0c;下面提供另外三个SSRF&#xff08;服务器端请…

2022最新云存储网盘系统,文件分享系统与文件存储系统。

资源入口 2022 最新云存储网盘系统, 文件分享系统与文件存储系统。 测试环境&#xff1a;Apache MySQL5.6 PHP7.0 安装 PHP 扩展 exif、fileinfo 从 PHP 禁用函数中 删除 shell_exec、proc_open、putenv 这三个 PHP 函数 PS&#xff1a;整体还不错的系统&#xff0c;注意的…

【学习笔记】V8垃圾回收策略

V8 V8是一款主流的JavaScript执行引擎V8采用即时编译,速度比较快V8内存设限,64位操作系统中上限为1.5G,32位系统中不超过800M V8垃圾回收策略 采用分代回收的思想内存分为新生代\老生代针对不同对象采用不同算法 v8常用的GC算法: 分代回收、空间复制、标记清除、标记整理、…

实战——Mac M2 安装mat工具

线上环境出现内存飙升的情况&#xff0c;需要工具定位问题发生点就需要用到mat工具了&#xff0c;之前都是在intel芯片环境上安装的&#xff0c;现在换了m2芯片&#xff0c;导致出现了问题&#xff0c;经过一系列调研都解决了&#xff0c;特此记录下&#xff0c;以备后查 开发…

语音压缩扩展器电路芯片TA31101/TA31101F——内含压缩和扩展器,噪声低 工作电压低电流小

TA31101/TA31101F是一块语音压缩扩展器电路&#xff0c;内含信号整流器单元、可变增益单元、运算放大器等电路单元&#xff0c;适用于无绳电话等产品中作语音压缩与扩展。 TA31101采用DIP 16的封装形式封装&#xff0c;TA31101F采用SOP 16的封装形式。 主要特点&#xff1a;●…

利用tf-idf对特征进行提取

TF-IDF是一种文本特征提取的方法&#xff0c;用于评估一个词在一组文档中的重要性。 一、代码 from sklearn.feature_extraction.text import TfidfVectorizer import numpy as npdef print_tfidf_words(documents):"""打印TF-IDF矩阵中每个文档中非零值对应…

社交网络分析1:起源发展、不同领域的应用、核心概念

社交网络分析1&#xff1a;社交网络相关定义和概念 写在最前面关于课程 社交网络、社交网络分析社交网络发展阶段&#xff08;自己感兴趣&#xff09;1. 社交网络的起源2. 社交网络的演变3. 社交网络的成熟4. 发展阶段补充和展望 2023社交大变革&#xff08;自己感兴趣的点&…

【Linux系统编程】初步运用git工具

介绍&#xff1a; 使用git之前首先要先认识gitee/github&#xff0c;gitee/github是一个远程仓库网站。git是平台专门开发的一个操控工具&#xff0c;是一个开源的分布式版本控制系统&#xff0c;我们使用git工具来与gitee/github来取得联系。 git的推送使用&#xff1a; git既…

商城免费搭建之java鸿鹄云商 java电子商务商城 Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c

鸿鹄云商 SAAS云产品概述 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、My…

光纤的连接

光纤在工程布线中&#xff0c;难免会遇到线不够长或者磨损折断的情况&#xff0c;要怎么处理呢&#xff1f; 首先看看光纤的结构&#xff1a; 纤芯&#xff1a;中心部分&#xff0c;光波在纤芯中传输。 包层&#xff1a;环绕纤芯&#xff0c;折射率低于纤芯&#xff0c;作用是…

Talk | UCSB博士生王丹青: 大语言模型的协作学习以及个性化生成评估

本期为TechBeat人工智能社区第555期线上Talk。 北京时间12月13日(周三)20:00&#xff0c;加州大学圣塔芭芭拉分校博士生—王丹青的Talk已准时在TechBeat人工智能社区开播&#xff01; 她与大家分享的主题是: “大语言模型的协作学习以及个性化生成评估”&#xff0c;介绍了她的…

基于JAVAEE技术校园车辆管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本校园车辆管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

互联网加竞赛 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于python 机器视觉 的车牌识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 &#x1f9ff; 更多资…

2023年最佳推荐 | 值得收藏的 5大 SaaS 知识库

随着数字化时代的到来&#xff0c;SaaS&#xff08;软件即服务&#xff09;已经成为企业和个人日常工作中的重要工具。在众多的SaaS应用中&#xff0c;知识库是不可或缺的一部分&#xff0c;它可以帮助我们更好地管理和利用知识&#xff0c;提高工作效率和创新能力。接下来就跟…

冲压模具市场调研:2023年该行业发展现状及前景分析

汽车冲压件模具是汽车车身生产的重要工艺装备&#xff0c;是汽车换型的主要制约因素。汽车冲压件模具具有尺寸大、型面复杂、精度要求高等特点&#xff0c;属于技术密集型产品。 汽车冲压模具能快速精密地把材料直接加工成零件或半成品并通过焊接、铆接、拼装等工艺装配成零部件…

CRM是怎样帮助企业从激烈竞争中脱颖而出的?

有限的市场机会与资源推动了市场竞争。市场竞争是在所难免的&#xff0c;但企业可以借助CRM管理系统调整其业务策略&#xff0c;在市场上很多竞争者中突围。CRM系统怎样帮助企业赢得市场竞争&#xff1f; 以下五个功能点是关键&#xff1a;数据分析、客户管理、合作伙伴、营销自…