Skip to content
A Netflix Eureka client for OpenResty/ngx_lua
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lualib/eureka
nginx/conf
README.md
dist.ini

README.md

Netflix Eureka client for Openresty/ngx_lua

is a Netflix Eureka client written for OpenResty.

Inspired by PavelLoparev/php-eureka-client.

Nginx Worker Service

Using eureka.workerservice to register nginx itself to 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'
    )
}

Client APIs

client:new(host, port, uri)

return the eureka client instance which uses eureka server at http://{host}:{port}{uri}, for example :

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

In case of error, nil will be returned as well as a string describing the error

client:register(appid, instancedata)

register new application instance to eureka server, appid is a string holding the name of your app

instancedata is a lua table conforms to this XSD, which you can build by eureka.instance

in case of success, true will be returned

in case of application or network error, nil will be returned as well as a string describing the error

in case of eureka server error, false will be returned as well as a string describing the error

client:heartBeat(appid, instanceid)

send application instance heartbeat for appid/instanceid

in case of success, a json string will be returned

in case of application or network error, nil will be returned as well as a string describing the error

in case of eureka server error, false will be returned as well as a string describing the error

if instanceid does not exist, ngx.null will be returned

client:deRegister(appid, instanceid)

de-register application instance for appid/instanceid

in case of success, true will be returned

in case of application or network error, nil will be returned as well as a string describing the error

in case of eureka server error, false will be returned as well as a string describing the error

client:getAllApps()

query for all instances registed in eureka server

in case of success, a json string will be returned

in case of application or network error, nil will be returned as well as a string describing the error

in case of eureka server error, false will be returned as well as a string describing the error

client:getApp(appid)

query for all appid instances

in case of success, a json string will be returned

in case of application or network error, nil will be returned as well as a string describing the error

in case of eureka server error, false will be returned as well as a string describing the error

client:getAppInstance(appid, instanceid)

query for a specific appid/instanceid

in case of success, a json string will be returned

in case of application or network error, nil will be returned as well as a string describing the error

in case of eureka server error, false will be returned as well as a string describing the error

client:getInstance(instanceid)

query for a specific instanceid

in case of success, a json string will be returned

in case of application or network error, nil will be returned as well as a string describing the error

in case of eureka server error, false will be returned as well as a string describing the error

client:getInstanceByVipAddress(vipaddress)

query for all instances under a particular vipaddress

in case of success, a json string will be returned

in case of application or network error, nil will be returned as well as a string describing the error

in case of eureka server error, false will be returned as well as a string describing the error

if vipaddress does not exist, ngx.null will be returned

client:getInstancesBySecureVipAddress(vipaddress)

query for all instances under a particular secure vipaddress

in case of success, a json string will be returned

in case of application or network error, nil will be returned as well as a string describing the error

in case of eureka server error, false will be returned as well as a string describing the error

if vipaddress does not exist, ngx.null will be returned

client:takeInstanceOut(appid, instanceid)

take instance out of service for appid/instanceid

in case of success, a json string will be returned

in case of failure, ngx.null will be returned

in case of application or network error, nil will be returned as well as a string describing the error

in case of eureka server error, false will be returned as well as a string describing the error

client:putInstanceBack(appid, instanceid)

move instance back into service for appid/insanceid

in case of success, true will be returned

in case of failure, ngx.null will be returned

in case of application or network error, nil will be returned as well as a string describing the error

in case of eureka server error, false will be returned as well as a string describing the error

client:removeOverriddenStatus(appid, instanceid)

remove the overriddenstatus for appid/instanceid

in case of success, true will be returned

in case of failure, ngx.null will be returned

in case of application or network error, nil will be returned as well as a string describing the error

in case of eureka server error, false will be returned as well as a string describing the error

client:updateAppInstanceMetadata(appid, instanceid, metadata)

update metadata for appid/instanceid

instancedata is a lua table holding key-value pairs to be set.

in case of success, true will be returned

in case of failure, ngx.null will be returned

in case of application or network error, nil will be returned as well as a string describing the error

in case of eureka server error, false will be returned as well as a string describing the error

InstanceData Builder

these following methods are used to build instancedata

use instance:new() to create new instancedata object

then use instance:set* to set attributes

finally use instance:export() to dump a lua table, which will be used at 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)

for example:

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())

Prerequisites

This library requires pintsized/lua-resty-http to be installed.

See Also

You can’t perform that action at this time.