OJ在线评测系统 微服务高级 Gateway网关接口路由和聚合文档 引入knife4j库集中查看管理并且调试网关项目
Gateway微服务网关接口路由
各个服务之间已经能相互调用了
为什么需要网关
因为我们的不同服务是放在不同的端口上面的
如果前端调用服务 需要不同的端口 8101 8102 8103 8104
我们最好提供一个唯一的 给前端去调用的路径
我们学习技术的时候必须要去思考
1.为什么要用?
2.是什么?
所有的服务端口不同 增大了前端调用成本 同时我们的所有服务是分散的 你可能需要进行集中管理操作
比如说 集中解决跨域 鉴权 接口文档 服务的路由 接口安全性 流量染色
Gateway 想自定义一些功能
需要对这个技术有比较深的理解
接口路由
统一的接收前端请求
然后转发请求到对应的服务
Gateway 是应用层网关 想要自定义一些功能 需要对这个技术有较深的理解
Nginx 是接入层网关 比如说每个请求的日志 通常没有业务逻辑
如何找到路由
可以编写一套路由配置 通过API地址前缀来找到服务

spring:cloud:nacos:discovery:server-addr: 127.0.0.1:8848gateway:routes:- id: yuoj-backend-user-serviceuri: lb://yuoj-backend-user-servicepredicates:- Path=/api/user/**- id: yuoj-backend-question-serviceuri: lb://yuoj-backend-question-servicepredicates:- Path=/api/question/**- id: yuoj-backend-judge-serviceuri: lb://yuoj-backend-judge-servicepredicates:- Path=/api/judge/**application:name: yuoj-backend-gatewaymain:web-application-type: reactive
server:port: 8101
knife4j:gateway:# ① 第一个配置,开启gateway聚合组件enabled: true# ② 第二行配置,设置聚合模式采用discover服务发现的模式strategy: discoverdiscover:# ③ 第三行配置,开启discover模式enabled: true# ④ 第四行配置,聚合子服务全部为Swagger2规范的文档version: swagger2
解释一下 配置

# ------------------------------------
# 服务id 地址所对应的服务- id: yuoj-backend-user-service
# 地址 请求到哪个地址uri: lb://yuoj-backend-user-service
# 规则 哪些服务请求到地址predicates:- Path=/api/user/**
# ------------------------------------
兼容问题

解决找不到数据库的问题

Gateway微服务网关聚合文档
如果想调试网关项目
可以使用接口文档工具 比如说postman
以一个全局的视角集中查看和管理所有的接口文档
可以用 knife4j 这个库
先要给所有的服务引入依赖 同时开启接口文档的配置
给网关配置集中管理文档
快速开始 | Knife4j (xiaominfo.com)
先引入依赖
只给需要的模块引入
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-gateway-spring-boot-starter</artifactId><version>4.3.0</version></dependency>
进行配置

knife4j:gateway:# ① 第一个配置,开启gateway聚合组件enabled: true# ② 第二行配置,设置聚合模式采用discover服务发现的模式strategy: discoverdiscover:# ③ 第三行配置,开启discover模式enabled: true# ④ 第四行配置,聚合子服务全部为Swagger2规范的文档version: swagger2
我都写代码了 还让我写那么多繁杂的配置 是对程序员的不尊重
这样就能聚合文档 文档里面有接口文档工具
可以很方便的调试
分布式session登录
注意的是一定要在总体项目的pom.xml文件加入redis的依赖
<!-- redis -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId>
</dependency>
访问地址 /doc.html 可查看接口文档
Session 是一种用于在用户与应用程序之间保持状态的机制。它允许在用户访问不同页面时存储和管理用户信息,如登录状态、购物车内容等。Session 通常在服务器端存储,并通过唯一的会话 ID 来识别用户。
Session 的管理通常包括以下几个方面:
-
创建与初始化:当用户首次访问应用时,服务器为其创建一个新的 Session,并生成一个唯一的 Session ID。
-
存储数据:开发者可以在 Session 中存储各种数据,如用户信息、应用状态等,这些数据在用户的多个请求中保持可用。
-
过期管理:Session 会设定一个过期时间,超过这个时间后,Session 将失效,存储的数据也会被清除。这可以帮助节省资源和提升安全性。
-
安全性:为了保护 Session 数据,常用的方法包括加密 Session ID、使用 HTTPS 等。
-
结束与销毁:用户登出时或 Session 过期时,服务器会销毁该 Session,以释放资源。
解决 cookie 跨路径问题

