当前位置: 首页 > news >正文

Spring Cloud GateWay(4.1.4)

介绍

该项目提供了一个建立在 Spring 生态系统之上的 API 网关,包括:Spring 6、Spring Boot 3 和 Project Reactor。Spring Cloud Gateway 旨在提供一种简单而有效的方法来路由到 API,并为其提供跨领域关注点,例如:安全性、监控/指标和弹性。

Spring Cloud Gateway 有两种不同的版本:服务器和代理交换。每种风格都提供 WebFlux 和 MVC 兼容性。

  • Server 变体是一个功能齐全的 API 网关,可以独立使用,也可以嵌入到 Spring Boot 应用程序中。
  • Proxy Exchange 变体专门用于基于注释的 WebFlux 或 MVC 应用程序,并允许使用特殊 ProxyExchange 对象作为 Web 处理程序方法的参数。

Spring Cloud Gateway Reactive Server

引入 Spring Cloud Gateway

若要在项目中包含 Spring Cloud Gateway,请使用组 ID 为 且 org.springframework.cloud 工件 ID 为 spring-cloud-starter-gateway 的启动器。有关使用当前 Spring Cloud 发布系列设置构建系统的详细信息,请参阅 Spring Cloud 项目页面。

如果包含启动器,但不希望启用网关,请设置 spring.cloud.gateway.enabled=false 。

Spring Cloud Gateway 基于 Spring Boot、Spring WebFlux 和 Project Reactor 构建。因此,当您使用 Spring Cloud Gateway 时,许多熟悉的同步库(例如 Spring Data 和 Spring Security)和模式可能不适用。如果你不熟悉这些项目,我们建议你在使用 Spring Cloud Gateway 之前先阅读他们的文档,以熟悉一些新概念。

Spring Cloud Gateway 需要 Spring Boot 和 Spring Webflux 提供的 Netty 运行时。它不能在传统的 Servlet 容器中工作,也不能在作为 WAR 构建时工作。

Glossary(核心)

  • 路由:网关的基本构建块。它由 ID、目标 URI、谓词集合和筛选器集合定义。如果聚合断言为 true,则匹配路由。
  • 断言:这是一个 Java 8 函数断言。输入类型是 Spring Framework ServerWebExchange 。这使您可以匹配 HTTP 请求中的任何内容,例如标头或参数。
  • 筛选器:这些是使用特定工厂构建的 GatewayFilter 实例。在这里,您可以在发送下游请求之前或之后修改请求和响应。

总结

web前端请求,通过一些匹配条件,定位到真正的服务节点。并在这个转发过程的前后,进行一些精细化控制。

predicate就是我们的匹配条件;

filter,就可以理解为一个无所不能的拦截器。有了这两个元素,再加上目标uri,就可以实现一个具体的路由

如何工作

下图提供了 Spring Cloud Gateway 工作原理的高级概述:

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

配置路由断言工厂和网关筛选器工厂

快捷方式配置

spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- Cookie=mycookie,mycookievalue

前面的示例使用两个参数定义 Cookie 路由断言工厂:cookie 名称 mycookie 和要匹配 mycookievalue 的值。

完全展开的参数

完全扩展的参数看起来更像是具有名称/值对的标准 yaml 配置。通常,会有一个 name 密钥和一个 args 密钥。 args 键是键值对的映射,用于配置断言或筛选器。

spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- name: Cookieargs:name: mycookieregexp: mycookievalue

路由断言工厂

Spring Cloud Gateway 将路由作为 Spring WebFlux HandlerMapping 基础结构的一部分进行匹配。Spring Cloud Gateway 包含许多内置的路由断言工厂。所有这些断言都与 HTTP 请求的不同属性匹配。您可以将多个路由断言工厂与逻辑 and 语句组合在一起。

After/Before Route 断言工厂

After 路由断言工厂采用一个参数 a datetime (即 java ZonedDateTime )。此断言匹配在指定日期时间之后发生的请求。

Before 路由断言 工厂采用一个参数 a datetime (即 java ZonedDateTime )。此断言匹配在指定的 datetime .以下示例配置 before route 断言:

spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After=2017-01-20T17:42:47.789-07:00[America/Denver]

此路线符合 2017 年 1 月 20 日 17:42 Mountain Time (Denver) 之前提出的任何请求。

spring:cloud:gateway:routes:- id: before_routeuri: https://example.orgpredicates:- Before=2017-01-20T17:42:47.789-07:00[America/Denver]

此路线符合 2017 年 1 月 20 日 17:42 Mountain Time (Denver) 之前提出的任何请求。

路由间断言工厂(between)

