{{docContent.title}}

获取请求队列数

首先我们修改这个配置文件

这里我们给自己的插件分配内容

这里我们的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