基于docker的apisix网关的java插件开发
- 1 创建java插件项目
- 1.1 从github上获取demo
- 1.2 改造demo
- 2 快速部署
- 2.1 重新制作apisix镜像
- 2.2 修改/apisix-docker/example/apisix_conf/config.yaml
- 2.3 修改/apisix-docker/example/docker-compose.yml
- 2.4 重新启动apisix网关
- 3 apisix网关路由配置插件
- 3.1 ext-plugin-pre-req
- 3.2 ext-plugin-post-resp
- 5 验证java插件是否生效
- 6 参考博客
1 创建java插件项目
1.1 从github上获取demo
java插件示例demo
1.2 改造demo
将java插件示例demo拉取下来后,我们找到DemoFilter.java
文件,在这个文件中可以修改过滤器的名称,为了方便测试,其他的文件暂时不需要修改。后期等过滤器调通后,可在过滤器中编写代码来实现自己的业务需求。过滤器名称为AuthFilter
,后面在apisix路由中配置过滤插件时需要用到。
@Override
public String name() {
return "AuthFilter";
}
修改项目java运行及maven打包环境的jdk均为jdk11。
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
2 快速部署
2.1 重新制作apisix镜像
在服务器上创建/home/capability_open_platform_filter目录,上传java插件jar包,dockerfile文件,jdk11文件至目录。
Dockerfile
FROM apache/apisix:3.0.0-centos
# 指定镜像创建者信息
MAINTAINER cisco
# 将宿主机的文件拷贝到容器的具体目录中。这里使用ADD,拷贝后自动解压,如果不需要解压,可以使用COPY
ADD jdk-11.0.17_linux-x64_bin.tar.gz /jdk
ADD gateway-1.0-SNAPSHOT.jar /opt/apisix-runner-bin/gateway-1.0-SNAPSHOT.jar
## 配置jdk环境
ENV JAVA_HOME /jdk/jdk-11.0.17
ENV PATH ${JAVA_HOME}/bin:$PATH
# 设置字符集
ENV LANG C.utf8
构建镜像
docker build -t apisix-jdk11 .
2.2 修改/apisix-docker/example/apisix_conf/config.yaml
开启apisix网关ext-plugin-pre-req
请求前置插件,ext-plugin-post-resp
响应后置插件,并配置java插件运行指令。
plugins:
- ext-plugin-pre-req # 请求前置插件
- ext-plugin-post-resp # 响应后置插件
ext-plugin:
cmd: ['java', '-Dfile.encoding=UTF-8', '-jar', '/opt/apisix-runner-bin/gateway-1.0-SNAPSHOT.jar']
2.3 修改/apisix-docker/example/docker-compose.yml
修改默认的apisix镜像为我们新制作的镜像名称
apisix:
image: apisix-jdk11:latest
2.4 重新启动apisix网关
切换目录至/usr/local/apisix-docker/example
,执行指令docker-compose -p docker-apisix up -d
重启启动apisix网关。切换目录至/usr/local/apisix-docker/example/apisix_log
,执行指令tail -200f error.log
查看java插件是否运行成功,看到如下图控制台打印的信息,就说明java插件启动成功。
3 apisix网关路由配置插件
3.1 ext-plugin-pre-req
ext-plugin-pre-req
插件用于在执行内置 Lua 插件之前和在 Plugin Runner 内运行特定的 External Plugin。
"ext-plugin-pre-req": {
"allow_degradation": false,
"conf": [
{
"name": "AuthFilter",
"value": "authFilter"
}
],
"disable": false
}
3.2 ext-plugin-post-resp
ext-plugin-post-resp
插件用于在执行内置 Lua 插件之前和在 Plugin Runner 内运行特定的 External Plugin。
ext-plugin-post-resp
插件将在请求获取到上游的响应之后执行。
"ext-plugin-post-resp": {
"allow_degradation": false,
"conf": [
{
"name": "AuthFilter",
"value": "authFilter"
}
],
"disable": false
}
5 验证java插件是否生效
发起apisix网关的请求,请求匹配到具体的路由,路由中配置了拦截器,切换目录至/usr/local/apisix-docker/example/apisix_log
,执行指令tail -200f error.log
,查看是否打印插件中的日志信息,打印了代表插件执行成功。
6 参考博客
1.基于docker的apisix网关的java插件开发
2.Apache APISIX v3.0 中文文档
3.java插件demo
4.apisix官网