Between 路由断言工厂采用两个参数, datetime1 datetime2 它们是 java ZonedDateTime 对象。此断言匹配在 datetime1 之后和之前 datetime2 发生的请求。该 datetime2 参数必须位于 datetime1 之后。以下示例配置 between route 断言:

spring:cloud:gateway:routes:- id: between_routeuri: https://example.orgpredicates:- Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]

此路线符合 2017 年 1 月 20 日 17:42 山地时间(丹佛)之后和 2017 年 1 月 21 日 17:42 山地时间(丹佛)之前提出的任何请求。这对于维护时段可能很有用。

Cookie 路由断言工厂采用两个参数,cookie name 和 a regexp (Java 正则表达式)。此断言匹配具有给定名称且其值与正则表达式匹配的 cookie。以下示例配置 cookie 路由断言工厂:

spring:cloud:gateway:routes:- id: cookie_routeuri: https://example.orgpredicates:- Cookie=chocolate, ch.p

此路由匹配具有名为 chocolate cookie 的请求,其值与 ch.p 正则表达式匹配。

标头路由断言工厂

Header 路由断言工厂采用两个参数,即 和 header a regexp (这是一个 Java 正则表达式)。此断言与具有给定名称的标头匹配,其值与正则表达式匹配。以下示例配置标头路由断言:

spring:cloud:gateway:routes:- id: header_routeuri: https://example.orgpredicates:- Header=X-Request-Id, \d+

如果请求具有名为 X-Request-Id 其值与 \d+ 正则表达式匹配的标头(即,它的值为一位或多位),则此路由匹配。

主机路由断言工厂

Host 路由断言工厂采用一个参数:主机名 patterns 列表。该图案是蚂 . 蚁风格的图案,作为分隔符。此断言与 Host 与模式匹配的标头匹配。以下示例配置主机路由断言:

spring:cloud:gateway:routes:- id: host_routeuri: https://example.orgpredicates:- Host=**.somehost.org,**.anotherhost.org

还支持 URI 模板变量(如 {sub}.myhost.org )。


如果请求的 Host 标头值为 www.somehost.org or beta.somehost.org 或 www.anotherhost.org ,则此路由匹配。


此谓词将 URI 模板变量(如 sub 前面示例中定义的 )提取为名称和值的映射,并将其 ServerWebExchange.getAttributes() 放在 中,并使用 中 ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE 定义的键。然后, GatewayFilter 这些值可供工厂使用

方法路由断言工厂

The Method Route Predicate Factory takes a methods argument which is one or more parameters: the HTTP methods to match. The following example configures a method route predicate:
Method 路由断言工厂采用一个 methods 参数,该参数是一个或多个参数:要匹配的 HTTP 方法。下面的示例配置方法路由断言:

application.yml
spring:cloud:gateway:routes:- id: method_routeuri: https://example.orgpredicates:- Method=GET,POST
Copied!
如果请求方法是 a GET 或 . POST


路径路由断言工厂

Path 路由断言工厂采用两个参数:Spring PathMatcher patterns 列表和名为 matchTrailingSlash (默认为 true ) 的可选标志。以下示例配置路径路由断言:

application.yml
spring:cloud:gateway:routes:- id: path_routeuri: https://example.orgpredicates:- Path=/red/{segment},/blue/{segment}
Copied!


如果请求路径为,则此路由匹配,例如: /red/1 或 /red/1/ 或 /red/blue /blue/green 或。


如果 matchTrailingSlash 设置为 false ,则请求路径 /red/1/ 将不匹配。


此谓词将 URI 模板变量(如 segment 前面示例中定义的 )提取为名称和值的映射,并将其 ServerWebExchange.getAttributes() 放在 中,并使用 中 ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE 定义的键。然后, GatewayFilter 这些值可供工厂使用


可以使用实用程序方法(称为 get )来更轻松地访问这些变量。下面的示例演示如何使用该 get 方法:

Map<String, String> uriVariables = ServerWebExchangeUtils.getUriTemplateVariables(exchange);String segment = uriVariables.get("segment");
Copied!
查询路由谓词工厂


Query 路由断言工厂采用两个参数:必需 param 参数和可选参数 regexp (Java 正则表达式)。以下示例配置查询路由断言:

application.yml
spring:cloud:gateway:routes:- id: query_routeuri: https://example.orgpredicates:- Query=green
Copied!
如果请求包含 green 查询参数,则上述路由匹配。
application.yml
spring:cloud:gateway:routes:- id: query_routeuri: https://example.orgpredicates:- Query=red, gree.

如果请求包含的 red 查询参数的值与 gree. 正则表达式匹配,则上述路由匹配,因此 green 和 greet 将匹配。


