首先我们修改这个配置文件
这里我们给自己的插件分配内容
这里我们的limit设置
local limit_conn = require("resty.limit.conn")
-- https://kuberxy.github.io/%E5%AE%B9%E9%87%8F%E8%A7%84%E5%88%92/2019/12/22/limit-traffic-by-openresty.html
-- 实例化一个limit.conn对象,即一个并发连接数限速器,语法如下:
--obj, err = class.new(shdict_name, conn, burst, default_conn_delay)
--该方法可接收如下参数:
--shdict_name:共享字典空间的名称。对于不同类型的限制器,最好使用单独的共享字典空间
--conn:允许的最大并发连接数。对于超出最大并发连接数,但小于conn+burst的连接,会被延迟处理
--burst:允许延迟的连接数。对于超出conn+burst的连接,会被直接拒绝
--default_conn_delay:连接默认的延迟时间(单位为秒)。该值可在log_by_lua中通过leave方法动态调整
local lim, err = limit_conn.new("my_limit_conn",5, 1000, 2)
if not lim then
core.log.error(core.json.encode(err))
end
function _M.access(conf, ctx)
----当一个请求到达时会触发一个传入事件,并会根据指定的key计算当前请求应该延迟处理或者应该立即拒绝。语法如下:
local delay, err = lim:incoming("remote_addr", true)
-- 获取当前请求队列数
core.log.error("now queue: ", err)
--if not delay then
-- if err == "rejected" then
-- return 404
-- end
-- core.log.error("failed to limit req: ", err)
-- return 500
--end
sleep(1)
local conn= lim:leaving("remote_addr")
-- 新的并发请求数(或活跃的连接数)。与incoming不同是,该方法总是会提交到共享字典空间。
--core.log.error("leave queue: ", conn)
end