server:address: 0.0.0.0port: 8104servlet:context-path: /api/judge# cookie 30 天过期session:cookie:max-age: 2592000path: /api相关文章:
OJ在线评测系统 微服务高级 Gateway网关接口路由和聚合文档 引入knife4j库集中查看管理并且调试网关项目
Gateway微服务网关接口路由 各个服务之间已经能相互调用了 为什么需要网关 因为我们的不同服务是放在不同的端口上面的 如果前端调用服务 需要不同的端口 8101 8102 8103 8104 我们最好提供一个唯一的 给前端去调用的路径 我们学习技术的时候必须要去思考 1.为什么要用&am…...
腾讯云上传pushdocker镜像到镜像仓库
文章目录 腾讯云上传docker镜像 腾讯云上传docker镜像 >docker login ccr.ccs.tencentyun.com --usernameXXXXXX用户名>sudo docker tag mynginx:1.0 ccr.ccs.tencentyun.com/crfkitty/mynginx:1.0>docker push ccr.ccs.tencentyun.com/crfkitty/mynginx:1.0 The pu…...
sqli-labs靶场第二关less-2
sqli-labs靶场第二关less-2 本次测试在虚拟机搭建靶场,从主机测试 1、输入?id1和?id2发现有不同的页面回显 2、判断注入类型 http://192.168.128.3/sq/Less-2/?id1’ 从回显判断多一个‘ ,预测可能是数字型注入 输入 http://192.168.128.3/sq/Less…...
Ruby XML, XSLT 和 XPath 教程
Ruby XML, XSLT 和 XPath 教程 1. 引言 Ruby 是一种动态、开放源代码的编程语言,广泛用于网页开发、数据分析和各种自动化任务。在处理 XML(可扩展标记语言)时,Ruby 提供了强大的库和工具,使得解析、转换和提取 XML 数据变得简单高效。本教程将介绍如何使用 Ruby 来处理…...
attain和obtain区别
一、语法问题解答 attain:主要用作及物动词,表示“达到,得到,实现”,通常用于指经过努力达到某种目标、水平或状态,其宾语多为抽象名词,如目标、理想、成就等。它强调通过不懈努力实现某种…...
◇【code】PPO: Proximal Policy Optimization
整理的代码库:https://github.com/Gaoshu-root/Code-related-courses/tree/main/RL2024/PPO OpenAI 文档 —— PPO-Clip OpenAI 文档 界面链接 PPO: on-policy 算法、适用于 离散 或 连续动作空间。可能局部最优 PPO 的动机与 TRPO 一样:…...
Spring Boot 进阶-浅析SpringBoot中如何完成数据校验
在实际开发中,我们经常会遇到接口数据校验的问题。例如在用户输入手机号、或者是身份证号的时候,我们就需要校验手机号或者身份证号是否输入正确。当然这样的校验在前端页面输入的时候就可以完成。 但是对于直接调用接口的情况则不能通过调用方来进行判断,这就需要我们在Spr…...
◇【论文_20181020 v6】广义优势估计器 (generalized advantage estimator, GAE)
https://arxiv.org/abs/1506.02438 ICLR 2016 加州伯克利 电子工程与计算机科学系 High-Dimensional Continuous Control Using Generalized Advantage Estimation 文章目录 摘要1 引言2 预备知识3 优势函数估计4 解释为 奖励设计reward shaping5 价值函数估计6 实验6.1 策略优…...
JAVA后端项目须知
Eureka服务发现框架 Eureka是一个服务发现框架,由Netflix开发,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。12 Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一…...
Java设计模式——适配器模式
目录 模式动机 模式定义 模式结构 代码分析 模式分析 实例 优点 缺点 适用环境 模式应用 模式扩展 总结 模式动机 在软件开发过程中,经常会遇到需要使用已有类的功能,但这些类的接口不符合当前系统的需求,或者需要将不同的类的接…...
docker compose入门6—如何挂载卷
在 Docker Compose 中,可以通过 volumes 字段将宿主机的文件或目录挂载到容器中。这样可以实现数据持久化、共享数据或配置等。以下是一些常见的挂载方式和示例。 1. 挂载单个文件 如果你想将宿主机上的一个特定文件挂载到容器中,可以使用以下格式&…...
linux 环境下 docker 镜像获取失败, 重新设置docker镜像下载地址
1.查询镜像地址 https://hub.atomgit.com/repos/amd64/openjdk 2.docker file FROM hub.atomgit.com/amd64/openjdk:21-rc-jdk COPY xxxx.jar xxxx.jar EXPOSE xxxxx ENTRYPOINT ["java","-jar","-Xmx200M","-agentlib:jdwptransportdt_…...
【React】setState 是怎么记住上一个状态值的?
在 React 中,setState 通过 React 内部的状态管理机制来记住上一个状态值。即使每次组件重新渲染时,函数组件会被重新执行,React 仍能通过其内部的状态管理系统保持和追踪组件的状态变化。下面详细解释其工作原理: 1. setState 的…...
linux批量删文件
在 Linux 中,可以使用命令行工具来批量删除文件。以下是一些常用的方法: 使用 rm 命令 rm 是一个用于删除文件和目录的命令。使用此命令时应谨慎,因为删除操作是不可逆的。 删除特定类型的文件 例如,要删除当前目录下所有的 .tx…...
Kubernetes(K8s)的简介
一、Kubernetes的简介 1 应用部署方式演变 在部署应用程序的方式上,主要经历了三个阶段: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为应…...
线性查找法 ← Python实现
【线性查找法】 线性查找法顺序地将关键元素 key 和列表中的每一个元素进行比较。它连续这样做,直到这个关键字匹配列表中的某个元素,或者在没有找到匹配元素时已经查找完整个列表。如果找到一个匹配元素,那么线性查找将返回匹配在列表中的下…...
view deign 和 vue2 合并单元格的方法
1.vue版本和view design 版本 {"vue": "^2.6.11","view-design": "^4.7.0", }2.Data中定义数据 spanArr: [], // 某一列下需要合并的行数 pos: 0// 索引// 注意点: 在获取列表前,需要重置 this.spanArr [] 注…...
Arduino UNO R3自学笔记16 之 Arduino的定时器介绍及应用
注意:学习和写作过程中,部分资料搜集于互联网,如有侵权请联系删除。 前言:学习定时器的功能。 1.定时器介绍 定时器也是一种中断,属于软件中断。 它就像一个时钟,可以测量事件的时间间隔。 比如早…...
鸟类数据集,鸟数据集,目标检测class:bird,共一类13000+张图片yolo格式(txt)
鸟类数据集,鸟数据集,目标检测class:bird,共一类13000张图片yolo格式(txt) 鸟类数据集,鸟数据集,目标检测 class:bird,共一类 13000张图片 yolo格式(txt) 鸟…...
透明物体的投射和接收阴影
1、让透明度测试Shader投射阴影 (1)同样我们使用FallBack的形式投射阴影,但是需要注意的是,FallBack的内容为:Transparent / Cutout / VertexLit,该默认Shader中会把裁剪后的物体深度信息写入到 阴影映射纹…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