RemoteAddr 路由断言工厂

RemoteAddr 路由断言工厂采用 sources 的列表(最小大小为 1),这些列表是 CIDR 表示法(IPv4 或 IPv6)字符串,例如 192.168.0.1/16 (where 192.168.0.1 是 IP 地址, 16 是子网掩码)。以下示例配置 RemoteAddr 路由断言:

application.yml
spring:cloud:gateway:routes:- id: remoteaddr_routeuri: https://example.orgpredicates:- RemoteAddr=192.168.1.1/24
Copied
如果请求的远程地址为 ,则此路由匹配 192.168.1.10 ,例如 。

GatewayFilter 工厂

路由过滤器允许以某种方式修改传入的 HTTP 请求或传出的 HTTP 响应。路由筛选器的作用域为特定路由。Spring Cloud Gateway 包含许多内置的 GatewayFilter 工厂。

AddRequestHeader

AddRequestHeader GatewayFilter 工厂采用 name - value 参数。以下示例配置: AddRequestHeader GatewayFilter

spring:cloud:gateway:routes:- id: add_request_header_routeuri: https://example.orgfilters:- AddRequestHeader=X-Request-red, blue

此列表将标头添加到 X-Request-red:blue 所有匹配请求的下游请求的标头中。

AddRequestHeader 知道用于匹配路径或主机的 URI 变量。URI 变量可以在值中使用,并在运行时展开。以下示例配置一个 AddRequestHeader GatewayFilter 使用变量的变量:

spring:cloud:gateway:routes:- id: add_request_header_routeuri: https://example.orgpredicates:- Path=/red/{segment}filters:- AddRequestHeader=X-Request-Red, Blue-{segment}

RemoveRequestHeader GatewayFilter 工厂

RemoveRequestHeader GatewayFilter 工厂采用一个 name 参数。它是要删除的标头的名称。以下列表配置: RemoveRequestHeader GatewayFilter

spring:cloud:gateway:routes:- id: removerequestheader_routeuri: https://example.orgfilters:- RemoveRequestHeader=X-Request-Foo

这将在标 X-Request-Foo 头发送到下游之前将其删除。

AddRequestHeadersIfNotPresent

AddRequestHeadersIfNotPresent GatewayFilter Factory :: Spring Cloud Gateway

此列表为所有匹配请求添加 2 个标头 X-Request-Color-1:blue 和 X-Request-Color-2:green 下游请求的标头。这与工作方式 AddRequestHeader 类似,但与它不同的 AddRequestHeader 是,只有在标头不存在时才会这样做。否则,将发送客户端请求中的原始值。

AddRequestParameter

AddRequestParameter GatewayFilter Factory :: Spring Cloud Gateway

AddResponseHeader

AddResponseHeader GatewayFilter Factory :: Spring Cloud Gateway

其余参考 官网:GatewayFilter Factories :: Spring Cloud Gateway

全局筛选器

该 GlobalFilter 接口具有与 GatewayFilter 相同的签名。这些是有条件地应用于所有路由的特殊过滤器。

组合全局筛选和 GatewayFilter 排序

当请求与路由匹配时,筛选 Web 处理程序会 GatewayFilter 将 的所有 GlobalFilter 实例和所有特定于路由的实例添加到筛选器链中。此组合筛选器链按 org.springframework.core.Ordered 接口排序,您可以通过实现 getOrder() 该方法进行设置。

由于Spring Cloud Gateway区分了过滤器逻辑执行的“pre”和“post”阶段(请参阅工作原理),因此优先级最高的过滤器是“pre”阶段的第一个,最后一个是“post”阶段的最后一个。

@Bean
public GlobalFilter customFilter() {return new CustomGlobalFilter();
}public class CustomGlobalFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info("custom global filter");return chain.filter(exchange);}@Overridepublic int getOrder() {return -1;}
}

网关指标筛选器(查看网关运行情况)

要启用网关指标,请添加 spring-boot-starter-actuator 为项目依赖项。然后,默认情况下, spring.cloud.gateway.metrics.enabled 该属性为 true ,网关指标筛选器就会运行。此筛选器添加一个以以下标签命名 spring.cloud.gateway.requests 的计时器指标:

  • routeId :路由 ID。

  • routeUri :API 路由到的 URI。

  • outcome :按 HttpStatus.Series 分类的结果。

  • status :返回客户端的请求的 HTTP 状态。

  • httpStatusCode :返回给客户端的请求的 HTTP 状态。

  • httpMethod :用于请求的 HTTP 方法。

