local service_name = ARGV local consumer_name = ARGV local CONSUMER_TTL = ARGV
local function keepalive(service, consumer)
redis.call("SET", service .. ":" .. consumer .. ":alive", "true", "PX", CONSUMER_TTL) redis.call("SADD", service .. ":consumers", consumer)
end
local function cleanup(service)
local consumer_index_key = service .. ":consumers" local consumers = redis.call("SMEMBERS", consumer_index_key) for _, consumer in ipairs(consumers) do local consumer_status_key = service .. ":" .. consumer .. ":alive" local alive = redis.call("GET", consumer_status_key) if not alive then redis.call("SREM", consumer_index_key, consumer) end end
end
local function heartbeat(service_name, consumer_name)
-- keep consumer alive keepalive(service_name, consumer_name) -- clean up dead consumers cleanup(service_name) return true
end
return heartbeat(service_name, consumer_name)