UNPKG

microservice-support-toolkit

Version:

A global module with commons utilities for microservice support

97 lines (85 loc) 2.36 kB
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 };