基于docker的apisix网关的java插件开发

news2024/12/28 19:22:15

基于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官网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/506356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络基础学习:osi七层模型

osi七层模型 什么是OSI&#xff0c;什么是ISO?为什么ISO要提出OSI网络七层模型&#xff1f;OSI七层的划分以及具体内容第七层 应用层第六层 表示层第五层 会话层第四层 传输层第三层 网络层第二层 数据链路层第一层 物理层 每一层与设备的对应关系 什么是OSI&#xff0c;什么是…

大模型混战,最先实现“智慧涌现”的会是谁?

作者 | 曾响铃 文 | 响铃说 几秒钟写出了一篇欢迎词&#xff1b; 小说人物乱入现实&#xff0c;快速创作不重样的故事&#xff1b; 鼠标一点&#xff0c;一封英文工作沟通邮件撰写完成&#xff1b; 准确解出数学应用题&#xff0c;还给出解题步骤&#xff1b; 甚至还能理…

【微控制器】16KB R5F102AAASP、R7FA2L1A93CFL 128KB和R7FA2E1A73CFJ 64KB 嵌入式技术资料

R5F102AAASP RL78 16位微控制器具有超低功耗、增强性能、高集成度和各种强大的外设功能。得益于以上特性&#xff0c;RL78 MCU非常适合用于各种应用&#xff0c;包括电池供电设备和家用应用。 RL78微控制器MCU系列包括通用和专用器件。这些MCU可为系统设计人员提供高级省电特性…

实验五 Java多线程程序设计

实验目的 掌握Runnable接口实现多线程的方法掌握Thread类实现多线程的用法掌握Java语言中多线程编程的基本方法 实验内容 线程接力&#xff08;45分&#xff09; 编写一个应用程序&#xff0c;除了主线程外&#xff0c;还有三个线程&#xff1a;first、second和third。firs…

MySQL基础(二十四)索引的数据结构

1 为什么使用索引 顺序查询和数据使用二叉树结构再进行查询,如图&#xff1a; 2 索引及其优缺点 2.1 索引概述 MySQL官方对索引的定义为&#xff1a;索引&#xff08;Index&#xff09;是帮助MySQL高效获取数据的数据结构。 **索引的本质&#xff1a;**索引是数据结构。你…

第九章 使用Vsftpd服务传输文件

文章目录 第九章 使用Vsftpd服务传输文件一、文件传输协议1、FTP介绍2、FTP工作模式 二、Vsftpd服务程序1、安装Vsftpd服务程序2、防火墙配置3、过滤注释信息并通过重定向符写回原始的主配置文件4、Vsftpd服务程序常用的参数以及作用5、匿名访问模式&#xff08;1&#xff09;、…

【自己更换模型】如何用 Serverless 一键部署 Stable Diffusion?

作者&#xff1a;寒斜 上一篇讲了如何使用 Serverless Devs 和函数计算快速体验部署 Stable Diffusion&#xff0c;本篇继续聊聊如何解决动态模型加载的问题&#xff0c;从玩起来到用起来。 思路 其实很简单&#xff0c; 我们只需要将镜像里面的动态路径映射到 NAS [ 1] 文件…

为什么调度也需要“血缘分析”和“影响分析”?

摘要&#xff1a;数据治理中经常要遇表或者字段级“血缘分析”和“影响分析”&#xff0c;但是真正在数据ETL调度操作过程中使用影响和血缘分析频繁&#xff0c;看白鲸开源的WhaleStudio如何解决这个难题。 提到“血缘分析”和“影响分析”&#xff0c;普通开发者第一印象就是数…

【Java EE 初阶】线程池简介及实现过程

目录 1.线程池是什么&#xff1f; 2.为什么要使用线程池&#xff1f; 3.如何使用线程池 1.JDK给我们提供了一些方法来创造线程池 4.设计模式之工厂模式 1.工厂模式用途 5.自定义一个线程池 1.可以提交任务到线程池&#xff0c;那么就会有一种数据结构来保存我们提交的任…

