当前位置: 首页 > news >正文

使用lua开发apisix自定义插件并发布

接到老大需求:需要对cookie进行操作,遂查询apisix的自带插件,发现有,但不满足,于是自己开发了一个插件并部署,把开发部署流程写在这里打个日志怕以后忘掉。

一、需求

插件很简单,就是在request和response中打上自己的标记

二、编写插件

插件怎么编写,规范是什么我就不一一赘述了,点击这里查看官方文档,已经很详细。

把我写的也粘一下把:

local core = require("apisix.core")
local plugin_name = "cookie-plugin"local schema = {type = "object",properties = {},
}local _M = {version = 0.1,priority = 0, -- 设置插件优先级name = plugin_name,schema = schema,
}function _M.check_schema(conf)return core.schema.check(schema, conf)
endfunction _M.access(conf, ctx)-- 添加请求头core.request.set_header(ctx, "cookie-plugin", "success")
endfunction _M.header_filter(conf, ctx)-- 添加响应头core.response.set_header("cookie-plugin", "success")
endreturn _M

三、部署插件

最坑的就是怎么部署,官方有文档但看的一头雾水,详细介绍部署:
先介绍两概念Admin和Dashboard,Admin提供了API能力,Dashboard提供了可视化能力

3.1、放置lua脚本至插件文件夹下

把lua脚本改为你写的plugin_name,例如我上边写的就是cookie-pluginlua,然后放到Admin服务的plugins文件夹底下,一般在/usr/local/apisix/apisix/plugins/,直接放底下就行,当然也可以自己写路径指定,但你的config.yaml得自己指定路径,开头官方文档有介绍。

3.2、修改config.yaml文件

在config.yaml的plugins里加插件名

plugins:                         - cookie-plugin

这里除了这个,还需要把config-default.yaml里的插件挪过来,不然之后就你这个插件能用,官方插件就用不了了,最终效果:
在这里插入图片描述

3.2、刷新插件

当然可以apisix stop之后再apisix start启动,但有更优雅的方式,不需要重启可以热加载插件:

curl --location --request PUT 'http://自己的IP:端口/apisix/admin/plugins/reload' \
--header 'X-API-KEY: 你自己的key' 

这个时候apisix的插件已经可以用了,以刚才我们的插件为例,添加一个路由:

curl http://127.0.0.1:9180/apisix/admin/routes/1 -X PUT -d '
{"uri": "/example","plugins": {"cookie-plugin": {}},"upstream": {"type": "roundrobin","nodes": {"httpbin.org:80": 1}}
}'

请求:

 curl -i http://127.0.0.1:9080/example 

在这里插入图片描述
可以看到response中已有cookie-plugin: success,证明插件生效。

3.4、生成schema.json

这个schema.json是Dashboard提供可视化需要的文件,也就是现在说api已经可以使用了,但是如果你想在Dashboard配置是配置不了的,会报插件不存在,这时候是因为之前的schema.json对新插件没有描述,这个也不用自己写,查看官方文档
在这里插入图片描述

curl 127.0.0.1:9090/v1/schema > schema.json

3.5、替换schema.json

复制到Dashboard的config目录下替换就行,之后重启Dashboard服务就ok
在这里插入图片描述
好了这样一个apisix使用lua脚本自定义插件和部署就可以了

相关文章:

使用lua开发apisix自定义插件并发布

接到老大需求:需要对cookie进行操作,遂查询apisix的自带插件,发现有,但不满足,于是自己开发了一个插件并部署,把开发部署流程写在这里打个日志怕以后忘掉。 一、需求 插件很简单,就是在reques…...

43 mysql insert select 的实现

前言 我们这里 来探讨一下 insert into $fields select $fields from $table; 的相关实现, 然后 大致来看一下 为什么 他能这么快 按照 我的思考, 应该里里面有 批量插入才对, 但是 调试结果 发现令我有一些意外 呵呵 果然 只有调试才是唯一的真理 测试数据表如下 CREATE…...

趣味学Python,快速上手神奇的itertools库!

大家好,我是菜哥! 在学习Python编程的过程中,我们经常会使用到一些非常有用的标准库,它们不仅可以让我们的代码更加简洁高效,还能帮我们解决很多复杂的问题。Python标准库为我们提供了大量实用的工具和模块&#xff0c…...

富文本编辑器CKEditor

介绍 富文本编辑器不同于文本编辑器,它提供类似于 Microsoft Word 的编辑功能 在Django中,有可以现成的富文本三方模块django-ckeditor,具体安排方式: pip install django-ckeditor==6.5.1官网:Django CKEditor — Django CKEditor 6.7.0 documentation 使用方式 创建项…...

【机器学习】音乐大模型的深入探讨——当机器有了创意,是机遇还是灾难?

