Apache ShenYu网关使用手册
- 1 介绍
- 1.1 概念
- 1.2 特性
- 1.3 架构图
- 2 运行
- 2.1 运行先决条件
- 2.1 本地运行
- 3 插件使用
- 3.1 ModifyResponse插件
- 3.1.1 插件名称
- 3.1.2 适用场景
- 3.1.3 插件功能
- 3.1.4 插件代码
- 3.1.5 如何使用插件
- 3.1.5.1 插件使用流程图
- 3.1.5.2 接入SpringBoot应用改造
- 3.1.5.3 启用插件
- 3.1.5.4 配置插件
- 3.1.5.5 接口调用
1 介绍
1.1 概念
Apache ShenYu它是Java原生API网关,用于服务代理、协议转换和API治理。
1.2 特性
服务代理: Support for Apache® Dubbo™, Spring Cloud, gRPC, Motan, SOFA, TARS, WebSocket, MQTT
安全: Sign, OAuth 2.0, JSON Web Tokens, WAF plugin
API治理: Request, response, parameter mapping, Hystrix, RateLimiter plugin
可观测性: Tracing, metrics, logging plugin
控制面板: Dynamic traffic control, visual backend for user menu permissions
拓展: Plugin hot-swapping, dynamic loading
集群: NGINX, Docker, Kubernetes
语言: provides .NET, Python, Go, Java client for API register
1.3 架构图
2 运行
2.1 运行先决条件
在部署shenyu-admin项目前,需初始化其所使用的数据库(数据库目前支持:MySQL、PostgreSql、Oracle),其中所用到的脚本文件都存放在项目根目录下的db目录。我们这里使用的数据库是PostgreSql。
在项目pg初始化脚本目录中找到初始化脚本create-database.sql、create-table.sql,并使用客户端连接工具连接你的PostgreSql服务依次执行,由此你会得到一个名为shenyu的数据库,它之后可作为shenyu-admin项目的数据库使用。
2.1 本地运行
由于我们需要研究和改造shenyu网关项目,因此我们直接从github中拉取源码在本地运行即可。拉取地址为:git clone https://github.com/apache/shenyu.git。
启动步骤:
(1)我们这里使用PostgreSql来存储,需要先初始化数据库和修改application-pg.yml的jdbc相关配置,在设置变量–spring.profiles.active = pg启动服务。
(2)使用开发工具启动org.apache.shenyu.admin.ShenyuAdminBootstrap,访问http://localhost:9095,默认用户名和密码分别为:admin和123456。
(3)使用开发工具启动org.apache.shenyu.bootstrap.ShenyuBootstrapApplication。
3 插件使用
Apache ShenYu将基于责任链模式由所有启用的插件来执行它。作为Apache ShenYu的核心,插件是可扩展和可热插拔的。不同的插件做不同的事情。当然,用户也可以自定义插件来满足自己的需求。
3.1 ModifyResponse插件
3.1.1 插件名称
响应修改插件。
3.1.2 适用场景
需要对接口的响应头部参数、响应HTTP状态码或响应体进行修改的场景。
3.1.3 插件功能
修改HTTP响应状态码。
添加、设置、覆盖或者移除响应头部参数。
添加、覆盖或者移除响应体参数。
3.1.4 插件代码
核心模块shenyu-plugin-modify-response。
核心类
org.apache.shenyu.plugin.modify.response.ModifyResponsePlugin
3.1.5 如何使用插件
3.1.5.1 插件使用流程图
3.1.5.2 接入SpringBoot应用改造
为了测试ModifyResponse插件的使用,我们需要准备一个SpringBoot应用,将这个SpringBoot应用的网关交由shenyu网关来管理。
(1)pom.xml引入集成依赖包
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-spring-boot-starter-client-springmvc</artifactId>
<version>2.5.0</version>
</dependency>
(2)application.yml配置注册到shenyu网关注册配置信息
shenyu:
register:
registerType: http #zookeeper #etcd #nacos #consul
serverLists: http://localhost:9095 #localhost:2181 #http://localhost:2379 #localhost:8848
props:
username: admin
password: 123456
client:
http:
props:
contextPath: /springboot
appName: springboot
(3)修改Controller接口映射路径
@ShenyuSpringMvcClient(“/vehicleType”)
@ShenyuSpringMvcClient(“/getList”)
import org.apache.shenyu.client.springmvc.annotation.ShenyuSpringMvcClient;
@RestController
@AllArgsConstructor
@RequestMapping("/vehicleType")
@ShenyuSpringMvcClient("/vehicleType")
public class VehicleTypeController {
private final VehicleTypeService vehicleTypeService;
/**
* 查询车辆类型
*/
@PostMapping("/getList")
@ShenyuSpringMvcClient("/getList")
public RequestResult getList() {
return vehicleTypeService.getList();
}
}
改造完成之后,启动项目,查看控制台打印信息,看到如下输出内容说明注册到shenyu网关成功了。
3.1.5.3 启用插件
在shenyu-admin --> 基础配置 --> 插件管理 --> modifyResponse设置为开启。
3.1.5.4 配置插件
Shenyu-admin插件列表 --> HttpProcess --> modifyResponse,先添加选择器,然后在添加规则。
(1)添加选择器
(2)添加规则