2016-04-14 7 views
0

redlockモジュールを使用しようとしていますが、私が通過できないエラーに直面しています。ここでノードjsのRedlockエラー

は私redlockファイルは次のようになります。私は別のモジュールからlockRessource関数を呼び出すしようとすると

var redis = require('redis'); 
var Redlock = require('redlock'); 
var logger = require('./logger.js'); 

var client; 

module.exports.redisConnection = function(port,host){ 
    client = redis.createClient(port,host); 

    client.on('connect',function(){ 
     logger.info("Redis default connection open to "+host+":"+port); 
    }); 

    client.on('error',function(err){ 
     logger.info("Redis default connection error "+err); 
     logger.info("Redis Path : "+host+":"+port); 
    }); 

    process.on('SIGINT', function() { 
     client.quit();  
     logger.info("Redis default connection disconnected"); 
     process.exit(0); 
    }); 
}; 

var redlock = new Redlock(
    [client], 
    { 
     driftFactor : 0.01, 
     retryCount : 15, 
     retryDelay : 200 
    } 
); 

redlock.on('clientError', function(err) { 
    logger.info("A Redis Error Has Occurred : "+err); 
}); 

module.exports.lockRessource = function(ressource_id,callback){ 
    redlock.lock(ressource_id,2000,function(err,lock){ 
     if(err){ 
      callback(err,null); 
     } 
     else{ 
      callback(null,lock); 
     } 
    }); 
}; 

module.exports.unlockLock = function(lock,callback){ 

    lock.unlock(function(err){ 
     if(err){ 
      callback(true,null); 
     } 
     else{ 
      callback(null,true); 
     } 
    }); 
}; 

、私はエラーを取得する:

2016-04-14T16:28:55.020 - info:TypeError:未定義のプロパティ 'set'を読み取れません (/usr/app/node_modules/redlock/redlock.js:260:18) /usr/app/node_modules/redlock/redlock.js:314: 12 at Array.forEach(ネイティブ) 試行時(/usr/app/node_modules/redlock/redlock.js:313:24) at /usr/app/node_modules/redlock/redlock.js:318:10 at Promise._execute(/usr/app/node_modules/redlock/node_modules/bluebird/js/release/debuggability.js:272:9) Promise._resolveFromExecutor(/usr/app/node_modules/redlock/node_modules/bluebird/js/release/promise.js:474:18) の新しいPromise(/ usr/app/node_modules/redlock/node_modules/bluebird/js/Redlock.lock(/usr/app/node_modules/redlock/redlock.js:249:9) (Redlock.lock(/ usr/app/node_modules/redlock/redlock)にあります。 js:111:14) at Object.module.exports.lockRessource(/usr/app/redisdata.js:42:10)

これはどこから来たのでしょうか?私はそのモジュールで狂ったことをしていないようです。

ありがとうございます!

答えて

0

クライアントが割り当てられた後にredlockを開始します。

あなたredlockファイルは次のようになります。あなたはそのモジュールを使用する場合は

var redis = require('redis'); 
var Redlock = require('redlock'); 
var logger = require('./logger.js'); 

var client; 
var redlock; 

module.exports.redisConnection = function(port,host){ 
    client = redis.createClient(port,host); 
    redlock = new Redlock(
     [client], 
     { 
      driftFactor : 0.01, 
      retryCount : 15, 
      retryDelay : 200 
     } 
    ); 

    client.on('connect',function(){ 
     logger.info("Redis default connection open to "+host+":"+port); 
    }); 

    client.on('error',function(err){ 
     logger.info("Redis default connection error "+err); 
     logger.info("Redis Path : "+host+":"+port); 
    }); 

    redlock.on('clientError', function(err) { 
     logger.info("A Redis Error Has Occurred : "+err); 
    }); 

    process.on('SIGINT', function() { 
     client.quit(); 
     logger.info("Redis default connection disconnected"); 
     process.exit(0); 
    }); 
}; 

module.exports.lockRessource = function(ressource_id,callback){ 
    redlock.lock(ressource_id,2000,function(err,lock){ 
     if(err){ 
      callback(err,null); 
     } 
     else{ 
      callback(null,lock); 
     } 
    }); 
}; 

module.exports.unlockLock = function(lock,callback){ 

    lock.unlock(function(err){ 
     if(err){ 
      callback(true,null); 
     } 
     else{ 
      callback(null,true); 
     } 
    }); 
}; 

、最初redisConnectionを呼び出します。
上記のファイル名が "redlock.js"であるとします。

resource = require('./redlock.js') 

resource.redisConnection(6379, "127.0.0.1") 
resource.lockRessource("your resourceId", function(err, lock) { })