👀国内外音乐大模型基本情况👀 ♥概述♥ ✈✈✈如FreeCompose、一术科技等,这些企业专注于开发人工智能驱动的语音、音效和音乐生成工具,致力于利用核心技术驱动文化产业升级。虽然具体公司未明确提及,但可以预见的是…...

机器人学习和研究的物质基础包含哪些内容?

为啥写这个? 在很多博客里面提及物质基础,没想到询问的也非常多,写一篇详细一点的。 之前的故事 不合格且失败机器人讲师个人理解的自身课程成本情况-CSDN博客 迷失自我无缘多彩世界-2024--CSDN博客 物质基础与情绪稳定的关系-CSDN博客 …...

Python中的交互式GUI开发:与MATLAB uicontrol的比较

Python中的交互式GUI开发 Python中的交互式GUI开发:与MATLAB uicontrol的比较**Python GUI开发库****Tkinter****PyQt/PySide** **与MATLAB的比较****总结** Python中的交互式GUI开发:与MATLAB uicontrol的比较 在MATLAB中,uicontrol 是一个…...

js 实现将后端请求来的 Blob 数据保存到用户选择的任意目录

js实现将后端请求来的 Blob 数据保存到用户选择的任意目录 实现方式 实现方式 实现方式是使用 window 的 showSaveFilePicker 方法。Window 接口的 showSaveFilePicker() 方法用于显示一个文件选择器,以允许用户保存一个文件。可以选择一个已有文件覆盖保存&#xf…...

【LLM之RAG】RAT论文阅读笔记

研究背景 近年来,大型语言模型(LLMs)在各种自然语言推理任务上取得了显著进展,尤其是在结合大规模模型和复杂提示策略(如链式思维提示(CoT))时。然而,LLMs 在推理的事实…...

windows anaconda 安装 Labelme

安装 # 创建环境 conda create -n labelme python3.6 #激活环境 conda activate labelme # 安装依赖 conda install pyqt conda install pillow # 安装labelme conda install labelme3.16.2 # 启动labelme labelme右键选择标注类型,从上到下为多边形(常…...

Python实现基于深度学习的电影推荐系统

Python实现基于深度学习的电影推荐系统 项目背景 在数字化娱乐时代,用户面临着海量的电影选择。为了帮助用户找到符合个人口味的佳片,MovieRecommendation项目提供了一个基于深度学习的个性化电影推荐系统。该系统利用深度学习技术,根据用户…...

C++ (week9):Git

文章目录 1.git介绍2.git安装3.git配置4.获取自己的SSH公钥5.新建仓库6.邀请开发者7.克隆远程仓库到本地8.在本地进行开发9.本地项目推送到远程仓库10.git的工作原理11.分支管理(1)合作开发的方式(2)分支管理(3)分支合并的原理、冲突管理 12.git 与 svn 的区别13.设置alias别名…...

Seaborn:数据可视化的强大工具

文章目录 引言Seaborn的原理1. 底层结构2. 数据集成3. 图形类型 Seaborn的使用1. 安装与导入2. 数据加载与探索3. 绘制图形分布图关系图分类图 4. 图形定制5. 导出图形 结论 引言 在数据分析和科学计算领域,数据可视化是一个至关重要的步骤。它能够帮助我们更直观地…...

图解注意力

图解注意力 Part #2: The Illustrated Self-Attention 在文章前面的部分,我们展示了这张图片来展示自注意力被应用于正在处理单词"it"的一层中: 在本节中,我们将看看这是如何完成的。请注意,我们将以一种试图理解单…...

Typora Markdown编辑器 for Mac v1.8.10 安装

Mac分享吧 文章目录 效果一、准备工作二、开始安装1、双击运行软件,将其从左侧拖入右侧文件夹中,等待安装完毕2. 应用程序显示软件图标,表示安装成功 三、运行调试1、修改主题2、显示文档列表,如下图3、查看版本信息 **安装完成&…...

代码随想录算法训练营Day46|动态规划:121.买卖股票的最佳时机I、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III

买卖股票的最佳时机I 121. 买卖股票的最佳时机 - 力扣(LeetCode) 之前用贪心算法做过相同的题,这次考虑使用动态规划来完成。 dp[i]表示前i天的最大利润 我们已知每一天的价格price[i],则dp[i]为每一天的价格price[i]减去当初…...

hive on spark 记录

环境&#xff1a; hadoop 2.7.2 spark-without-hadoop 2.4.6 hive 2.3.4 hive-site.xml <property><name>hive.execution.engine</name><value>spark</value> </property> <property><name>spark.yarn.jars</name>&l…...

【计算机网络体系结构】计算机网络体系结构实验-DHCP实验

服务器ip地址 2. 服务器地址池 3. 客户端ip 4. ping Ipconfig...

攻防世界-pdf

