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.mzph.cn/news/648335.shtml

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

相关文章

DDColor:AI图像着色工具,优秀的黑白图像上色模型,支持双解码器!

前言 在数字图像处理领域&#xff0c;图像上色 一直是一个重要的课题。传统的图像上色方法通常需要人工干预&#xff0c;耗时且效果有限。 然而&#xff0c;随着深度学习技术的发展&#xff0c;自动图像上色模型逐渐成为了研究热点。 其中&#xff0c;DDColor 图像上色模型以…

vue3+elementPlus pc和小程序ai聊天文生图

websocket封装可以看上一篇文章 //pc端 <template><div class"common-layout theme-white"><el-container><el-aside><div class"title-box"><span>AI Chat</span></div><div class"chat-list&…

iOS推送通知

文章目录 一、推送通知的介绍1. 简介2. 通知的分类 二、本地通知1. 本地通知的介绍2. 实现本地通知3. 监听本地通知的点击 三、远程通知1. 什么是远程通知2. 为什么需要远程通知3. 远程通知的原理4. 如何做远程通知5. 远程通知证书配置6. 获取远程推送要用的 DeviceToken7. 测试…

代码随想录算法训练营第30天 | 回溯总结 + 3道Hard题目

今日任务 332.重新安排行程 51. N皇后 37. 解数独 总结 总结 回溯总结&#xff1a;代码随想录 回溯是递归的副产品&#xff0c;只要有递归就会有回溯&#xff0c;所以回溯法也经常和二叉树遍历&#xff0c;深度优先搜索混在一起&#xff0c;因为这两种方式都是用了递归。 …

《WebKit 技术内幕》学习之十三(1):移动WebKit

1 触控和手势事件 1.1 HTML5规范 随着电容屏幕的流行&#xff0c;触控操作变得前所未有的流行起来。时至今日&#xff0c;带有多点触控功能已经成为了移动设备的标准配置&#xff0c;基于触控的手势识别技术也获得巨大的发展&#xff0c;如使用两个手指来缩放应用的大小等。…

DAY11_(简易版)VUEElement综合案例

目录 1 VUE1.1 概述1.1.1 Vue js文件下载 1.2 快速入门1.3 Vue 指令1.3.1 v-bind & v-model 指令1.3.2 v-on 指令1.3.3 条件判断指令1.3.4 v-for 指令 1.4 生命周期1.5 案例1.5.1 需求1.5.2 查询所有功能1.5.3 添加功能 2 Element2.0 element-ui js和css和字体图标下载2.1 …

Vulnhub靶场DC-6

攻击机192.168.223.128 靶机192.168.223.134 主机发现:nmap -sP 192.168.223.0/24 端口扫描 nmap -sV -p- -A 192.168.223.134 开启了22 80端口&#xff0c;80是apache 2.4.25 先进入web界面看一下 用ip进不去&#xff0c;应该被重定向到wordy.com vim /etc/hosts 加上 19…

亚信安慧AntDB构建未来数据库典范

亚信安慧AntDB是一款数据库管理系统&#xff0c;它采用全球影响力大、社区繁荣、开放度高、生态增长迅速的PG内核。这款系统具有卓越的性能和稳定性&#xff0c;在全球范围内备受用户青睐。 与此同时&#xff0c;AntDB的社区也是充满活力的&#xff0c;用户可以在社区中交流经…

Vue中使用TypeScript:全面指南和最佳实践

🚀 欢迎来到我的专栏!专注于Vue3的实战总结和开发实践分享,让你轻松驾驭Vue3的奇妙世界! 🌈✨在这里,我将为你呈现最新的Vue3技术趋势,分享独家实用教程,并为你解析开发中的难题。让我们一起深入Vue3的魅力,助力你成为Vue大师! 👨‍💻💡不再徘徊,快来关注…

WebSocket服务端数据推送及心跳机制(Spring Boot + VUE):

文章目录 一、WebSocket简介&#xff1a;二、WebSocket通信原理及机制&#xff1a;三、WebSocket特点和优点&#xff1a;四、WebSocket心跳机制&#xff1a;五、在后端Spring Boot 和前端VUE中如何建立通信&#xff1a;【1】在Spring Boot 中 pom.xml中添加 websocket依赖【2】…

都学Python了,C++难道真的用不着了吗?

都学Python了&#xff0c;C难道真的用不着了吗&#xff1f; 在开始前我分享下我的经历&#xff0c;刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;两年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些【C 】学习方法和资料&#xff0c;让我不断提升自己…

单片机介绍

本文为博主 日月同辉&#xff0c;与我共生&#xff0c;csdn原创首发。希望看完后能对你有所帮助&#xff0c;不足之处请指正&#xff01;一起交流学习&#xff0c;共同进步&#xff01; > 发布人&#xff1a;日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…

关于axios给后端发送数据的问题

这里需要用的插件&#xff1a;qs.js&#xff0c;是前端给后端发送的数组&#xff0c;需要序列化所以要用到这个插件&#xff0c;这里就提取连接在这里&#xff0c;需要的自提&#xff0c;需要导如进来&#xff0c;别忘记了 链接&#xff1a;https://pan.baidu.com/s/1qyD8v9wfd…

拓展全球市场:静态代理IP成为跨境电商战略的关键工具

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

EIGRP实验

实验大纲 一、基本配置 1.构建网络拓扑结构图 2.路由器基本配置 3.配置PC 4.测试连通性 5.保存配置文件 二、配置EIGRP 1.查看路由表 2.配置EIGRP动态路由 3.查看路由器路由表 4.测试网络连通性 5.查看所有路由器的路由协议 6.保存配置文件 三、配置OSPF 1.配置…

SpringMVC-对静态资源的访问

1.工程中加入静态资源 在webapp下创建static文件夹&#xff0c;此文件夹专门放入静态资源 2.使项目可以处理静态资源的请求 在SpringMVC配置文件中添加以下语句 1.引入命名空间 xmlns:mvc"http://www.springframework.org/schema/mvc" xsi:schemaLocation“http…

Influxdb系列(二)influx Cli工具操作influxdb

一、安装并使用 influx CLI 客户端下载地址&#xff1a;https://docs.influxdata.com/influxdb/v2/tools/influx-cli/ [root192 bin]# tar -xvzf influxdb2-client-2.7.3-linux-amd64.tar.gz [root192 bin]# cp influx /usr/local/bin/二、客户端方式创建用户 相关的官网地址…

HNSW算法

From&#xff1a; HNSW算法(nsmlib/hnswlib)-CSDN博客HNSW算法的基本原理及使用 - 知乎 HNSW是一种广泛使用的ANN图索引结构&#xff0c;包括DiskANN、DF-GAS、SmartSSD等。本文档主要总结HNSW的结构与工作流程&#xff0c;便于后期研究其工作流程在迁移到CSD中存在的I/O问题…

JVM篇----第八篇

系列文章目录 文章目录 系列文章目录前言一、标记清除算法( Mark-Sweep)二、复制算法(copying)三、标记整理算法(Mark-Compact)前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分…

华媒舍:15种媒体发稿推广的创意理念与案例分析

媒体发稿已经成为推广知名品牌、产品与服务关键方式之一。怎样通过媒体发稿提升曝光度和吸引住受众却是一个挑战。下面我们就详细介绍15种创意理念和案例分析&#xff0c;帮助你更好地进行新闻媒体发稿推广。 1.造就日常生活小故事通过展示真实用户故事和感受&#xff0c;读者对…