java lambda表达式详解

一、Lambda初识 我们知道&#xff0c;在Java中&#xff0c;接口是不能实例化的&#xff0c;但是接口对象可以指向它的实现类对象。如果接口连实现对象都没有呢&#xff1f;那还可以使用匿名类的方式&#xff0c;如下: public class JavaTest { public static void main(Strin…

jenkins,gitlab,实时构建推送

首先jdk&#xff0c;jenkins安装好&#xff0c;新版jenkins不支持jdk8 然后安装环境maven&#xff0c;git 环境配置 插件安装 gitlab插件 Build Authorization Token Root插件 插件环境整好之后新建个任务 源码管理&#xff0c;填入仓库https地址&#xff0c;添加git…

大势智慧软硬件技术答疑第一期

1.重建大师生成的实景三维模型&#xff0c;模型周边的道路植物被压平了&#xff0c;怎么保留植物道路原有形状&#xff1f; 答&#xff1a;这个是单体化生成的地理实体场景&#xff0c;会把地物压平&#xff0c;可以用模方将单体化的模型加入到osgb中。 2.直接导入空三的话这个…

采用docker部署时kafka共享zookeeper的网络配置

采用docker部署kafka、zookeeper&#xff0c;一般的做法是创建一个docker网络&#xff0c;然后kafka、zookeeper都使用这个网络。问题是&#xff0c;我部署到生产环境的时候&#xff0c;这种做法被禁止了。原因是添加了这个docker网络以后&#xff0c;服务器就无法访问了。该服…

Es读写调优、深度分页

写入 ES支持四种对文档的数据写操作 create&#xff1a;如果在PUT数据的时候当前数据已经存在&#xff0c;则数据会被覆盖&#xff0c;如果在PUT的时候加上操作类型create&#xff0c;此时如果数据已存在则会返回失败&#xff0c;因为已经强制指定了操作类型为create&#xf…

Spring核心 AOP

1.什么是AOP&#xff1f; AOP&#xff08;Aspect Orient Programming&#xff09;&#xff0c;直译过来就是面向切面编程。AOP是一种编程思想&#xff0c;是面向对象编程&#xff08;OOP&#xff09;的一种补充。面向对象编程将程序抽象成各个层次的对象&#xff0c;而面向切面…

【笔试强训选择题】Day9.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录…

open3d Image和numpy互转,PointCloud和numpy互转

目录 1. open3d.geometry.Image转numpy 2. numpy 转 open3d.geometry.Image 3. numpy转PointCloud 4. PointCloud转numpy 1. open3d.geometry.Image转numpy np_x np.asarray(x) # (h,w,3) import numpy as np import matplotlib.pyplot as plt import matplotlib.image…

鸿蒙Hi3861学习十-Huawei LiteOS-M(消息队列)

一、简介 消息队列&#xff0c;是一种常用于任务间通信的数据结构&#xff0c;实现了接收来自任务或中断的不固定长度的消息&#xff0c;并根据不同的接口选择传递消息是否存放在自己空间。任务能够从队列里面读取消息&#xff0c;当队列中的消息是空时&#xff0c;挂起读取任务…

EC6108V9/V9C-Hi3798MV100-当贝纯净桌面-卡刷固件包

EC6108V9&#xff0f;V9C-Hi3798MV100-当贝纯净桌面-卡刷固件包-内有教程 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内置的没用的软…

C#学习笔记--实现一个可以重复权重并且能够自动排序的容器--MultiplySortedSet

目录 前言SortedSetC#自带类型自定义类SortedSet权值重复 需求自定义容器 -- MultiplySortedSet核心实现思路 MultiplySortedSet 使用C#自带类型自定义类 前言 最近需要在C#中实现一个功能 有一个容器&#xff0c;该容器能自动对里面的元素进行排序&#xff0c;类似C的优先队列…