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 的管理通常包括以下几个方面:

  1. 创建与初始化:当用户首次访问应用时,服务器为其创建一个新的 Session,并生成一个唯一的 Session ID。

  2. 存储数据:开发者可以在 Session 中存储各种数据,如用户信息、应用状态等,这些数据在用户的多个请求中保持可用。

  3. 过期管理:Session 会设定一个过期时间,超过这个时间后,Session 将失效,存储的数据也会被清除。这可以帮助节省资源和提升安全性。

  4. 安全性:为了保护 Session 数据,常用的方法包括加密 Session ID、使用 HTTPS 等。

  5. 结束与销毁:用户登出时或 Session 过期时,服务器会销毁该 Session,以释放资源。

解决 cookie 跨路径问题

server:address: 0.0.0.0port: 8104servlet:context-path: /api/judge# cookie 30 天过期session:cookie:max-age: 2592000path: /api

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

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

相关文章

面试指南1009

redis中存储对象使用哪种数据结构&#xff1f;Mybatis中如何实现级联查询的&#xff0c;比如说emp表和dept表Spring中的两大核心是什么&#xff1f;你是如何处理数据库表字段与数据库字段不一致的&#xff1f;Myabtis中一级缓存与二级缓存有了解吗&#xff1f;AOP中有哪些属性&…

百度文心智能体平台开发萌猫科研加油喵

百度文心智能体平台开发萌猫科研加油喵 在科研的道路上&#xff0c;研究生们常常面临着巨大的压力和挑战。为了给这个充满挑战的群体带来一些鼓励和温暖&#xff0c;我借助百度文心智能体平台开发了一个独特的智能体 《萌猫科研加油喵》。 一、百度文心智能体平台介绍 百度文…

k8s 的网络通信

目录 1 k8s通信整体架构 2 flannel 网络插件 2.1 flannel 插件组成 2.2 flannel 插件的通信过程 2.3 flannel 支持的后端模式 3 calico 网络插件 3.1 calico 简介 3.2 calico 网络架构 3.3 部署 calico 1 k8s通信整体架构 k8s通过CNI接口接入其他插件来实现网络通讯。目前比较…

程序人生-2024我的个人总结

可能现在写个人总结比较早&#xff0c;但是眼看着还有三个月&#xff0c;今年就过去了&#xff0c;所以决定提前写写&#xff0c;今年对于我来说是不平凡的一年&#xff0c;先是加薪&#xff0c;之后求婚&#xff0c;以为快要走上人生巅峰的时候&#xff0c;被裁员&#xff0c;…

DOM对象

DOM概述 官方定义&#xff1a; DOM是W3C制定的一个规范(标准)&#xff0c;(Document Object Model&#xff0c;文档对象模型)&#xff0c;是提供了访问和操作网页中各元素的方法&#xff0c;让程序可以动态的修改或改变网页元素的内容、样式、结构。 DOM是W3C制定的一个规范…

PostgreSQL常用字符串函数

PostgreSQL 提供了丰富的字符串函数&#xff0c;可以对字符串进行操作、处理和格式化。以下是一些常用的字符串函数及其示例&#xff1a; 1. LENGTH() - 计算字符串的长度 SELECT LENGTH(Hello World); -- 返回 112. CONCAT() - 拼接字符串 将多个字符串连接在一起。 SELE…

回南天,即使没有除湿机,也能除湿

前几天收到网友私信&#xff0c;询问烘干机干衣吹热风&#xff0c;这个比较好理解&#xff0c;热气吹到衣服上加速水分蒸发。但空调除湿为什么不吹热风了&#xff0c;而吹冷风呢&#xff1f;以及除湿机的原理等的问题。 因为我在南京总是觉得干&#xff0c;加湿器24小时不停&a…

JAVA就业笔记3——第一阶段(3)

课程须知 A类知识&#xff1a;工作和面试常用&#xff0c;代码必须要手敲&#xff0c;需要掌握。 B类知识&#xff1a;面试会问道&#xff0c;工作不常用&#xff0c;代码不需要手敲&#xff0c;理解能正确表达即可。 C类知识&#xff1a;工作和面试不常用&#xff0c;代码不…

The 2024 ICPC Kunming Invitational Contest K. Permutation(交互 期望)

在知乎内查看 题目 思路来源 题解 首先特判n1的情况&#xff0c;其实也不用问 分治&#xff0c;假设当前解决到[l,r]&#xff0c;要递归的vector是x&#xff0c; 维护两个vector L、R&#xff0c;代表下一步要在[l,mid]和[mid1,r]分治的vector 每次将x random_shuffle后&a…

