前言:总所周知项目开发接口测试需要knife4j,但是,微服务架构中微服务很多,模块地址很多,需要统一管理api测试,就需要聚合在网关统一调用,本章,就说明如何通过网关聚合使用knife4j。
1、网关集成knife4j
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-gateway-spring-boot-starter</artifactId><version>4.5.0</version></dependency>
2、网关核心配置
网关的路由配置
id: order_route #路由的唯一标识,路由到orderuri: lb://system-order #需要转发的地址 lb:使用nacos本地负载均衡策略#断言规则 用于路由规则匹配predicates:- Path=/order/**filters:- StripPrefix=1#这里的意思是去掉路径第一个
注意了:StripPrefix=1非常重要,不然链接会多一个order会报404错
以下网关的knife4j配置
# knife4j的网关聚合配置 文档地址:http://{gateway.host}:{gateway.port}/doc.html
# 聚合swagger文档
knife4j:gateway:# 是否开启Knife4j网关聚合功能(生产环境不建议开启)enabled: true# 排序规则(tag/operation排序自4.2.0版本新增)# 取值:alpha-默认排序规则,官方swagger-ui默认实现,order-Knife4j提供的增强排序规则,开发者可扩展x-order,根据数值来自定义排序tags-sorter: orderoperations-sorter: order# 指定聚合的策略(默认手动配置(manual),服务发现(discover))strategy: manual# 个性化定制的部分子服务分组情况routes:- name: order模块# 服务名service-name: system-order# 真实子服务访问url地址-提供OpenAPI的文档url:/order/v3/api-docs?group=default# 路由前缀,兼容OpenAPI3规范在聚合时丢失contextPath属性的异常情况,由开发者自己配置contextPath,Knife4j的前端Ui做兼容处理,与url属性独立不冲突,仅OpenAPI3规范聚合需要,OpenAPI2规范不需要设置此属性,默认为(apiPathPrefix)context-path: /order# 排序order: 1
注意了:strategy:manual是手动配置的方式。手动配置必须这加**/order**/v3/api-docs?group=default 这里的加order(我的服务路径)的目的是因为路由转发的时候,会自动加服务路径。如果,不加order会访问404错误。因为/v3/api-docs是在根目录的。
以下是自动通过服务发现来配置strategy,自动配置会自动加order
strategy: discover# 服务发现
discover:# OpenAPI 3.0 规范version: openapi3# 开启服务发现 默认:trueenabled: true# 默认排序 默认:0default-order: 0# 排除的服务名 默认:为空(建议排除网关服务)excluded-services: ${spring.application.name}
3、微服务依赖添加
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.5.0</version></dependency>
4、微服务yml配置
# springdoc-openapi项目配置
springdoc:swagger-ui:path: /swagger-ui.htmltags-sorter: alphaoperations-sorter: alphaapi-docs:path: /v3/api-docsgroup-configs:- group: 'default'paths-to-match: '/**'packages-to-scan: com.x'x'x.xxx.controller
# knife4j的增强配置,不需要增强可以不配
knife4j:enable: truesetting:language: zh_cn
微服务里面不用加order
总结:路由转发,就算网关配置path /**,也会自动加order名。