SpringCloud-Knife4j文档聚合

在微服务架构下,如果给每个微服务都配置文档,那么每个微服务的接口文档都有自己独立的访问地址,这样要一个个打开每个微服务的文档非常麻烦。一般我们会采用聚合的办法,将所有微服务的接口整合到一个文档中,具体做法有2种:

  • 第1种:采用Knife4j官方提供的knife4j-aggregation-spring-boot-starter,
  • 第2种:在网关中手动配置聚合。

使用knife4j-aggregation-spring-boot-starter

1)新建聚合文档的微服务doc-service,并添加依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-aggregation-spring-boot-starter</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
</dependencies>

2)做如下配置:

spring:application:name: doc-servicecloud:nacos:discovery:server-addr: localhost:8848
knife4j:enableAggregation: truenacos:enable: true  # 开启Nacos模式serviceUrl: http://localhost:8848/nacos # Nacos注册中心地址routes:- name: 用户服务nacos  #微服务在聚合文档中的名称serviceName: user-service # 微服务的服务名location: /v2/api-docs # 微服务文档资源路径- name: 订单服务nacosserviceName: order-servicelocation: /v2/api-docs
#  cloud:
#    enable: true
#    routes:
#      - name: 用户服务cloud  #微服务在聚合文档中的名称
#        uri: localhost:8082 # 微服务的http地址
#        location: /v2/api-docs # 微服务文档资源路径
#      - name: 订单服务cloud
#        uri: localhost:8081
#        location: /v2/api-docs

3)测试
浏览器访问http://localhost:8888/doc.html即可切换查看不同微服务的接口文档:
在这里插入图片描述

手动配置Gateway聚合

1)网关添加knife4j依赖

<dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency></dependencies>

2)网关中添加获取swagger分组的接口

@RestController
public class SwaggerHandler {private final SwaggerResourcesProvider swaggerResources;@Autowiredpublic SwaggerHandler(SwaggerResourcesProvider swaggerResources) {this.swaggerResources = swaggerResources;}/*** Swagger资源配置,微服务中这各个服务的api-docs信息*/@GetMapping("/swagger-resources")public Mono<ResponseEntity> swaggerResources() {return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));}
}/*** Swagger资源配置*/
@Slf4j
@Component
@Primary
@RequiredArgsConstructor
public class SwaggerResourceConfig implements SwaggerResourcesProvider {private final RouteLocator routeLocator;/*** swagger2默认的url后缀*/private static final String SWAGGER2_URL = "/v2/api-docs";/*** 网关应用名称*/@Value("${spring.application.name}")private String gatewayName;@Overridepublic List<SwaggerResource> get() {List<SwaggerResource> resources = new ArrayList<>();Map<String, String> servers = new HashMap<>();// 1.获取路由 Uri中的 Host 作为服务名,把路由id作为请求路径,这里要确保路由id与路由path前缀一致routeLocator.getRoutes().filter(route -> route.getUri().getHost() != null).filter(route -> !gatewayName.equals(route.getUri().getHost())).subscribe( r -> servers.put(r.getUri().getHost(), r.getId()));// 2.创建自定义资源servers.forEach((name, path) -> {// 创建Swagger 资源SwaggerResource swaggerResource = new SwaggerResource();// 设置访问地址swaggerResource.setUrl("/" + path + SWAGGER2_URL);// 设置名称swaggerResource.setName(name);swaggerResource.setSwaggerVersion("3.0.0");resources.add(swaggerResource);});return resources;}
}

3)网关中正常配置路由转发规则

spring:application:name: gatewaycloud:nacos:discovery:server-addr: localhost:8848gateway:routes: #配置路由路径- id: user-serviceuri: lb://user-servicepredicates:- Path=/user-service/**filters:- StripPrefix=1- id: order-serviceuri: lb://order-servicepredicates:- Path=/order-service/**filters:- StripPrefix=1

4)测试
浏览器访问localhost:8080/doc.html,即可切换查看不同微服务的接口文档:
在这里插入图片描述

