从0开始搭建微服务架构特别篇SpringCloud网关聚合knife4j
前言:总所周知项目开发接口测试需要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/**
注意了:这里path如果配置了order路径,那么下面knife4就要相应加order。
以下网关的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
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配置
注意:这里的**/order** 是因为网关配置了order,要不然路由会自动加入order访问404出错,这里是定义微服务的doces地址。
# springdoc-openapi项目配置
springdoc:swagger-ui:path: /order/swagger-ui.htmltags-sorter: alphaoperations-sorter: alphaapi-docs:path: /order/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
总结:网关的path至关重要,和springdoc配置knife4j 的路由配置相关。