discoverer
nodejs service discover
in dev now. document will be wrote later, thanks
Architecture
install
npm i discoverer --save
use server
const DiscovererServer = DiscovererServer; const server = ; serverstart;
service provider
const restify = ;const DiscovererClient = DiscovererClient; const listenPort = processenvPORT || 1234; const server = restify; const discovererClient = ; server; server; server discovererClient
service consumer
const DiscovererClient = DiscovererClient; // construct a new Discoverer clientconst discover = ; // create a client load balance api clientconst compute_server = discover; // wrap a request as a functionconst add = { return compute_server } // another js file// out: 3
environment variable
All config items can be configured by system env variables
server
- USE_AUTH, default is false, set "true" will enable http digest auth
- AUTH_USER, avoid server access by un auth user, system will generte a random str if it not set
- AUTH_PASS, avoid server access by un auth user, system will generte a random str if it not set
- MONGO_CONNECT_URI, required, default is mongodb://localhost/discoverer
- LISTEN_HOST, default is 0.0.0.0
- PORT, default is 3999
- CHECK_INTERVAL, default is 2s, 服务器会每隔几秒检测数据库中是否有超时的instance,有的话就会移除记录
client
- C_SERVER_URL, default is http://127.0.0.1:3999, 如果server配置了http basic auth, 需要在url中指明,例如: http://discover.example.com
- C_AUTH_USER, use to pass the server auth
- C_AUTH_PASS, use to pass the server auth
- C_SERVICE_NAME, required, default is hostname, 服务名非常重要, consumer也是通过这个名称拉取provider列表
- C_INSTANCE_URL, required, default is http://yourip:80, 这里配置的地址是被外部服务远程调用的地址
- C_INSTANCE_ID, if not set, server will give you one
- C_HEART_BREAK_INTERVAL, default is 15s
- C_NO_REGISTE, default is false, if set this flag is true, client无论如何都不会注册到服务器,即使显式的调用了_registe方法
tasks
- mongodb storage
- move operate to service layer, [cancel]
- add log
- client cli
- client default url is ip
- promisefy discoverer client
- api client, load balance, round method
- need a switch to adapt a client just want to consume services
- if there is not client info when renew, server should registe
- authorize should be more attention, security with http digest auth
- center config file
- command line var
- server side health check
- when ApiClient catch an exception, should refresh client list