然后,可以从中抓取这些指标, /actuator/metrics/spring.cloud.gateway.requests 并可以轻松地与 Prometheus 集成以创建 Grafana 仪表板。

本地缓存过滤器

如果启用了关联属性,则 LocalResponseCache 运行:

  • spring.cloud.gateway.global-filter.local-response-cache.enabled :激活所有路由的全局缓存

  • spring.cloud.gateway.filter.local-response-cache.enabled :激活关联的过滤器以在路由级别使用

此功能为满足以下条件的所有响应启用使用 Caffeine 的本地缓存:

  • 该请求是无体 GET。

  • 响应具有以下状态代码之一:HTTP 200(确定)、HTTP 206(部分内容)或 HTTP 301(永久移动)。

  • HTTP Cache-Control 标头允许缓存(这意味着它不具有以下任何值: no-store 存在于请求中和 no-store /或 private 存在于响应中)。

它接受两个配置参数:

  • spring.cloud.gateway.filter.local-response-cache.size :设置缓存的最大大小以逐出此路由的条目(以 KB、MB 和 GB 为单位)。

  • spring.cloud.gateway.filter.local-response-cache.time-to-live 设置缓存条目的过期时间(以 s 表示秒,m 表示分钟,h 表示小时)。

如果未配置这些参数,但启用了全局筛选器,则默认情况下,它会为缓存的响应配置 5 分钟的生存时间。

此筛选器还实现 HTTP Cache-Control 标头中值 max-age 的自动计算。如果 max-age 原始响应中存在该值,则使用 timeToLive 配置参数中设置的秒数重写该值。在后续调用中,此值将使用响应过期前的剩余秒数重新计算。
spring.cloud.gateway.global-filter.local-response-cache.enabled 设置为 false 停用所有路由的本地响应缓存,LocalResponseCache 筛选器允许在路由级别使用此功能。

相关文章:

Spring Cloud GateWay(4.1.4)

介绍 该项目提供了一个建立在 Spring 生态系统之上的 API 网关&#xff0c;包括&#xff1a;Spring 6、Spring Boot 3 和 Project Reactor。Spring Cloud Gateway 旨在提供一种简单而有效的方法来路由到 API&#xff0c;并为其提供跨领域关注点&#xff0c;例如&#xff1a;安…...

基于PHP+MYSQL开发制作的趣味测试网站源码

基于PHPMYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分&#xff0c; 自己手动在数据库里修改数据&#xff0c;数据库里有就会优先查询数据库的信息&#xff0c; 没设置的话第一次查询缘分都是非常好的 95-99&#xff0c;第二次查就比较差 &#xff0c; 所以如果要…...

【微信小程序】wx.navigateTo传参时不能使用const定义的数据类型

2024年7月21日更新 今日调试时发现似乎是因为使用vant-weapp时按照官方提示关闭了style:"v2"导致的此情况&#xff0c;打开之后无法复现该内容&#xff0c;特此提示。 以下是原内容 如题&#xff0c;笔者测试了好久才找到这个bug&#xff0c;想传递的数据是this.d…...

【Android studio环境搭建】Android studio连接夜神模拟器

Android studio连接夜神模拟器 一、 步骤 1.下载好Android Studio和夜神模拟器, 2.打开夜神模拟器&#xff0c;找到其安装目录下的 nox_adb.exe文件 3.右键进入cmd命令打开&#xff0c;管理员权限执行下面命令 PS D:\Program Files\Nox\bin> .\nox_adb.exe connect 127.…...

Qt:26.Qt项目:贪吃蛇游戏

一、项目功能演示&#xff1a; 开始界面可以点击进入游戏。 点击进入游戏之后&#xff0c;切换到选项界面&#xff0c;该界面可以选择游戏难度&#xff0c;回退&#xff0c;以及查询最近一次游戏得分。 游戏具体界面如下。贴图啥的可以自己换&#xff0c;本人审美不咋行&#x…...

通过HTML/CSS 实现各类进度条的功能。

需求&#xff1a;我们在开发中会遇到使用各式各样的进度条&#xff0c;因为当前插件里面进度条各式各样的&#xff0c;为了方便我们定制化的开发和方便修改样式&#xff0c;我们这里使用HTML和CSS样式来进行开发进度条功能。 通过本文学习我们会明白如何使用 HTML/CSS 创建各种…...

Opencv学习项目3——人脸识别

之前我们获取了一张图像的人脸信息&#xff0c;现在我们来使用特征点分析来匹配两张lyf照片的相似度 获取两张图片的人脸信息 import cv2 import face_recognition# 加载图像文件 img1 face_recognition.load_image_file(lyf1.png) img2 face_recognition.load_image_file(l…...

