OpenResty 使用 ngx.timer.at 完成异步日志记录
OpenResty Lua About 1,079 words方法说明
OpenResty
中的ngx.timer.at
可创建后台任务,在返回用户或接口信息后执行,配合log_by_lua*
阶段可完成日志、PV
、UV
等记录。
文档地址:https://github.com/openresty/lua-nginx-module#ngxtimerat
参数解释
hdl, err = ngx.timer.at(delay, callback, user_arg1, user_arg2, ...)
delay
: 指定延迟时间执行,单位秒。传0
立即执行,也可传0.001
表示1
毫秒后执行。callback
: 回调函数,在入参中加入premature
会让Nginx
内核自动调用。user_atg1...
: 调用时接收的参数。
代码示例
log_by_lua_file
local json = require "cjson.safe"
local db = require "module.db"
local function record_visit_data(premature, record)
if not premature then
ngx.log(ngx.ERR, json.encode(record))
db.query(string.format("insert into test(a,b,c,d) values(%s,%s,%s,%s)", record.url, record.req_param, record.ua, record.referer))
end
end
local record = {
url = ngx.var.uri,
req_param = ngx.var.args,
ua = ngx.var.http_user_agent,
referer = ngx.var.http_referer
}
local ok, err = ngx.timer.at(0, record_visit_data, record)
if not ok then
ngx.log(ngx.ERR, "failed to create record_visit_data timer#", json.encode(record), ", err#", err)
return
end
开源案例
Views: 6,773 · Posted: 2020-03-08
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...