consul-event: Обертка для HTTP API событий Consul
Установка
Если вы еще не настроили подписку на 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-consul-event
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-consul-event
Чтобы использовать эту библиотеку Lua с NGINX, убедитесь, что nginx-module-lua установлен.
Этот документ описывает lua-resty-consul-event v0.3.0, выпущенную 17 июня 2019 года.
Обертка для HTTP API событий Consul
Обзор
Этот модуль предоставляет обертку клиента OpenResty для Consul Events API. Это позволяет интеграцию OpenResty с механизмом пользовательских событий Consul, который можно использовать для создания инфраструктуры сценариев для автоматизированных развертываний, перезапуска служб или выполнения любых других действий оркестрации.
Этот модуль использует концепцию блокирующих запросов Consul для отслеживания событий, транслируемых под заданным именем события.
Синопсис
local event = require "resty.consul.event"
local e, err = event.new({
host = "127.0.0.1",
port = 8500,
})
if err then
ngx.log(ngx.ERR, err)
end
e:watch("foo", function(event)
ngx.log(ngx.INFO, "i got ", ngx.decode_base64(event.payload))
end)
Использование
new
синтаксис: e, err = event.new(opts?)
Создает новый объект наблюдения. opts может быть таблицей со следующими параметрами:
host: Строка, определяющая хост Consulport: Число, определяющее порт Consultimeout: Число, в секундах, которое передается в API блокирующего запроса Consul через параметрwait. Это значение также используется для определения таймаутов на уровне TCP, которые устанавливаются выше, чем таймаут на уровне приложения.ssl_verify: Логическое значение, определяющее, следует ли проверять сертификат TLS, представленный удаленным сервером Consul.token: Строка, определяющая токен ACL Consul, который отправляется через заголовок запросаX-Consul-Token.
watch
синтаксис: e:watch(name, callback, initial_index, seen_ids)
Отслеживает API событий Consul для событий, транслируемых под заданным name, и выполняет функцию callback. callback получает один параметр event, который содержит тело одного события, как это определено в Consul Events API. Функции обратного вызова обернуты в pcall, поэтому безопасно выбрасывать ошибку из этой функции. Функции обратного вызова могут возвращать одно значение, но это значение в значительной степени не имеет смысла; в настоящее время это единственное значение записывается как отладочная запись.
Значения initial_index и seen_ids являются необязательными и могут использоваться для инициализации наблюдения в определенном состоянии в кольце событий Consul. initial_index ожидается как строка, выданная предыдущим заголовком X-Consul-Index. seen_ids ожидается как список значений ID событий Consul, для которых события обратного вызова не должны выполняться. Например, текущее состояние буфера событий можно использовать для инициализации данного наблюдения:
local h = require("resty.http").new()
-- получить текущие события
local res, err = h:request_uri("http://127.0.0.1:8500/v1/event/list?name=foo")
if err then
ngx.log(ngx.ERR, err)
end
local event = require "resty.consul.event"
local e, err = event.new({
host = "127.0.0.1",
port = 8500,
})
if err then
ngx.log(ngx.ERR, err)
end
local l = {}
for _, e in ipairs(require("cjson").decode(res.body)) do
table.insert(l, e.ID)
end
ngx.timer.at(0, function()
e:watch(
"foo",
function(p) ngx.log(ngx.DEBUG, p.payload) end,
res.headers["X-Consul-Index"],
l
)
end)
Примечание: Тело этой функции выполняется в бесконечном цикле, чтобы отслеживать API событий Consul бесконечно. В результате настоятельно рекомендуется вызывать эту функцию внутри фонового таймера, созданного с помощью ngx.timer.at
Тестирование
Для этого репозитория предоставлен набор тестов. Тесты написаны с использованием Test::Nginx и выполняются с помощью prove.
Чтобы наилучшим образом протестировать поведение библиотеки, набор тестов ожидает, что сервер Consul будет запущен и доступен. По умолчанию Consul доступен по адресу 127.0.0.1:8500; хост и порт Consul можно переопределить, определив переменные окружения TEST_NGINX_CONSUL_ADDR и TEST_NGINX_CONSUL_PORT, соответственно.
GitHub
Вы можете найти дополнительные советы по настройке и документацию для этого модуля в репозитории GitHub для nginx-module-consul-event.