【js自学打卡11】生成器函数(generator函数)的使用总结+代码举例

力扣的js入门免费题刷完了&#xff0c;开始自己找题练练&#xff0c;顺便捡捡知识点 力扣2649 1.思路 一眼递归&#xff0c;但事实证明也可以直接flat手撕。 arr.flat(Infinity) //直接扁平化到最底层涉及到了一些关于生成器和异步编程相关的知识点&#xff0c;学一下。 2.…...

深入了解jdbc-02-CRUD

文章目录 操作和访问数据库Statement操作数据表的弊端sql注入问题PreparedStatement类ResultSet类与ResultSetMetaData类资源的释放批量插入 操作和访问数据库 数据库的调用的不同方式: Statement&#xff1a;用于执行静态 SQL 语句并返回它所生成结果的对象。PreparedStatem…...

《基于 Kafka + Quartz 实现时限质控方案》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…...

浏览器的卡顿与react的解决思路

以下内容是阅读过程中结合自己的思考而诞生的产物&#xff0c;不一定准确&#xff0c;但相反的&#xff0c;可能个人对实际情况有很大的误解。 仅做参考&#xff0c;欢迎指正。 前面提到浏览器显示的其实是渲染流程最后渲染出来的一张图片&#xff0c;而一个行为引起的副作用需…...

XXE:XML外部实体引入

XXE漏洞 如果服务器没有对客户端的xml数据进行限制&#xff0c;且版本较低的情况下&#xff0c;就可能会产生xxe漏洞 漏洞利用流程 1.客户端发送xml文件&#xff0c;其中dtd存在恶意的外部实体引用 2.服务器进行解析 3.服务器返回实体引用内容 危害&#xff1a;任意文件读…...

3D培训大师创新培训体验,加速空调关键组件的高效精准安装

如今&#xff0c;空调系统的复杂性和精密性与日俱增&#xff0c;对专业技术人员的要求也日益提高。尤其是决定空调是否能平稳运行的空调关键组件的装配培训&#xff0c;不再局限于传统的理论讲解和实体模型演示&#xff0c;而是更注重数字化、沉浸式学习。 案例背景 某空调公…...

PyTorch 深度学习实践-循环神经网络(高级篇)

视频指路 参考博客笔记 参考笔记二 文章目录 上课笔记总代码练习 上课笔记 个人能力有限&#xff0c;重看几遍吧&#xff0c;第一遍基本看不懂 名字的每个字母都是一个特征x1,x2,x3…&#xff0c;一个名字是一个序列 rnn用GRU 用ASCII表作为词典&#xff0c;长度为128&#x…...

这才是老板喜欢的电子信息类简历

点击可直接使用...

MySQL学习之事务,锁机制

事务 什么是事务&#xff1f; 事务就是逻辑上的一组操作&#xff0c;要么全做&#xff0c;要么全不做 事务经典例子&#xff1a;转账&#xff0c;转账需要两个操作&#xff0c;从一个人账户上减钱&#xff0c;在另一个账户上加钱&#xff0c;比如说小红给小明转账100元&…...

开源知识付费小程序源码 内容付费系统php源码 含完整图文部署教程

在当今数字化时代&#xff0c;知识付费作为一种新型的经济模式&#xff0c;正逐渐受到越来越多内容创作者、专家及商家的青睐。开源知识付费小程序源码和内容付费系统PHP源码作为实现这一模式的重要工具&#xff0c;为构建高效、安全、可扩展的知识付费平台提供了强大的技术支持…...

时序数据库如何选型?详细指标总结!

工业物联网场景&#xff0c;如何判断什么才是好的时序数据库&#xff1f; 工业物联网将机器设备、控制系统与信息系统、业务过程连接起来&#xff0c;利用海量数据进行分析决策&#xff0c;是智能制造的基础设施&#xff0c;并影响整个工业价值链。工业物联网机器设备感知形成了…...

【前端】JavaScript入门及实战51-55

文章目录 51 函数52 函数的参数53 返回值54 练习55 return 51 函数 <!DOCTYPE html> <html> <head> <title></title> <meta charset "utf-8"> <script type"text/javascript">/* 函数&#xff1a;1. 函数也是…...

【引领未来智造新纪元:量化机器人的革命性应用】

在日新月异的科技浪潮中&#xff0c;量化机器人正以其超凡的智慧与精准的操作&#xff0c;悄然改变着各行各业的生产面貌&#xff0c;成为推动产业升级、提升竞争力的关键力量。今天&#xff0c;让我们一同探索量化机器人在不同领域的广泛应用价值&#xff0c;见证它如何以科技…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...