lua併發限流程式碼
阿新 • • 發佈:2019-01-05
首先在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!!!")