lua并发限流代码

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/david_pfw/article/details/83098454

首先在nginx.conf 文件中的http节点添加:

lua_shared_dict limit_req_store 10m;

以下是lua并发限流代码:

local limit_req = require "resty.limit.req"

--限制请求速率为500 req/sec
local lim,err = limit_req.new("limit_req_store",5,0)
if not lim then --申请limit_req对象失败
ngx.log(ngx.ERR,"failed to instantiate a resty.limit.req object: ",err)
return ngx.exit(500)
end

-- 下面代码针对每一个单独的请求
-- 使用ip地址作为限流的key
local key = ngx.var.binary_remote_addr
local delay,err = lim:incoming(key,true)
if not delay then
if err == "rejected" then
return ngx.exit(503)
end
ngx.log(ngx.ERR,"failed to limit req: ",err)
return ngx.exit(500)
end


if delay > 0 then
--第二参数(err)保存着超过请求速率的请求数
--例如err等于31,意味着当前速率是 531 req/sec
local excess = err

---- 当前请求超过200 req/sec 但小于 300 req/sec
-- 因此我们sleep一下,保证速率是200 req/sec,请求延迟处理
ngx.sleep(delay) --非阻塞sleep(秒)
end
ngx.say("you success!!!")

 

展开阅读全文

没有更多推荐了,返回首页