micro-toolkit/zmq-service-suite-broker-js

View on GitHub
bin/zss-broker

Summary

Maintainability
Test Coverage
#!/usr/bin/env node
var Broker = require('../lib/broker');
var Logger = require('logger-facade-nodejs');
var LoggerConsolePlugin = require('logger-facade-console-plugin-nodejs');

// this is the default config
var config = {
  level: process.env.MICRO_BROKER_LOG_LEVEL || 'info',
  timeFormat: process.env.MICRO_BROKER_LOG_TIMEFORMAT || 'YYYY-MM-DD HH:mm:ss.SSS',
  messageFormat: '%time | %level | %logger - %msg',
  json: process.env.MICRO_BROKER_LOG_JSON || false
};

var plugin = new LoggerConsolePlugin(config);
Logger.use(plugin);

function getIntOrDefault(val, defaultVal) {
  var num = parseInt(val, 10)
  if (num) { return num; }
  return defaultVal;
}

var broker = new Broker({
  backend: process.env.MICRO_BROKER_BE_ADDR || 'tcp://0.0.0.0:7776',
  frontend: process.env.MICRO_BROKER_FE_ADDR || 'tcp://0.0.0.0:7777',
  smi: {
    // heartbeat interval in ms
    heartbeat: getIntOrDefault(process.env.MICRO_BROKER_HEARTBEAT, 1000),
    // max ttl for a service in ms
    maxTTL: getIntOrDefault(process.env.MICRO_BROKER_MAX_TTL, 2000),
    // refresh service ttl update interval in ms
    updateInterval: getIntOrDefault(process.env.MICRO_BROKER_UPDATE_INT, 500)
  }
});

function close(exitSignal) {
  broker.stop();

  // logging is deferred, to prevent losing log information we should exit
  // on next available execution
  setImmediate(function () { process.exit(exitSignal) });
}

process.on('uncaughtException', function (err) {
  log.error(err, 'The application exit due to an uncaught exception, reson: %s',
    err.message);
  close(1);
});

process.on('SIGINT', close);
process.on('SIGTERM', close);

broker.run();