lua-resty-eureka-client

netflix eureka 客户端,用于 ngx_lua/openresty

$ opm get xiaooloong/lua-resty-eureka-client

用于 Openresty/ngx_lua 的 Netflix Eureka 客户端

是为 [OpenResty][1] 编写的 [Netflix Eureka][3] 客户端。

受 [PavelLoparev/php-eureka-client][2] 启发。

Nginx 工作进程服务

使用 eureka.workerservice 将 nginx 本身注册到 Eureka

workerservice:run(eurekaserver, instancedata)

    init_worker_by_lua_block {
        (require 'eureka.workerservice'):run({
            host = '127.0.0.1',     -- eureka server address
            port = 8761,            -- eureka server port
            uri  = '/eureka/v2',    -- eureka server context uri, like '/eureka' or '/'
            timeval = 15,           -- heartbeat time interval in second, default value is 30s
            auth = {                -- optional, use it if your eureka server require http basic auth :)
                username = '',
                password = '',
            },
        },
            instancedata            -- eureka instance data, see 'InstanceData Builder'
        )
    }

客户端 API

client:new(host, port, uri)

返回 eureka 客户端实例,该实例使用 http://{host}:{port}{uri} 上的 eureka 服务器,例如

    local eureka = require 'eureka.client'
    local client, err = eureka:new(
                                    '127.0.0.1',    -- add 'resolver' directive in nginx.conf if using domainname
                                    8761,           -- port number
                                    '/eureka/v2',   -- eureka server context uri, like '/eureka' or '/'
                                    {               -- optional, use it if your eureka server require http basic auth :)
                                        username = '',
                                        password = '',
                                    }
                                )
    if not client then
        print('failed to create eureka client instance : ' .. err)
    end

如果发生错误,将返回 nil 以及描述错误的字符串

client:register(appid, instancedata)

将新的应用程序实例注册到 eureka 服务器,appid 是一个包含应用程序名称的字符串

instancedata 是一个符合此 [XSD][3] 的 Lua 表,您可以通过 eureka.instance 构建它

如果成功,将返回 true

如果发生应用程序或网络错误,将返回 nil 以及描述错误的字符串

如果发生 eureka 服务器错误,将返回 false 以及描述错误的字符串

client:heartBeat(appid, instanceid)

发送 appid/instanceid 的应用程序实例心跳

如果成功,将返回一个 JSON 字符串

如果发生应用程序或网络错误,将返回 nil 以及描述错误的字符串

如果发生 eureka 服务器错误,将返回 false 以及描述错误的字符串

如果 instanceid 不存在,将返回 ngx.null

client:deRegister(appid, instanceid)

注销 appid/instanceid 的应用程序实例

如果成功,将返回 true

如果发生应用程序或网络错误,将返回 nil 以及描述错误的字符串

如果发生 eureka 服务器错误,将返回 false 以及描述错误的字符串

client:getAllApps()

查询在 eureka 服务器中注册的所有实例

如果成功,将返回一个 JSON 字符串

如果发生应用程序或网络错误,将返回 nil 以及描述错误的字符串

如果发生 eureka 服务器错误,将返回 false 以及描述错误的字符串

client:getApp(appid)

查询所有 appid 实例

如果成功,将返回一个 JSON 字符串

如果发生应用程序或网络错误,将返回 nil 以及描述错误的字符串

如果发生 eureka 服务器错误,将返回 false 以及描述错误的字符串

client:getAppInstance(appid, instanceid)

查询特定的 appid/instanceid

如果成功,将返回一个 JSON 字符串

如果发生应用程序或网络错误,将返回 nil 以及描述错误的字符串

如果发生 eureka 服务器错误,将返回 false 以及描述错误的字符串

client:getInstance(instanceid)

查询特定的 instanceid

如果成功,将返回一个 JSON 字符串

如果发生应用程序或网络错误,将返回 nil 以及描述错误的字符串

如果发生 eureka 服务器错误,将返回 false 以及描述错误的字符串

client:getInstanceByVipAddress(vipaddress)

查询特定 vipaddress 下的所有实例

如果成功,将返回一个 JSON 字符串

如果发生应用程序或网络错误,将返回 nil 以及描述错误的字符串

如果发生 eureka 服务器错误,将返回 false 以及描述错误的字符串

如果 vipaddress 不存在,将返回 ngx.null

client:getInstancesBySecureVipAddress(vipaddress)

