分布式 API 网关
一般来说,API 网关应用于微服务场景,是其中的一个组件,针对整个应用宏观来看,处于客户端和服务端中间。
引入 API 网关有一系列的好处:
聚合服务端接口,为客户端提供相对统一的 API 和入口;
由于入口统一,能够提供安全,限流,缓存,日志,监控,重试,熔断等功能;
控制流量,比如负载均衡、蓝绿发布等功能放在这一层也是可以的。
Soul
github 地址:https://github.com/dromara/soul
官网:https://dromara.org/zh-cn/docs/soul/soul.html
soul 是一个异步的,高性能的,跨语言的,响应式的 API 网关,具有多协议支持,插件丰富等特点,本系列文章将对其源码进行深入的研读。
开始使用!启动 soul-admin 和 soul-bootstrap
打开 soul-admin 包下的 application.yml,修改其中的数据库配置设置为我们自己的数据库地址:
spring:datasource:url: jdbc:mysql://localhost:3306/soul?useUnicode=true&characterEncoding=utf-8username: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driver
访问 http://localhost:9095/ 默认用户名 admin,密码 123456 即可访问 admin 页面,如下图所示:
接下来启动 soul-bootstrap 模块即可进行 soul 的试用,我们可以启动自己的服务来交给 soul 进行代理,本文中演示 soul 源码中自带的测试用服务。
启动 soul-examples 模块下的 soul-examples-http,我们可以看到这个包下提供测试的类上都注解了 @SoulSpringMvcClient,启动后我们可以在 admin 的 divide 栏目中看到被代理的接口设置,如下图所示:
接下来,使用 GET 方式访问 http://localhost:9195/http/test/findByUserId,即可看到被代理接口的返回:
此时,我们也可以在 bootstrap 的控制台看到相应的输出:
至此,我们体验了 soul 作为 API 网关最基础的功能,即进行请求的转发。进一步的,在 divide 栏目也可以进行一些负载均衡的设置,读者朋友们可以开启两个服务自行进行试验。
产生兴趣继续探究吧
经过简单的试用,我们已经可以体会到 soul 的一些功能和特点,比如它的小侵入性,对于一个服务,最少仅需要一个注解即可被 soul 支持;再比如清晰直观的 admin 页面。接下来的一系列文章中,我将和大家一起,深入源码,看看这些功能都是怎么实现的。