riak: driver de cliente Lua riak protocol buffer para nginx-module-lua baseado na API cosocket
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-riak
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-riak
Para usar esta biblioteca Lua com NGINX, certifique-se de que o nginx-module-lua esteja instalado.
Este documento descreve lua-resty-riak v2.0.0 lançado em 05 de dezembro de 2013.
lua-resty-riak - driver de cliente Lua riak protocol buffer para o ngx_lua baseado na API cosocket.
Originalmente baseado na biblioteca lua-resty-memcached.
Influenciado por riak-client-ruby
Descrição
Esta biblioteca Lua é um driver de cliente riak protocol buffer para o módulo ngx_lua do nginx.
Esta biblioteca Lua aproveita a API cosocket do ngx_lua, que garante um comportamento 100% não bloqueante.
Observe que é necessário pelo menos ngx_lua 0.5.0rc29 ou ngx_openresty 1.0.15.7.
Depende dos seguintes módulos Lua:
- lua-pb - https://github.com/Neopallium/lua-pb
- struct - http://www.inf.puc-rio.br/~roberto/struct/
- lpack - http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/#lpack
Sinopse
location /t {
content_by_lua '
require "luarocks.loader"
local riak = require "resty.riak"
local client = riak.new()
local ok, err = client:connect("127.0.0.1", 8087)
if not ok then
ngx.log(ngx.ERR, "conexão falhou: " .. err)
end
local bucket = client:bucket("test")
local object = bucket:new("1")
object.value = "teste"
object.content_type = "text/plain"
local rc, err = object:store()
ngx.say(rc)
local object, err = bucket:get("1")
if not object then
ngx.say(err)
else
ngx.say(object.value)
end
client:close()
';
}
Uso
Veja a documentação gerada para uso e exemplos.
Nota A API de alto nível deve ser considerada estável - ou seja, não quebrará entre versões menores. A API de baixo nível ou bruta não deve ser considerada estável.
Mudança Potencialmente Quebradora na 2.0
A versão 2.0.0 agora usa clocks vetoriais para obter, definir e excluir objetos. Se você estiver usando um bucket que permite múltiplos valores (irmãos), isso pode quebrar sua aplicação.
Limitações
- Esta biblioteca não pode ser usada em contextos de código como set_by_lua, log_by_lua, e header_filter_by_lua onde a API cosocket do ngx_lua não está disponível.
- As instâncias do objeto
resty.riaknão podem ser armazenadas em uma variável Lua no nível do módulo Lua, porque serão compartilhadas por todas as solicitações concorrentes tratadas pelo mesmo processo de trabalho do nginx (veja Compartilhamento de Dados dentro de um Worker Nginx) e resultar em más condições de corrida quando solicitações concorrentes tentam usar as mesmas instâncias. Você deve sempre iniciar esses objetos em variáveis locais de função ou na tabelangx.ctx. Esses locais têm suas próprias cópias de dados para cada solicitação.
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório GitHub do nginx-module-riak.