microservice-support-stack
Version:
A global module with commons utilities to support for microservices
50 lines (44 loc) • 1.63 kB
JavaScript
const {
hystrixSSEStream: HystrixStream,
commandFactory: CommandFactory
} = require('hystrixjs');
const logger = require('./logger');
const stream = (request, response) => {
logger.info('Starting hystrix stream...');
response.append('Content-Type', 'text/event-stream;charset=UTF-8');
response.append('Cache-Control', 'no-cache, no-store, max-age=0, must-revalidate');
response.append('Pragma', 'no-cache');
return HystrixStream.toObservable().subscribe(
sseData => response.write('data: ' + sseData + '\n\n'),
err => console.error(err),
() => response.end()
);
};
const commandBuilder = (makeRequest, fallbackTo, errorHandler, serviceName, commandKey, configs = {}) => {
const TIMEOUT = configs.timeout || 3000;
const STATISTICAL_WINDOW_LENGTH = configs.statisticalWindowLength || 10000;
const STATISTICAL_WINDOW_NUMBER_OF_BUCKETS = configs.statisticalWindowNumberOfBuckets || 10;
CommandFactory.resetCache();
if (errorHandler) {
return CommandFactory.getOrCreate(commandKey)
.run(makeRequest)
.timeout(TIMEOUT)
.fallbackTo(fallbackTo)
.statisticalWindowLength(STATISTICAL_WINDOW_LENGTH)
.statisticalWindowNumberOfBuckets(STATISTICAL_WINDOW_NUMBER_OF_BUCKETS)
.errorHandler(errorHandler)
.build();
} else {
return CommandFactory.getOrCreate(commandKey)
.run(makeRequest)
.timeout(TIMEOUT)
.fallbackTo(fallbackTo)
.statisticalWindowLength(STATISTICAL_WINDOW_LENGTH)
.statisticalWindowNumberOfBuckets(STATISTICAL_WINDOW_NUMBER_OF_BUCKETS)
.build();
}
};
module.exports = {
commandBuilder,
stream,
};