microservice-support-toolkit
Version:
A global module with commons utilities for microservice support
97 lines (85 loc) • 2.36 kB
JavaScript
const { promisify } = require('util');
const { Eureka } = require('eureka-js-client');
const ip = require('ip');
const logger = require('./logger');
let client = null;
const register = ({
appName,
hostName,
port,
eurekaHostName,
eurekaPort = 8761,
registerWithEureka = true,
fetchRegistry = true
}) => (
new Promise((resolve, reject) => {
const APP_NAME = appName;
const IP = ip.address();
const HOSTNAME = hostName;
const PORT = port;
const EUREKA_HOST = eurekaHostName;
const EUREKA_PORT = eurekaPort;
const EUREKA_REGISTER = registerWithEureka;
const EUREKA_FETCH_REGISTRY = fetchRegistry;
const eureka = new Eureka({
instance: {
app: APP_NAME,
hostName: IP,
instanceId: `${HOSTNAME}:${PORT}`,
ipAddr: IP,
vipAddress: `${HOSTNAME.toUpperCase()}`,
statusPageUrl: `http://${HOSTNAME}:${PORT}/actuator/info`,
healthCheckUrl: `http://${HOSTNAME}:${PORT}/actuator/health`,
port: {
$: PORT,
'@enabled': true
},
dataCenterInfo: {
'@class': 'com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo',
name: 'MyOwn'
},
registerWithEureka: EUREKA_REGISTER,
fetchRegistry: EUREKA_FETCH_REGISTRY
},
eureka: {
host: EUREKA_HOST,
port: EUREKA_PORT,
servicePath: '/eureka/apps/',
heartbeatInterval: 30000
}
});
eureka.stop = promisify(eureka.stop);
logger.info('Eureka registry starting...');
eureka.start(err => {
if (err) {
logger.error('Eureka start error', err);
return reject(null);
}
client = eureka;
resolve(eureka);
});
})
);
const deregister = async () => {
try {
if (client) {
logger.info('Eureka deregister...');
await client.stop();
client = null;
return true;
}
return null;
}
catch (err) {
throw err;
}
};
const getInstancesByAppId = (appId) => client.getInstancesByAppId(appId);
const getInstancesByVipAddress = (vipAddress) => client.getInstancesByVipAddress(vipAddress);
module.exports = {
register,
deregister,
getInstancesByAppId,
getInstancesByVipAddress,
client: () => client
};