总结

2种方式都可以实现文档聚合的效果,显然网关中手动做聚合会更方便,因为不需要额外启动一个专门做文档聚合的微服务。完整的源码下载:聚合文档https://github.com/xjs1919/enumdemo/tree/master/gateway-knife4j

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

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

相关文章

web前端项目-五子棋【附源码】

五子棋&#xff08;人机对弈&#xff09; 本项目【五子棋】是一款人机对弈的策略型棋类游戏。可以选择落子方&#xff1b;游戏难度和是否显示落子次序。游戏双方分别使用黑白两色的棋子&#xff0c;在棋盘直线与横线的交叉点上进行对弈。五子棋可以促进大脑发育、提高思维能力…

openlayers+vue实现缓冲区

文章目录 前言一、准备二、初始化地图1、创建一个地图容器2、引入必须的类库3、地图初始化4、给地图增加底图 三、创建缓冲区1、引入需要的工具类库2、绘制方法 四、完整代码总结 前言 缓冲区是地理空间目标的一种影响范围或服务范围,是对选中的一组或一类地图要素(点、线或面…

华为三层交换机之基本操作

Telnet简介 Telnet是一个应用层协议,可以在Internet上或局域网上使用。它提供了基于文本的远程终端接口&#xff0c;允许用户在本地计算机上登录到远程计算机&#xff0c;然后像在本地计算机上一样使用远程计算机的资源。Telnet客户端和服务器之间的通信是通过Telnet协议进行的…

[蓝桥杯]真题讲解:冶炼金属(暴力+二分)

蓝桥杯真题视频讲解&#xff1a;冶炼金属&#xff08;暴力做法与二分做法&#xff09; 一、视频讲解二、暴力代码三、正解代码 一、视频讲解 视频讲解 二、暴力代码 //暴力代码 #include<bits/stdc.h> #define endl \n #define deb(x) cout << #x << &qu…

C语言第十弹---函数(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 函数 1、函数的概念 2、库函数 2.1、标准库和头文件 2.2、库函数的使用方法 2.2.1、功能 2.2.2、头文件包含 2.2.3、实践 2.2.4、库函数文档的⼀般格式 …

PWM调光 降压恒流LED芯片FP7127:为照明系统注入新能量(台灯、GBR、调光电源、汽车大灯)

目录 一、降压恒流LED芯片FP7127 二、降压恒流LED芯片FP7127具有以下特点&#xff1a; 三、降压恒流LED芯片FP7127应用领域&#xff1a; LED照明和调光的新纪元随着LED照明技术的不断发展&#xff0c;人们对于照明调光的需求也越来越高。PWM调光技术作为一种常用的调光方法&…

RUST笔记:candle使用基础

candle介绍 candle是huggingface开源的Rust的极简 ML 框架。 candle-矩阵乘法示例 cargo new myapp cd myapp cargo add --git https://github.com/huggingface/candle.git candle-core cargo build # 测试&#xff0c;或执行 cargo ckeckmain.rs use candle_core::{Device…

设计模式—行为型模式之责任链模式

设计模式—行为型模式之责任链模式 责任链&#xff08;Chain of Responsibility&#xff09;模式&#xff1a;为了避免请求发送者与多个请求处理者耦合在一起&#xff0c;于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链&#xff1b;当有请求发生时&am…

wsl下安装ros2问题: Unable to locate package ros-humble-desktop 解决方案

❗ 问题 在wsl&#xff08;Ubuntu 22.04版本&#xff09;下安装ros的过程中&#xff0c;在执行命令 $ sudo apt install ros-humble-desktop一直弹出报错&#xff1a;Unable to locate package ros-humble-desktop 前面设置编码和添加源的过程中一直没有出现其他问题&#…

Docker 配置 Gitea + Drone 搭建 CI/CD 平台

Docker 配置 Gitea Drone 搭建 CI/CD 平台 配置 Gitea 服务器来管理项目版本 本文的IP地址是为了方便理解随便打的&#xff0c;不要乱点 首先使用 docker 搭建 Gitea 服务器&#xff0c;用于管理代码版本&#xff0c;数据库选择mysql Gitea 服务器的 docker-compose.yml 配…

基于Java+SpringBoot+vue+elementui的校园文具商城系统详细设计和实现

基于JavaSpringBootvueelementui的校园文具商城系统详细设计和实现 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目录 基于JavaSpringBootvueelementui的校园文具商城系统详细设计和实现前言介绍&#xff1a;系统设计&#xff1a;系统开发流程用户登录流程系统操作流程 功能…

剧本杀小程序开发:打造沉浸式推理体验

随着社交娱乐形式的多样化&#xff0c;剧本杀逐渐成为年轻人喜爱的聚会活动。而随着技术的发展&#xff0c;剧本杀小程序的开发也成为了可能。本文将探讨剧本杀小程序开发的必要性、功能特点、开发流程以及市场前景。 一、剧本杀小程序开发的必要性 剧本杀是一种角色扮演的推…

【七、centos要停止维护了,我选择Almalinux】

搜索镜像 https://developer.aliyun.com/mirror/?serviceTypemirror&tag%E7%B3%BB%E7%BB%9F&keywordalmalinux dvd是有界面操作的&#xff0c;minimal是最小化只有命里行 镜像下载地址 安装和centos基本一样的&#xff0c;操作命令也是一样的&#xff0c;有需要我…

Unity配置表xlsx/xls打包后读取错误问题

前言 代码如下&#xff1a; //文本解析private void ParseText(){//打开文本 读FileStream stream File.Open(Application.streamingAssetsPath excelname, FileMode.Open, FileAccess.Read, FileShare.Read);//读取文件流IExcelDataReader excelRead ExcelReaderFactory…

idea中debug Go程序报错error layer=debugger could not patch runtime.mallogc

一、问题场景 在idea中配置了Go编程环境&#xff0c;可以运行Go程序&#xff0c;但是无法debug&#xff0c;报错error layerdebugger could not patch runtime.mallogc: no type entry found, use ‘types’ for a list of valid types 二、解决方案 这是由于idea中使用的d…

SpringBoot之分页查询的使用

背景 在业务中我们在前端总是需要展示数据&#xff0c;将后端得到的数据进行分页处理&#xff0c;通过pagehelper实现动态的分页查询&#xff0c;将查询页数和分页数通过前端发送到后端&#xff0c;后端使用pagehelper&#xff0c;底层是封装threadlocal得到页数和分页数并动态…

第14次修改了可删除可持久保存的前端html备忘录:增加一个翻牌钟,修改背景主题:现代深色

第14次修改了可删除可持久保存的前端html备忘录&#xff1a;增加一个翻牌钟&#xff0c;修改背景主题&#xff1a;现代深色 备忘录代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta http-equiv"X…

11k+ star 一款不错的笔记leanote安装教程

特点 支持普通模式 支持markdown模式 支持搜索 安装教程 1.安装mongodb 1.1.下载 #下载 cd /opt wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.1.tgz 1.2解压 tar -xvf mongodb-linux-x86_64-3.0.1.tgz 1.3配置mongodb环境变量 vim /etc/profile 增…

LlamaIndex和LangChain谁更胜一筹?

▼最近直播超级多&#xff0c;预约保你有收获 今晚直播&#xff1a;《LlamaIndex构建应用案例实战》 —1— LlamaIndex OR LangChain&#xff1f; LangChain 和 LlamaIndex 都是 AGI 时代新的应用程序开发框架&#xff0c;到底有什么区别&#xff1f; 第一、LangChain 是一个围…

【shell-10】shell实现的各种kafka脚本

kafka-shell工具 背景日志 log一.启动kafka->(start-kafka)二.停止kafka->(stop-kafka)三.创建topic->(create-topic)四.删除topic->(delete-topic)五.获取topic列表->(list-topic)六. 将文件数据 录入到kafka->(file-to-kafka)七.将kafka数据 下载到文件-&g…