微服务——网关路由(Spring Cloud Gateway)

网关路由

1.什么是网关

        网关又称网间连接器、协议转换器,是在网络层以上实现网络互连的复杂设备,主要用于两个高层协议不同的网络之间的互连。网关就是络的口。数据在网络间传输,从一个网络传输到另一网络时就需要经过网关来做数据的路由和转发以及数据安全的校验

而微服务网关起到同样的作用。前端请求不能直接访问微服务,而是要请求网关:

  • 网关可以做安全控制,也就是登录身份校验,校验通过才放行

  • 通过认证后,网关再根据请求判断应该访问哪个微服务,将请求转发过去

在SpringCloud当中,提供了两种网关实现方案:

  • Netflix Zuul:早期实现,目前已经淘汰

  • SpringCloudGateway:基于Spring的WebFlux技术,完全支持响应式编程,吞吐能力更强

官方网站:

Spring Cloud Gateway

2.SpringCloudGateway的应用

下面以SpringCloudGateway为例,看下如何利用网关实现请求路由。由于网关本身也是一个独立的微服务,因此也需要创建一个模块开发功能。大概步骤如下:

  • 创建网关微服务

  • 引入SpringCloudGateway、NacosDiscovery依赖

  • 编写启动类

  • 配置网关路由

2.1. 创建网关工程并导入依赖

        在 Maven 或 Gradle 项目中,添加 Spring Cloud Gateway 的相关依赖。例如,在 Maven 的 pom.xml 文件中添加:

2.2. 配置文件

在 application.yml 或 application.properties 文件中配置路由规则。例如:

server:port: 8080
spring:application:name: gatewaycloud:nacos:server-addr: 192.168.150.101:8848gateway:routes:- id: item # 路由规则id,自定义,唯一uri: lb://item-service # 路由的目标服务,lb代表负载均衡,会从注册中心拉取服务列表predicates: # 路由断言,判断当前请求是否符合当前规则,符合则路由到目标服务- Path=/items/**,/search/** # 这里是以请求路径作为判断规则- id: carturi: lb://cart-servicepredicates:- Path=/carts/**- id: useruri: lb://user-servicepredicates:- Path=/users/**,/addresses/**- id: tradeuri: lb://trade-servicepredicates:- Path=/orders/**- id: payuri: lb://pay-servicepredicates:- Path=/pay-orders/**

2.3. 启动类

确保你的 Spring Boot 应用有一个主启动类,并使用了 @SpringBootApplication 注解。

代码如下:

package com.hmall.gateway;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}
}

2.4. 运行和测试

启动GatewayApplication应用,并发送请求到配置的路由地址,观察请求是否被正确转发和处理。

3.路由规则

路由规则的定义语法如下:

spring:cloud:gateway:routes:- id: itemuri: lb://item-servicepredicates:- Path=/items/**,/search/**

其中routes对应的类型是一个集合,也就是说可以定义很多路由规则。集合中的RouteDefinition就是具体的路由规则定义,其中常见的四个属性如下:

  • id:路由的唯一标示

  • predicates:路由断言,其实就是匹配条件

  • filters:路由过滤条件,后面讲

  • uri:路由目标地址,lb://代表负载均衡,从注册中心获取目标微服务的实例列表,并且负载均衡选择一个访问。

3.1路由断言

predicates,也就是路由断言。SpringCloudGateway中支持的断言类型有很多:

名称

说明

示例

After

是某个时间点后的请求

- After=2037-01-20T17:42:47.789-07:00[America/Denver]

Before

是某个时间点之前的请求

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

Between

是某两个时间点之前的请求

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

Cookie

请求必须包含某些cookie

- Cookie=chocolate, ch.p

Header

请求必须包含某些header

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

Host

请求必须是访问某个host(域名)

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

Method

请求方式必须是指定方式

- Method=GET,POST

Path

请求路径必须符合指定规则