查询特定安全 vipaddress 下的所有实例

如果成功,将返回一个 JSON 字符串

如果发生应用程序或网络错误,将返回 nil 以及描述错误的字符串

如果发生 eureka 服务器错误,将返回 false 以及描述错误的字符串

如果 vipaddress 不存在,将返回 ngx.null

client:takeInstanceOut(appid, instanceid)

使 appid/instanceid 的实例停止服务

如果成功,将返回一个 JSON 字符串

如果失败,将返回 ngx.null

如果发生应用程序或网络错误,将返回 nil 以及描述错误的字符串

如果发生 eureka 服务器错误,将返回 false 以及描述错误的字符串

client:putInstanceBack(appid, instanceid)

使 appid/insanceid 的实例恢复服务

如果成功,将返回 true

如果失败,将返回 ngx.null

如果发生应用程序或网络错误,将返回 nil 以及描述错误的字符串

如果发生 eureka 服务器错误,将返回 false 以及描述错误的字符串

client:removeOverriddenStatus(appid, instanceid)

移除 appid/instanceidoverriddenstatus

如果成功,将返回 true

如果失败,将返回 ngx.null

如果发生应用程序或网络错误,将返回 nil 以及描述错误的字符串

如果发生 eureka 服务器错误,将返回 false 以及描述错误的字符串

client:updateAppInstanceMetadata(appid, instanceid, metadata)

更新 appid/instanceid 的元数据

instancedata 是一个 Lua 表,包含要设置的键值对。

如果成功,将返回 true

如果失败,将返回 ngx.null

如果发生应用程序或网络错误,将返回 nil 以及描述错误的字符串

如果发生 eureka 服务器错误,将返回 false 以及描述错误的字符串

InstanceData 构建器

以下方法用于构建 instancedata

使用 instance:new() 创建新的 instancedata 对象

然后使用 instance:set* 设置属性

最后使用 instance:export() 导出一个 Lua 表,该表将在 client:register() 中使用

  • instance:export()

  • instance:new()

  • instance:setInstanceId(string)

  • instance:setHostName(string)

  • instance:setApp(string)

  • instance:setIpAddr(string)

  • instance:setVipAddress(string)

  • instance:setSecureVipAddress(string)

  • instance:setStatus(string)

  • instance:setPort(number, enabled)

  • instance:setSecurePort(number, enabled)

  • instance:setHomePageUrl(string)

  • instance:setStatusPageUrl(string)

  • instance:setHealthCheckUrl(string)

  • instance:setDataCenterInfo(name, class, metadata)

  • instance:setLeaseInfo(table)

  • instance:setMetadata(table)

例如

    local i = require 'eureka.instance'
    local ins = i:new()
    
    local app = 'ngx-eureka-service'
    local host = 'localhost'
    local ip = '127.0.0.1'
    
    ins:setInstanceId(('%s:%s:%s'):format(ip, app, ngx.worker.pid()))
    ins:setHostName(host):setApp(app:upper())
    ins:setIpAddr(host):setVipAddress(host)
    ins:setStatus('UP'):setPort(80, true):setSecurePort(443, false)
    ins:setHomePageUrl('http://' .. host):setStatusPageUrl('http://' .. host .. '/status')
    ins:setHealthCheckUrl('http://' .. host .. '/check')
    ins:setDataCenterInfo('Amazon', 'com.netflix.appinfo.AmazonInfo', {
        data_center_test_key = 'data_center_test_value'
    })
    ins:setLeaseInfo({
        evictionDurationInSecs = 60,
    })
    ins:setMetadata({
        language = 'ngx_lua'
    })
    local ok, err = client:register(app:upper(), ins:export())

先决条件

此库需要安装 [pintsized/lua-resty-http][4]。

另请参阅

  • Eureka REST 操作:https://github.com/Netflix/eureka/wiki/Eureka-REST-operations

  • PavelLoparev/php-eureka-client:https://github.com/PavelLoparev/php-eureka-client

    [1]: https://openresty.org.cn/ [2]: https://github.com/PavelLoparev/php-eureka-client [3]: https://github.com/Netflix/eureka/wiki/Eureka-REST-operations [4]: https://github.com/pintsized/lua-resty-http =back

POD 错误

您好!以上文档存在一些编码错误,解释如下:

大约在第 363 行

=over 未关闭 =back

作者

xiaooloong

许可证

mit

依赖项

pintsized/lua-resty-http,luajit,nginx

版本