coordinator-node-client
Version:
分布式协调服务node客户端,用于获取微服务的可用地址,参照eureka-js-client.
69 lines • 2.41 kB
JavaScript
var _ = require('lodash');
module.exports = {
ADD: "added",//增加了新的服务
REMOVED: "removed",//注册的服务被删除
CHANGED: "changed",//注册的服务有变化
/**
* 获取本机ip地址
* @returns {Array}
*/
getServerAddresses: function () {
var os = require('os');
var ifaces = os.networkInterfaces();
var addresses = [];
Object.keys(ifaces).forEach(function (ifname) {
ifaces[ifname].forEach(function (iface) {
if ('IPv4' !== iface.family || iface.internal !== false) {
return;
}
addresses.push(iface.address);
});
});
return addresses;
},
/**
* 处理变化的服务,返回由应用名称及路径组成的对象
* @param services
* @returns {Array}
*/
serviceHandler: function (services) {
var apps = {};//服务
if (services) {
var _this = this;
_.forEach(services, function (instances, appId) {
//路径
apps[appId.toLowerCase()] = _this.instanceHandler(instances);
});
}
return apps;
},
/**
* 处理实例数组,将实例信息转为路径
* @param instances 实例数组
* @returns {Array} 返回路径数组
*/
instanceHandler: function (instances) {
var pathes = [];
var _this = this;
_.forEach(instances, function (instance, key) {
pathes.push(_this.getServerPath(instance));
});
return pathes;
},
/**
* 根据实例获取一个完整的ip方式的服务地址。
* @param instance app的实例。
* @returns {string} url地址,包括协议,ip和端口。例如:http://192.168.1.100:8080。
*/
getServerPath: function (instance) {
var url = "", http = "http://", https = "https://";
if (instance) {
if (instance.port && instance.port["@enabled"] == "true") {
url = http + instance.ipAddr + ":" + instance.port["$"];
} else if (instance.securePort && instance.securePort["@enabled"] == "true") {
url = https + instance.ipAddr + ":" + instance.securePort["$"];
}
}
return url;
}
};