OpenResty使用ngx.timer.every完成定时任务

OpenRestyLua大约 1071 字

方法说明

OpenResty中的ngx.timer.every可创建后台定时任务,配合init_worker_by_lua*阶段可完成定时任务初始化。

文档地址:https://github.com/openresty/lua-nginx-module#ngxtimerevery

参数解释

ngx.timer.at相似。

hdl, err = ngx.timer.every(delay, callback, user_arg1, user_arg2, ...)
  • delay: 指定延迟时间执行,单位秒。不可以为0
  • callback: 回调函数,在入参中加入premature会让Nginx内核自动调用。
  • user_atg1...: 调用时接收的参数。

代码示例

init_worker_by_lua_file阶段完成初始化。

0 == ngx.worker.id()的判断是保证只初始化一次。

local db = require "module.db"
local util = require "module.util"

local task_query_web_stat_delay = 1800  -- in seconds 30分钟

local task_query_web_stat = function(premature)
    if not premature then
        util.query_web_stat()
    end
end

if 0 == ngx.worker.id() then
    -- 启动时初始化
    ngx.timer.at(0, task_query_web_stat)

    local ok_task_query_web_stat, err_task_query_web_stat = ngx.timer.every(task_query_web_stat_delay, task_query_web_stat)
    if not ok_task_query_web_stat then
        ngx.log(ngx.ERR, "failed to create timer task_query_web_stat#", err_task_query_web_stat)
        return
    end

end

开源案例

https://github.com/fendoudebb/z-blog-openresty

阅读 843 · 发布于 2020-03-08

————        END        ————

扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看换一批