方法一&#xff1a;打开是pdf格式的文件&#xff0c;里面有一张图&#xff0c;题目提示图下面什么都没有&#xff1f;emmm用chrom打开pdf——ctrlf搜索flag&#xff0c;里面是有东西的&#xff0c;ctrla复制就可以了。 方法二&#xff1a;题目提示图下面什么都没有&#xff0c;…...

关于后端幂等性问题分析与总结

后端幂等性&#xff08;Idempotency&#xff09;是指对系统执行一次操作或多次执行相同的操作&#xff0c;其结果始终如一。在分布式系统和API设计中&#xff0c;这是一个关键概念&#xff0c;因为它能保证用户无论请求被路由到哪个节点&#xff0c;多次执行相同的请求都不会导…...

开发者专属提示词库:提升AI协作效率的实战指南

1. 项目概述&#xff1a;一个为开发者量身定制的提示词宝库如果你是一名开发者&#xff0c;无论是前端、后端、运维还是算法工程师&#xff0c;我相信你都或多或少地接触过像 ChatGPT 这类大型语言模型。它们能写代码、解 Bug、解释概念&#xff0c;甚至帮你设计架构。但很多时…...

用ZYNQ和LWIP搞定8路ADS8681数据采集:从Vivado Block Design到上位机TCP通信的完整流程

ZYNQ与LWIP构建的8通道高速数据采集系统实战指南 在工业自动化、测试测量和科研领域&#xff0c;多通道高精度数据采集系统正变得越来越重要。本文将详细介绍如何利用Xilinx ZYNQ SoC和LWIP协议栈&#xff0c;构建一个支持8路ADS8681同步采集的实时数据传输系统。不同于简单的代…...

高考解析几何“秒杀”技巧:用极点极线快速搞定椭圆定点定值难题

高考解析几何“秒杀”技巧&#xff1a;用极点极线快速搞定椭圆定点定值难题 解析几何作为高考数学的压轴题型&#xff0c;常常让考生望而生畏。面对复杂的计算和抽象的条件&#xff0c;如何在有限时间内快速找到突破口&#xff1f;极点极线理论作为高等几何中的重要工具&#x…...

如何通过Jellyfin Android TV客户端打造家庭影院级媒体体验?

如何通过Jellyfin Android TV客户端打造家庭影院级媒体体验&#xff1f; 【免费下载链接】jellyfin-androidtv Android TV Client for Jellyfin 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-androidtv 想要在智能电视上享受专业的媒体管理体验吗&#xff1f;…...

ViGEmBus终极指南:Windows游戏控制器模拟驱动完全解析

ViGEmBus终极指南&#xff1a;Windows游戏控制器模拟驱动完全解析 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是一款运行在Windows内核模式的驱…...

智慧树自动刷课神器Autovisor:3分钟极速上手的完整指南

智慧树自动刷课神器Autovisor&#xff1a;3分钟极速上手的完整指南 【免费下载链接】Autovisor 2025智慧树刷课脚本 基于Python Playwright的自动化程序 [有免安装版] 项目地址: https://gitcode.com/gh_mirrors/au/Autovisor 还在为智慧树平台的繁琐操作而烦恼吗&#…...

AI编程助手安全规则实战:从SQL注入防御到团队安全基线构建

1. 项目概述&#xff1a;当AI编程助手遇上安全红线最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“cursor-security-rules”。光看名字&#xff0c;你大概能猜到它和Cursor这个AI编程工具有关&#xff0c;而且重点是“安全规则”。没错&#xff0c;这个项目本质上是一个…...

轻量级配置管理框架zcf:多环境配置、敏感信息加密与云原生集成实践

1. 项目概述&#xff1a;一个面向开发者的轻量级配置管理框架最近在梳理团队内部工具链时&#xff0c;发现一个挺普遍的问题&#xff1a;不同项目、不同环境&#xff08;开发、测试、生产&#xff09;的配置管理总是乱糟糟的。.env文件满天飞&#xff0c;敏感信息一不小心就提交…...

基于LLM与视觉模型融合的智能体框架:从原理到工业质检实践

1. 项目概述&#xff1a;当AI学会“看”与“想”最近在探索AI与视觉结合的落地场景时&#xff0c;我深度体验了landing-ai/vision-agent这个项目。它不是一个简单的图像识别工具&#xff0c;而是一个试图让AI具备“视觉推理”能力的智能体框架。简单来说&#xff0c;它让AI不仅…...

【仅限前200名】Midjourney铂金印相专属Prompt库泄露:含17组经暗房验证的--v 6.2参数矩阵与胶片光谱校准模板

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney铂金印相的光学本质与历史语境 铂金印相&#xff08;Platinum Print&#xff09;并非数字时代的产物&#xff0c;而是一种诞生于1873年的古典摄影工艺——其影像由铂族金属&#xff08;主要是…...