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
Чтобы использовать эту библиотеку Lua с NGINX, убедитесь, что nginx-module-lua установлен.
Этот документ описывает lua-resty-timer v1.1.0, выпущенную 6 ноября 2020 года.
Расширенные таймеры для 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", -- 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
Выпуск новых версий:
- обновите changelog ниже (PR должны быть объединены, включая запись в changelog)
- на основе changelog определите новую версию 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 (6-нояб-2020)
- Feat: добавлен параметр
jitter. Это добавляет случайный интервал для распределения таймеров (в случае планирования множества таймеров одновременно).
1.0.0 (21-сен-2020)
- Изменение [BREAKING]: повторяющиеся таймеры теперь реализованы как спящий поток, что более эффективно. Побочный эффект заключается в том, что таймер переназначается ТОЛЬКО ПОСЛЕ выполнения обработчика. Поэтому, если обработчик выполняется долго, то отдельные запуски будут дальше друг от друга.
0.3 (28-май-2018)
- Feat: добавлено вызов обратного вызова отмены при сборке таймера. Это изменяет первый аргумент обратного вызова
cancel, и, следовательно, является нарушающим.
0.2 (12-фев-2018) Исправление ошибок
- Исправление: исправление ошибки в функции
unpack, не учитывающей параметр длины таблицы - Документация: небольшие исправления и опечатки
0.1 (22-нояб-2017) Первоначальный выпуск
- Добавлен параметр
sub_intervalдля уменьшения задержек - Первоначальная загрузка
GitHub
Вы можете найти дополнительные советы по настройке и документацию для этого модуля в репозитории GitHub для nginx-module-timer.