springcloud整合knike4j聚合微服务接口文档
一、介绍
在使用微服务架构开发的过程中,由于每个微服务都是独立的,因此很多开发人员在提供接口文档时,针对每一个服务也提供了独立的接口文档,
在使用容器部署的环境中缺点也更加突出,本来每一个服务容器都是通过网关访问的,它自身的ip和端口号并不被暴露出去,但是在容器部署环境下,我们不得不将服务容器的端口与主机端口进行绑定,通过主机ip+端口号访问接口文档。
在微服务环境下,不同服务的接口都是经过网关gateway作为统一入口进行转发访问的,因此不同服务的接口文档也应该有一个统一的入口。
那么有没有合适的方案,通过统一的入口,将各个微服务的接口文档进行聚合呢?答案是有的。
- 方案一:通过网关对各个微服务的接口文档进行聚合。这样我们只需要通过访问网关就可以得到所有微服务的接口文档了。
- 方案二:通过独立的微服务(称为接口文档微服务),该服务从注册中心中获取其他微服务,然后我们通过访问接口文档微服务就可以得到所有微服务的接口文档了。
而且巧的是,**knife4j**已经帮我们把这两种方案都实现了,我们通过demo对这两种方案进行演示。
二、不使用聚合文档
新建两个微服务:
-
student-service
-
在pom中引入依赖
knife4j-spring-boot-starter
-
配置文件
-
新建
Knife4jConfiguration
配置文件,对knife4j进行配置 -
添加接口
BoyStudentController
和GirlStudentController
-
通过
http://localhost:8001/student/doc.html
访问接口文档
-
-
teacher-service
-
在pom中引入依赖
knife4j-spring-boot-starter
-
配置文件
-
新建
Knife4jConfiguration
配置文件,对knife4j进行配置 -
添加接口
ChinessTeacherController
和EnglishTeacherController
-
通过
http://localhost:8002/teacher/doc.html
访问接口文档
-
不同的服务需要不同的地址访问,在微服务环境下,如果还是这样而没有统一的入口,那前端同事可能早就吃你的鱼了。
三、gateway网关聚合接口文档
在微服务环境中,网关作为各个服务的统一入口。因此可以考虑把网关也作为各个服务接口文档的统一入口。同时注册中心也是必不可少的。
在student-service
和 teacher-service
两个服务的基础上,我们添加网关和注册中心,注册中心我们以eureka为例
1. 新建eureka注册中心微服务eureka-server
-
在pom中引入依赖
-
配置文件
-
启动类
-
访问注册中心,
http://localhost:9001/eureka/
2. 修改微服务
-
student-service
和teacher-service
微服务添加pom依赖 -
修改文档配置类
-
配置注册中心
-
每个微服务主启动添加注解
@EnableDiscoveryClient
。 -
启动
student-service
和teacher-service
微服务后查看eureka注册中心
3. 新建网关服务gateway-service
-
在pom中引入依赖
knife4j-spring-boot-starter
-
路由配置
-
文档聚合配置
-
资源配置
-
处理器配置
-
-
主启动类
-
打开eureka注册中心,查看网关是否注册成功
-
通过网关访问接口文档。
http://localhost:9002/doc.html
。在接口文档的左上角有个下拉框,里面是我们在网关中配置的路由,在下拉框选择不同的项目,可以看到不同微服务的接口文档。
四、使用独立的接口文档服务
前面我们介绍的是通过网关gateway聚合微服务接口文档,但这种方案对网关存在一定的侵入。下面我们介绍通过注册中心聚合微服务接口文档,
1. 新建接口文档微服务
-
pom文件添加依赖
-
配置文件
-
启动类
2. 启动接口文档微服务
启动服务后,通过该服务的ip和端口号,访问接口文档。如http://localhost:9003/knife4j/doc.html
。
可以看到,通过独立的服务聚合其他微服务接口文档这种方式更加简单,快速。
3.通过网关访问接口文档微服务
-
在网关的配置文件中设置路由
-
通过网关访问接口文档
地址:
http://localhost:9002/knife4j/doc.html
到此为止,微服务架构下聚合微服务接口文档的两种方式我们都介绍完了,
下期再见。
纸上得来终觉浅,绝知此事要躬行。
—————————我是万万岁,我们下期再见—————————