盘古开发框架下实现微服务网关的缺省姿势为基于 pangu-web 模块的传统接口调用模式,具体请参考文档:如何发布微服务 (API 网关)。本文提供另外一种通过集成Apache ShenYu 实现网关泛化调用 Dubbo 服务将其发布为 HTTP 接口的可选方法。
ShenYu 网关介绍
ShenYu 网关基于 Webflex 非阻塞模型通过泛化调用后端 Dubbo 服务。依赖 Netty 不需要 Servlet 容器,不需要引入服务接口包即可通过 Dubbo 泛化调用服务接口的方式就可以将后端 Dubbo 服务转换为 HTTP API。同时网关支持鉴权、动态限流、熔断、防火墙、灰度发布等。
相关名词解释
- shenyu-admin
网关插件和元数据信息配置管理后台。独立 JAR,需要单独部署。 - shenyu-gateway
网关模块,代理 Http 请求,泛化调用后端 Dubbo 服务。此模块负责接收 Http 请求。 - 数据同步
数据同步是指在 ShenYu-Admin 后台操作数据以后,使用何种策略将数据同步到 ShenYu Gateway 网关模块。ShenYu 当前支持 ZooKeeper、WebSocket、Http 长轮询、Nacos 、Etcd 和 Consul 进行数据同步。盘古开发使用的是 WebSocket 方式进行数据同步。 - 插件
ShenYu 使用插件化设计思想,实现插件的热插拔。内置丰富的插件,包括 RPC 代理、熔断和限流、权限认证、监控等等。 - 选择器
每个插件可设置多个选择器,对流量进行初步筛选。 - 规则
每个选择器可设置多个规则,对流量进行更细粒度的控制。
网关调用结构图
ShenYu 网关实战
ShenYu 网关提供的功能非常多,这里我们只关注 HTTP 请求代理功能。即代理前端 HTTP 请求,通过 Dubbo 泛化调用后端 Dubbo 服务。
安装相关模块
- 盘古 Parent
<parent>
<groupId>com.gitee.pulanos.pangu</groupId>
<artifactId>pangu-parent</artifactId>
<version>latest.version.xxx</version>
<relativePath/>
</parent>
- 基础模块
<dependency>
<groupId>com.gitee.pulanos.pangu</groupId>
<artifactId>pangu-spring-boot-starter</artifactId>
</dependency>