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 存储库 中找到此模块的其他配置提示和文档。