- Path=/red/{segment},/blue/**

Query

请求参数必须包含指定参数

- Query=name, Jack或者- Query=name

RemoteAddr

请求者的ip必须是指定范围

- RemoteAddr=192.168.1.1/24

weight

权重处理

SpringCloudGateway官网中有所有断言的详细用法Spring Cloud Gatewayicon-default.png?t=O83Ahttps://docs.spring.io/spring-cloud-gateway/docs/3.0.8/reference/html/#gateway-request-predicates-factories

3.2路由过滤

        路由过滤器是一种用于在请求到达网关时根据请求属性(如请求路径、请求参数、请求头等)进行路由的过滤器。它通过匹配这些属性,决定将请求发送到哪个后台服务。

        网关中提供了33种路由过滤器,每种过滤器都有独特的作用。

同样在官网中有详细介绍

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

MYSQL登录失败,确保密码正确,常见问题

今天登录MYSQL时,发现登录不进去,我能确保密码没有错误,并且我昨天以这样的方式登录成功,我已经重启过mysql服务,但是依旧登录不进去。 C:\Users\user>mysql -u root -p Enter password: ****** ERROR 1045 (28000): Access …

(已解决)vscode如何选择python解释器

文章目录 前言解决方案 前言 有的时候可能有不同版本的编译器,以适用不同年份的项目。所以,怎么在vscode中换python解释器呢? 解决方案 对着要运行的python文件进行右键,比如我是要运行main文件,点击那个命令选项版…

为什么7kw交流充电桩主板是充电桩运行的关键

7kw交流充电桩主板是电动汽车充电站中的一个核心组件,负责管理和控制充电过程。它是一种专门为7kw功率设计的交流充电设备的控制中枢,包含了电力电子、微处理器、通信模块等多种元件,以确保安全、高效地为电动汽车提供电能。 7kw与3.5kw主板的…

音视频入门基础:AAC专题(10)——FFmpeg源码中计算AAC裸流每个packet的pts、dts、pts_time、dts_time的实现

音视频入门基础:AAC专题系列文章: 音视频入门基础:AAC专题(1)——AAC官方文档下载 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件 音视频入门基础:AAC…

【CSS in Depth 2 精译_034】5.4 Grid 网格布局的显示网格与隐式网格(下)

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

在 React 中模拟输入

需求 与 Bug 项目的 C# 桌面端使用 CefSharp 内嵌了一个三方网站,在外部实现了一个登录控件,外部登录后希望内嵌的三方网站自动登录,实现代码如下: browser.ExecuteScriptAsync($"document.getElementsByName(username)[0]…

Etcd权限认证管理

1 查看是否开启权限认证 ctl auth status 2 开启权限认证 ctl auth enable。开启后每一条命令都要加上用户 --userroot:root(root默认最高权限) 3 创建其他用户 ctl user add user1 --user用户名:密码 4 创建角色 ctl role add testR --user 5 为角色添加权限 ctl role g…

Linux基础命令——文件系统的日常管理

目录 一.如何查看当前工作目录?(你现在所处的位置路径) 二.命令touch的用途是什么?还有别的方法新建文件吗? (1)创建空文件 (2)如果已经存在这个文件,就会更新创建时间。 (3…

优化器与现有网络模型的修改

文章目录 一、优化器是什么二、优化器的使用三、分类模型VGG16四、现有网络模型的修改 一、优化器是什么 优化器(Optimizer)是一个算法,用于在训练过程中调整模型的参数,以便最小化损失函数(Loss Function&#xff09…

【论文阅读笔记】YOLOv10: Real-Time End-to-End Object Detection

论文地址:https://arxiv.org/abs/2405.14458 文章目录 论文小结论文简介论文方法为NMS-free训练的一致性双标签分配双标签分配一致性匹配度量 效率-精度整体驱动的模型设计效率驱动模型设计轻量级分类检测头Spatial-channel 解耦下采样Rank-guided block design 精度…

linux 操作系统下的dhclient命令介绍和案例使用

linux 操作系统下的dhclient命令介绍和案例使用 dhclient 是 Linux 系统中用于动态主机配置协议(DHCP)客户端的命令。它的主要功能是从 DHCP 服务器获取网络配置,包括 IP 地址、子网掩码、默认网关和 DNS 服务器等信息 dhclient 命令概述 …

transformer共享权重对联模型

嵌入维度512,8头,1层 |分割中最从左到右依次是数据集上联,模型预测下联,数据集下联 ,有些对联对的还是可以的 嵌入维度512,8头,3层,最后一个输出层采用线性层,模型训练过程 上面是模型训练过程,下面是模型训练结果 从左到右,上联,模型生成,下…

满足10人同时绘图的图形工作站

在当今这个数字化与创意并重的时代,图形工作站作为设计师、艺术家及数字内容 创作者们的重要工具,其性能与效率直接关系到项目的成功与否。 当谈及满足10人同时绘图的图形工作站时,我们不仅要考虑硬件的峰值性能,还需兼顾软件的兼…

PSINS,GNSS速度与SINS滤波的MATLAB代码

文章目录 程序说明主要特点适用范围获取方式运行截图 程序说明 基于PSINS工具箱的GNSS和SINS滤波的MATLAB代码,观测量为GNSS的三轴速度。 专为工程师和研究人员设计,助您轻松实现高精度的导航和定位。 主要特点 高精度滤波算法:结合PSINS和…

中间件:maxwell、canal

文章目录 1、底层原理:基于mysql的bin log日志实现的:把自己伪装成slave2、bin log 日志有三种模式:2.1、statement模式:2.2、row模式:2.3、mixed模式: 3、maxwell只支持 row 模式:4、maxwell介…

思通数科开源智能文档识别平台的核心功能

思通数科的智能文档识别平台是一个综合性的解决方案,旨在通过人工智能技术提升文档识别处理的效率和准确性。 主要的功能是: 1. 信息抽取与数据结构化 票据识别与抽取:利用OCR技术自动识别和提取票据上的关键信息,如日期、金额等…

几何 | 数学专项

日期内容2024.9.19创建 { d > 0 , 递增数列 d < 0 , 递减数列 d 0 &#xff0c;常数列 \begin{cases} d>0,递增数列\\ d<0,递减数列\\ d0&#xff0c;常数列 \end{cases} ⎩ ⎨ ⎧​d>0,递增数列d<0,递减数列d0&#xff0c;常数列​ 【2010.13】 【1.历年真…

三菱变频器以模拟方式进行频率设定:(电压输入)

POINT 在STF(STR)信号 ON时&#xff0c;发出启动指令。 通过电位器(频率设定器)下达频率指令。(端子2-5之间连接(电压输入)) 接线示例 (变频器为频率设定器提供5V 电源。(端子 10)) 操作示例 以 60Hz 运行 NOTE. 1、正转开关(STF)与反转开关(STR)同时为0N时无法启动。此外&a…

利用Leaflet.js和turf.js创建交互式地图:航道路线绘制

引言 在现代Web应用中&#xff0c;地图的交互性是提供丰富用户体验的关键。Leaflet.js是一个轻量级的开源JavaScript库&#xff0c;它提供了简单易用的API来构建交云的地图。与此同时&#xff0c;turf.js作为一个强大的地理空间分析库&#xff0c;能够处理复杂的地理数据操作。…