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/instanceid
的 overriddenstatus
如果成功,将返回 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
版本
-
netflix eureka 客户端,用于 ngx_lua/openresty 2018-06-19 02:52:33
-
netflix eureka 客户端,用于 ngx_lua/openresty 2018-05-11 05:32:47
-
netflix eureka 客户端,用于 ngx_lua/openresty 2018-05-11 05:05:57
-
netflix eureka 客户端,用于 ngx_lua/openresty 2018-05-10 08:45:17
-
netflix eureka 客户端,用于 ngx_lua/openresty 2018-05-09 10:24:01
-
netflix eureka 客户端,用于 ngx_lua/openresty 2018-05-08 09:39:11