/** * Redis客户端封装。 * Redis客户端封装发布订阅(redis只要使用了发布订阅,这个client不能做其他操作) * * 注意Redis使用Promises保证调用流程。 * * https://github.com/NodeRedis/node_redis * * author: linzhuo * since: 2016/12/09 */ "use strict"; let redis = require('redis'); let configFile = require('../../include/commons').CONFIG_FILE; let config = require('../../resources/config/' + configFile); let log = require("../../util/log.js"); let redisSubClient = null; class RedisSubClient { constructor() { var redisConfig = config.innerRedisConfig; redisConfig.retry_strategy = function(options){ log.info("sub Redis重新连接次数:"+options.times_connected); if (options.error.code === 'ECONNREFUSED') { log.error('sub Redis连接被拒绝'); } if (options.times_connected > 10) { log.error('sub Redis重试连接超过十次'); } return Math.max(options.attempt * 100, 3000); } this._connection = redis.createClient( config.innerRedisConfig ); this._connection.auth(config.innerRedisConfig.password||"",function(){ console.log('sub Redis通过认证'); }); this._connection.on('connect', function (res) { log.info('sub Redis is connected.'); }); this._connection.on('error', function (res) { log.error("sub Redis connect failed."); }) } get connection() { return this._connection; } static redisClient() { if (redisSubClient == null) { redisSubClient = new RedisSubClient(); } return redisSubClient; } } function uncaughtExceptionHandler(err){ if(err && err.code == 'ECONNREFUSED'){ //do someting }else{ log.error(err+" exit in sub Redis"); } } process.on('uncaughtException', uncaughtExceptionHandler); module.exports = RedisSubClient;