lua-resty-consul

从 Consul 加载 ngx_lua 的配置

$ opm get huangnauh/lua-resty-consul

名称

lua-resty-consul - 从 Consul 加载 ngx_lua 的配置

状态

该库虽然仍在实验阶段,但已经可以使用。

Lua API 仍在发展中,未来可能会发生变化。

描述

这个 Lua 库可以帮助 OpenResty/ngx_lua 用户从 Consul 加载配置。

  • resty.consul.api 目前提供 Consul Key/Value 存储的 GET api

  • resty.consul.config 为 ngx_lua 提供动态配置,并为 lua-resty-checkups 提供上游配置。

  • resty.consul.loadlua-resty-load 提供 load_init 脚本/模块。

摘要

        http {
            lua_package_path "/path/to/lua-resty-consul/lib/?.lua;/path/to/lua-resty-checkups/lib/?.lua;/path/to/lua-resty-load/lib/?.lua;;";
            
            init_by_lua '
                local rload  = require "resty.load"
                local config = require "config"
                consul.init(config)
                rload.init(config)
            ';
            
            init_worker_by_lua '
                local checkups = require "resty.checkups.api"
                local config = require "config"
                        checkups.prepare_checker(config)
                        checkups.create_checker()
                        local rload  = require "resty.load"
                rload.create_load_syncer()
            ';
        }
        
        server {
            location = /t {
                content_by_lua '
                        -- script
                    local abc = require "module.abc"
                    ngx.say(abc.version)
                    -- upstream config
                    local cjson = require "cjson.safe"
                        ngx.say(cjson.encode(config.test))
                ';
                }
                location = /config_script {
                content_by_lua '
                    local config = require "config"
                    local api = require "resty.consul.api"
                    ngx.say(api.get_kv_blocking(config.consul.cluster, config.consul.config_key_prefix .. "lua/module.abc?raw"))
                ';
                }
                location = /config_upstream {
                content_by_lua '
                    local config = require "config"
                    local api = require "resty.consul.api"
                    ngx.say(api.get_kv_blocking(config.consul.cluster, config.consul.config_key_prefix .. "upstreams/test?raw"))
                ';
                }
        }

方法

config.init

语法: ok, err = consul.config.init(config)

上下文: init_by_lua*

初始化库。如果失败,则返回 nil 和一个描述错误的字符串。

可以将 Lua 表格 config 作为此方法的唯一参数来指定 load_init consul 配置。

  • config_key_prefix Consul Key/Value 存储端点的键前缀。

  • config_positive_ttl 缓存有效数据的 TTL。

  • config_negative_ttl 缓存查找失败的 TTL。

  • config_cache_enable 一个布尔值,指示是否启用 lua-resty-shcache 来缓存配置。

load:new

语法: load_object, err = consul.load:new(config)

创建一个加载对象。如果失败,则返回 nil 和一个描述错误的字符串。

  • config

    只是 consul.config.init 中的参数。

load:lkeys

语法: keys, err = load_object:lkeys()

检索一个 Lua 数组,该数组包含来自 Consul K/V 存储的所有脚本/模块名称。如果失败,则返回 nil 和一个描述错误的字符串。

load:lget

语法: code, err = load_object:lget(key)

从 Consul K/V 存储中检索脚本/模块名称 key 的代码。如果失败,则返回 nil 和一个描述错误的字符串。

load:lversion

语法: version, err = load_object:lversion()

从 Consul K/V 存储中检索当前代码的版本。这是可选的,用于回退和版本检查。version 不超过 32 个字符。

如果失败,则返回 nil 和一个描述错误的字符串。

api.get_kv

语法: value, err = api.get_kv(cluster, key, options_table?)

从 Consul K/V 存储中检索键 key 的值,不阻塞。

可以将一个可选的 Lua 表格作为此方法的最后一个参数。

  • default

如果键不存在,则返回此选项。

  • decode

    如果设置了此选项,则在返回之前对值进行解码。

api.get_kv_blocking

语法: value = api.get_kv_blocking(key, options_table?)

类似于 api.get_kv 方法,但在当前连接上阻塞。

作者

又拍云

版权和许可

此模块根据 BSD 许可证授权。

版权所有 (C) 2016,由又拍云所有。

版权所有。

在满足以下条件的情况下,允许以源代码和二进制形式重新分发和使用,无论是否修改。

  • 源代码的重新分发必须保留上述版权声明、此条件列表以及以下免责声明。

  • 二进制形式的重新分发必须在随分发提供的文档和/或其他材料中复制上述版权声明、此条件列表以及以下免责声明。

本软件由版权持有人和贡献者“按原样”提供,并且任何明示或暗示的保证,包括但不限于适销性和特定用途适用性的暗示保证,均不作任何保证。在任何情况下,版权持有人或贡献者均不对任何直接、间接、附带、特殊、惩戒性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润损失;或业务中断),无论其原因如何以及责任理论如何,无论是基于合同、严格责任或侵权行为(包括疏忽或其他原因),即使已被告知可能发生此类损害,也不会承担任何责任。

作者

huangnauh huanglibo2010@gmail.com

许可证

2bsd

版本