微服务应用API端点自动注册

微服务应用注册的注册可以采用Nacos或者Consul等服务注册和配置中心,但无法实现微服务端点的自动注册。典型的场景比如,我开发一个用户管理的微服务应用,其中需要暴露的API包括:
/users,GET,查询所有用户。
/userpri/{id} , GET,获取用户权限
/userdept/{id}, GET,获取用户部门
………………(可能还有很多)
那么当我在对微服务应用部署的时候,我同时希望这些API快速的注册到网关的API库中,可实现网关对于API的快速代理配置。根据需求,我们大致整理一下实现的逻辑,以Springboot和Kong网关为例:
1、 SpringBoot部署启动
2、 搜索代码中暴露的所有API端点
3、 调用网关的注册API服务(包括鉴权认证后注册,控制未授权的应用不可随意注册API)
4、 生成kong网关的API注册库和API组合库
5、 Kong管理平台选择API注册库中的API快速生成业务服务(生成业务服务时需要考虑上游服务的配置,因为kong网关的上游服务可以实现负载均衡和健康检查,通过自动匹配上游服务的Target,自动识别并设置业务服务的Host属性,可实现网关代理后服务的负载均衡和健康检查)。
下面我们一步步来实现:
1、 SpringBoot在启动时会调用CommandLineRunner的方法,因此我们在部署启动后识别程序中API端点的代码放在CommandLineRunner的实现中。但识别API端点仅仅通过@RequestMapping标签能拿到的信息有限,因此我在Springboot中融入了Swagger,Swagger框架能更好的用来定义REST服务并生成相关文档,可以说从代码层面解决了API接口文档和代码变更导致的不一致问题。容易Swagger之后,可通过Swagger提供的API来识别整个微服务应用对外暴露的API端点。Swagger提供的核心API如下:
 /swagger-resources 查看有多少Controller分组。
 /v2/api-docs?group=controller 获取每个分组的API接口详细信息,包含各个实体的definitions。
2、 kong网关暴露注册API供SpringBoot应用部署时自动注册用,这里我使用了kong的管理平台实现。该API包含了鉴权获取Token,将注册的API写入API注册库。
以上第一步中,我已将整个注册的代码打包封装好,之后新开发的Springboot类的程序只需引用相应的代码包,并执行相关参数即可实现自动注册,Maven包已放入Github,大家可以下载查看。
源码:https://github.com/wanzhetao/microservice
JAR包: https://github.com/wanzhetao/microstore
 程序中添加依赖:

com.microservice
serviceRegister
1.0.0

 增加红色注解,扫描引入的Maven包中的CommandLineRunner:
@SpringBootApplication
@EnableSwagger2
@MapperScan(“org.spring.springboot.dao”)
@ComponentScan({“org.spring.springboot”,“com.microservice.serviceRegister”})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
 环境变量的配置文件增加:

kong 远程注册必备参数

kong.loginaddr=http://127.0.0.1:1338/login
kong.loginuser=konga
kong.loginpass=198071
kong.registeraddr=http://127.0.0.1:1338/apireg/registerApi
swagger.resources=/swagger-resources
注册API的例子源码:https://github.com/wanzhetao/personcontroller/tree/master
3、 启动后我们查看启动日志,标识注册成功:
在这里插入图片描述

4、 然后到kong的管理平台查看API注册库:
在这里插入图片描述

5、 选择API注册库,快速生成kong的业务服务:
在这里插入图片描述
在这里插入图片描述

这里我们看到IP和端口已经被自动处理成了主机地址,主机地址为kong网关配置的上游服务的Target目标,程序中我做了优化,能将API的IP和端口与上游服务的Target进行对比,并用主机地址成功替换,以后服务的负载均衡和健康检查都可以基于主机来实现了。关于kong的上游服务的健康检查配置将在后面再详细阐述。
顺便再提以下亮点:
 目前API注册做了属性组合的唯一性校验,如果API端点服务有变化,但唯一校验的属性未变,则注册时不是新增而是自动更新API注册库中的API.
 API的网关代理往往可能是多个API形成一个代理服务,因此API注册库还需进一步识别并分组,比如:
/api/person GET
/api/person/{id} DELETE
这两个可能最后在kong网关代理后就是一个服务,包含了GET/DELETE多种Method而已,因此为了更好的实现快速接入kong,必须对原生的API端点进行分组,再来做代理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值