UNPKG

coordinator-node-client

Version:

分布式协调服务node客户端,用于获取微服务的可用地址,参照eureka-js-client.

69 lines 2.41 kB
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; } };