首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点js中的Redlock错误

节点js中的Redlock错误
EN

Stack Overflow用户
提问于 2016-04-14 14:41:01
回答 1查看 4.1K关注 0票数 1

我试图使用红锁模块,但我面临一个错误,我无法通过。

以下是我的redlock文件的样子:

代码语言:javascript
复制
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);
        }
    }); 
};

当我尝试从另一个模块调用lockRessource函数时,会得到一个错误:

2016-04-14T16:28:55.020 - info: /usr/app/node_modules/redlock/redlock.js:314:12 at /usr/app/node_modules/redlock/redlock.js:314:12 at Array.forEach : TypeError:无法读取未定义属性“set”(原生)在/usr/app/node_ (/usr/app/node_modules/redlock/redlock.js:313:24) /redlock/redlock.js处进行尝试。::318:10 :10 (/usr/app/node_modules/redlock/node_modules/bluebird/js/release/debuggability.js:272:9) at Promise._resolveFromExecutor (/usr/app/node_modules/redlock/node_modules/bluebird/js/release/promise.js:474:18) at new Promise (/usr/app/node_modules/redlock/node_modules/bluebird/js/release/promise.js:77:14) at Redlock._lock(/usr/app/node_modules/redlock/redlock.js:249:9) at Redlock.lock (/usr/app/node_modules/redlock/redlock.js:111:14) at Object.module.exports.lockRessource (/usr/app/redisdata.js:42:10)

你知道这是从哪里来的吗?好像我对这个模块没做什么疯狂的事。

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-16 05:39:11

在客户端被分配后,Init红锁。

您的redlock文件看起来如下:

代码语言:javascript
复制
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“。

代码语言:javascript
复制
resource = require('./redlock.js')

resource.redisConnection(6379, "127.0.0.1")
resource.lockRessource("your resourceId", function(err, lock) { })
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36626487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档