跳转至

timer: nginx-module-lua 的扩展定时器

安装

如果您尚未设置 RPM 存储库订阅,请 注册。然后您可以继续以下步骤。

CentOS/RHEL 7 或 Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-timer

CentOS/RHEL 8+、Fedora Linux、Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-timer

要在 NGINX 中使用此 Lua 库,请确保已安装 nginx-module-lua

本文档描述了 lua-resty-timer v1.1.0,于 2020 年 11 月 06 日发布。


OpenResty 的扩展定时器。提供了可重复、可取消的、节点范围的定时器,超出了基本 OpenResty 定时器的功能。

概述

http {
    lua_shared_dict timer_shm 1m;
    init_worker_by_lua_block {
        local timer = require("resty.timer")

        local options = {
            interval = 0.1,           -- 过期间隔(以秒为单位)
            recurring = true,         -- 可重复或单次定时器
            immediate = true,         -- 初始间隔将为 0
            detached = false,         -- 以独立方式运行,或可被垃圾回收
            jitter = 0.1,             -- 添加随机间隔
            expire = object.handler,  -- 定时器过期时的回调
            cancel = function(reason, self, param1)
                -- 当定时器被取消时将被调用
            end,
            shm_name = "timer_shm",   -- 用于节点范围定时器的共享内存
            key_name = "my_key",      -- 用于节点范围定时器的键名
            sub_interval = 0.1,       -- 最大跨工作进程额外延迟
        }

        local object
        object = {                            -- 创建一个带有定时器的对象
            count = 0,
            handler = function(self, param1)  -- 作为方法的定时器回调
                -- 在这里执行某些操作
                print(param1)                 --> "Param 1"
            end,

            -- 创建并添加到对象中,同时将其作为 'self' 传递给处理程序
            timer = timer(options, object, "Param 1"),
        }

        -- 锚定对象和定时器
        _M.global_object = object     -- 如果未锚定,将被收集

        -- 取消定时器
        object.timer:cancel()
    }
}

描述

OpenResty 的定时器相对有限,这个定时器添加了一些常见选项作为参数,而无需在每个项目中重新编码(和重新测试)它们。

  • 可重复定时器(OR 也通过 ngx.timer.every 支持)

  • 可立即运行的第一次可重复定时器

  • 可取消的定时器

  • 取消回调,在定时器被取消时调用

  • 可被垃圾回收的定时器,允许定时器(可选)附加到对象,并在被垃圾回收时自动停止。

  • 节点范围定时器:在每个工作进程中启动的相同定时器将在系统中仅运行一次。如果运行它的工作进程被移除,定时器将自动在另一个工作进程上执行。

请参阅 在线 LDoc 文档 获取完整的 API。

历史

版本控制严格基于 Semantic Versioning

发布新版本:

  • 更新下面的变更日志(PR 应该合并,包括变更日志条目)
  • 根据变更日志确定新的 SemVer 版本
  • 创建新的 rockspec
  • 使用 ldoc 渲染文档(请勿在 PR 中执行此操作)
  • 提交为 "release x.x.x"(不包括 rockspec 修订版)
  • 用 "x.x.x" 标记提交(不包括 rockspec 修订版)
  • 推送提交和标签
  • 将 rock 上传到 luarocks: luarocks upload rockspecs/[name] --api-key=abc

1.1.0 (2020 年 11 月 6 日)

  • 特性:添加 jitter 选项。这为定时器添加了随机间隔(以便在同时调度多个定时器时分散它们)。

1.0.0 (2020 年 9 月 21 日)

  • 变更 [BREAKING]:可重复定时器现在实现为一个睡眠线程,更加高效。副作用是定时器仅在执行处理程序后重新调度。因此,如果处理程序运行时间较长,则单独运行之间的间隔将更大。

0.3 (2018 年 5 月 28 日)

  • 特性:在定时器被 GC 时添加取消回调调用。这改变了 cancel 回调的第一个参数,因此是破坏性的。

0.2 (2018 年 2 月 12 日) 修复

  • 修复:unpack 函数中的错误未遵循表长度参数
  • 文档:小修复和拼写错误

0.1 (2017 年 11 月 22 日) 初始发布

  • 添加 sub_interval 选项以减少延迟
  • 初始上传

GitHub

您可以在 nginx-module-timer 的 GitHub 存储库 中找到此模块的其他配置提示和文档。