易基因:J Hazard Mater/IF12.2:RRBS揭示农药诱导胰腺全基因组DNA甲基化跨代改变与代谢表型相关

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 人造化学品的不当使用会对生物多样性和人类健康构成重大威胁&#xff0c;某些化学物质&#xff08;如农药&#xff09;可能通过表观遗传机制&#xff08;如DNA甲基化&#xff09;对代谢健…

如何批量找到企业联系电话

在拓展业务的过程中&#xff0c;找到企业的联系电话是必不可少的一步。然而&#xff0c;手动查找不仅耗时费力&#xff0c;效率也低下。对于需要批量获取客户信息的销售人员或企业来说&#xff0c;寻找一种快速、精准的方式批量获取企业联系电话显得尤为重要。本文将为你介绍几…

MPLS LDP协议

文章目录 LDP标签分发协议工作原理LDP应用倒数第二跳弹出 LDP标签分发协议 基于FEC自动分配标签构建LSP用于建立动态LSPLDP报文头部结构信息类型 工作原理 LDP工作过程 发送Hello消息用于发现邻居&#xff1b;UDP发送LSR_1主动发起并建立TCP连接&#xff1b;TCP进行建立主动方发…

怎么利用商品详情API接口实现数据获取与应用?

在当今数字化的商业时代&#xff0c;高效获取和利用商品数据对于企业和开发者来说至关重要。商品详情 API 接口为我们提供了一种便捷的方式来获取丰富的商品信息&#xff0c;从而实现各种有价值的应用。本文将深入探讨如何利用商品详情 API 接口实现数据获取与应用。 一、商品…

STM32 HAL库UART查询方式实例

本文中介绍USART编程涵盖了三种主要方法&#xff0c;详细介绍STM32F407微控制器结合HAL库&#xff0c;通过UART的查询方式来实现一个实用的密码验证程序。提示用户键入一个字符作为密码。只有当用户精准地输入字符6时&#xff0c;系统才会反馈“密码正确”的确认信息。反之&…

@JsonAlias和@JSONField序列化和反序列化

com.fasterxml.jackson.annotation.JsonAlias("expressCode") com.alibaba.fastjson.annotation.JSONField(name "expressCode") 这两个注解分别属于不同的JSON序列化框架&#xff1a;Jackson 和 Fastjson&#xff0c;它们的用途是处理JSON字段的名称映射…

【重学 MySQL】五十六、位类型

【重学 MySQL】五十六、位类型 定义赋值与使用注意事项应用场景 在MySQL数据库中&#xff0c;位类型&#xff08;BIT类型&#xff09;是一种用于存储位字段值的数据类型。 定义 BIT(n)表示n个位字段值&#xff0c;其中n是一个范围从1到64的整数。这意味着你可以存储从1位到64…

数据库镜像拷贝还原--Oracle数据库实例启动报错

现象描述&#xff1a; 从服务器&#xff0c;在未停数据库服务情况下&#xff0c;拍快照还原到另一台服务器&#xff0c;启动数据库报错。 过程记录&#xff1a; 一、启动数据库提示&#xff1a;ORA-01102 报错信息&#xff1a; ORA-01102: cannot mount database in EXCLUSI…

requestidlecallback与分时函数

前言 我们知道GUI 渲染线程与 JS 引擎线程是互斥的。当JS程序执行时间过长&#xff0c;会阻塞页面渲染和事件响应。那么针对一些优先级较低的任务&#xff0c;我们可以利用分时函数在主线程空闲时执行&#xff0c;减少卡顿。其本质是将一个长任务拆分成数个短任务&#xff0c;…

macos php开发环境之macport安装的php扩展安装,php常用扩展安装,port中可用的所有php扩展列表

macos中&#xff0c;我们使用了port 安装了php后&#xff0c;默认只带有php基本的核心扩展的&#xff0c; 如果需要使用其他的扩展&#xff0c;如 redis, https&#xff0c; xdebug等扩展就需要我们手动来安装对应的扩展。 macos php开发环境 macport安装的php的方法见macos 中…

国产工具链GCKontrol-GCAir助力控制律开发快速验证

前言 随着航空领域技术的不断发展&#xff0c;飞机的飞行品质评估和优化成为了航空领域的一个重要任务&#xff0c;为了确保飞行器在各种复杂条件下的稳定性&#xff0c;控制律设计过程中的模型和数据验证需要大量仿真和测试。 本文将探讨基于世冠科技的国产软件工具链GCKont…