欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

apisix 插件实现定时任务

程序员文章站 2022-06-03 20:23:43
...

本文档为个人博客文档系统的备份版本、作者:小游、作者博客:点击访问

local ngx         = ngx

local count = 1
local delay = 1
local handler

-- 插件源数据配置
local schema = {
    -- 类型
    type = "object",
    -- 插件接收的配置参数
    properties = {

    },
    minProperties = 1,
    -- 附加属性
    additionalProperties = false,
}

-- 插件名
local plugin_name = "xiaoyou"

-- 插件的配置信息
local _M = {
    -- 版本
    version = 0.1,
    -- 优先级
    priority = 2500,
    -- 插件的类型
    type = 'auth',
    -- 插件名字
    name = plugin_name,
    -- 插件的参数
    schema = schema,
}

-- 定时任务处理函数
handler = function (premature)
    if premature then
        return
    end
    -- 定时任务的处理逻辑
    count  = count +1
    local ok, err = ngx.timer.at(delay, handler)

    -- 重新创建定时任务
    -- ngx.timer.at 创建的回调是一次性的。如果要实现“定期”运行,需要在回调函数中重新创建 timer 才行。
    if not ok then
        ngx.log(ngx.ERR, "failed to create the timer: ", err)
        return
    end
end

-- 我们创建一个回调函数
local ok, err = ngx.timer.at(delay, handler)
if not ok then
    ngx.log(ngx.ERR, "failed to create the timer: ", err)
    return
end

-- 在balancer阶段来处理请求
-- 常见的阶段:init, rewrite,access,balancer,header filer,body filter 和 log 阶段
function _M.access(conf, ctx)
    -- 返回请求结果
    ngx.say(count)
end

-- 返回插件对象
return _M
相关标签: 软件使用