timer: Temporizadores estendidos para nginx-module-lua
Instalação
Se você ainda não configurou a assinatura do repositório RPM, inscreva-se. Em seguida, você pode prosseguir com os seguintes passos.
CentOS/RHEL 7 ou 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
Para usar esta biblioteca Lua com NGINX, certifique-se de que o nginx-module-lua esteja instalado.
Este documento descreve lua-resty-timer v1.1.0 lançado em 06 de novembro de 2020.
Temporizadores estendidos para OpenResty. Fornece temporizadores recorrentes, canceláveis e de escopo de nó, além do que os temporizadores básicos do OpenResty fazem.
Sinopse
http {
lua_shared_dict timer_shm 1m;
init_worker_by_lua_block {
local timer = require("resty.timer")
local options = {
interval = 0.1, -- intervalo de expiração em segundos
recurring = true, -- temporizador recorrente ou único
immediate = true, -- o intervalo inicial será 0
detached = false, -- executar de forma destacada ou ser coletável
jitter = 0.1, -- adicionar um intervalo aleatório
expire = object.handler, -- callback na expiração do temporizador
cancel = function(reason, self, param1)
-- será chamado quando o temporizador for cancelado
end,
shm_name = "timer_shm", -- shm a ser usado para temporizadores de escopo de nó
key_name = "my_key", -- nome da chave a ser usado para temporizadores de escopo de nó
sub_interval = 0.1, -- atraso extra máximo entre trabalhadores
}
local object
object = { -- criar algum objeto com um temporizador
count = 0,
handler = function(self, param1) -- o callback do temporizador como um método
-- faça algo aqui
print(param1) --> "Param 1"
end,
-- criar e adicionar ao objeto, mas também passar como 'self' para o handler
timer = timer(options, object, "Param 1"),
}
-- ancorar o objeto e o temporizador
_M.global_object = object -- será coletado se não ancorado
-- cancelar o temporizador
object.timer:cancel()
}
}
Descrição
O temporizador do OpenResty é bastante limitado, este temporizador adiciona uma série de opções comuns como parâmetros sem precisar recodificá-los (e retestá-los) em cada projeto.
-
temporizadores recorrentes (suportados pelo OR também através de
ngx.timer.every) -
execução imediata na primeira execução para temporizadores recorrentes
-
temporizadores canceláveis
-
callback de cancelamento, chamado quando o temporizador é cancelado
-
temporizadores coletáveis, permitindo que os temporizadores sejam (opcionalmente) anexados a objetos e parem automaticamente quando coletados.
-
temporizadores de escopo de nó: o mesmo temporizador iniciado em cada trabalhador ainda será executado apenas uma vez em todo o sistema. Se o trabalhador que o executa for removido, o temporizador será automaticamente executado em outro trabalhador.
Veja a documentação online do LDoc para a API completa.
Histórico
O versionamento é estritamente baseado em Semantic Versioning
Lançando novas versões:
- atualize o changelog abaixo (os PRs devem ser mesclados incluindo uma entrada no changelog)
- com base no changelog, determine a nova versão SemVer
- crie um novo rockspec
- renderize a documentação usando
ldoc(não faça isso dentro dos PRs) - faça commit como "release x.x.x" (não inclua a revisão do rockspec)
- marque o commit com "x.x.x" (não inclua a revisão do rockspec)
- faça push do commit e da tag
- faça upload do rock para luarocks:
luarocks upload rockspecs/[name] --api-key=abc
1.1.0 (6-Nov-2020)
- Feat: adicionado uma opção
jitter. Isso adiciona um intervalo aleatório para distribuir os temporizadores (no caso de agendar muitos temporizadores de uma vez).
1.0.0 (21-Sep-2020)
- Mudança [BREAKING]: os temporizadores recorrentes agora são implementados como uma thread de espera que é mais eficiente. O efeito colateral é que o temporizador só é reprogramado APÓS a execução do handler. Portanto, se o handler for de longa duração, as execuções individuais estarão mais distantes.
0.3 (28-May-2018)
- Feat: adicionado a invocação do callback de cancelamento quando o temporizador é coletado. Isso
altera o primeiro argumento do callback
cancel, e portanto é uma quebra.
0.2 (12-Feb-2018) Correção de bug
- Fix: correção de bug na função
unpackque não respeitava o parâmetro de comprimento da tabela - Docs: pequenas correções e erros de digitação
0.1 (22-Nov-2017) Lançamento inicial
- Adicionado a opção
sub_intervalpara reduzir atrasos - Upload inicial
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-timer.