首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用nodejs的Hazelcast分布式锁

使用nodejs的Hazelcast分布式锁
EN

Stack Overflow用户
提问于 2017-11-21 13:40:54
回答 1查看 310关注 0票数 0

我在172.30.56.60,61,62中运行了Hazelcast集群服务器

(i.e)

代码语言:javascript
复制
 [ Member {
    address: Address { host: '172.30.56.60', port: 5701, type: 4 },
    uuid: 'bd6428f0-e888-453f-872f-6fe8296d751d',
    isLiteMember: false,
    attributes: {} },
  Member {
    address: Address { host: '172.30.56.61', port: 5701, type: 4 },
    uuid: 'e0cd795a-0ca5-41ab-907a-492b61690a18',
    isLiteMember: false,
    attributes: {} },
  Member {
    address: Address { host: '172.30.56.62', port: 5701, type: 4 },
    uuid: '0a834ae8-e707-4b5b-945b-362bfea08cf5',
    isLiteMember: false,
    attributes: {} } ]

我尝试使用以下代码使用nodejs实现Hazelcast分布式锁定,

代码语言:javascript
复制
    // Initialize the hazelcast client instance.
var HazelcastClient = require('hazelcast-client').Client;
var Config = require('hazelcast-client').Config; 
var config = new Config.ClientConfig();
config.networkConfig.addresses = [{host: '172.30.56.60', port: '5701'},{host: '172.30.56.61', port: '5701'}, {host: '172.30.56.62', port: '5701'}]; 
var lock = {};
var sleep = require('sleep');
HazelcastClient
    .newHazelcastClient(config)       
    .then(function (hazelcastClient) {  
        lock = hazelcastClient.getLock("lock1");
         // do stuff with lock
    lock.lock();
    console.log('Am locked in node with lock1...will be locked for 20 seconds');
    sleep.sleep(20);
    console.log('Unlocked now...');
    lock.unlock();
    process.exit();
    });

我逐个节点启动脚本,我期望逐个节点建立锁,但相反,它同时锁定所有节点。因此,它不是作为分布式锁工作的,所以所有脚本都在同一时间启动和结束(注意:为了测试,我提供了20秒睡眠)。

请告诉我,如何在Hazelcast中使用节点js建立分布式锁。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-22 04:43:14

我自己找到了答案,我没有意识到承诺的回报,我的坏(新到nodejs)

代码语言:javascript
复制
  // Initialize the hazelcast client instance.
var HazelcastClient = require('hazelcast-client').Client;
var Config = require('hazelcast-client').Config; 
var config = new Config.ClientConfig();
config.networkConfig.addresses = [{host: '172.30.56.60', port: '5701'},{host: '172.30.56.61', port: '5701'}, {host: '172.30.56.62', port: '5701'}]; 



var sleep = require('sleep');
// Test process
HazelcastClient
    .newHazelcastClient(config)       
    .then(function (hazelcastClient) {  
        var lock = hazelcastClient.getLock('rowId_tablename');
         // lock the code here
    lock.lock().then(function() { 
        console.log('Am locked in node with lock3...will be locked for 20 seconds');
        sleep.sleep(20);
        // unlock after process
        return lock.unlock();
    }).then(function() { 
        console.log('unlocked now');
    });
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47414558

复制
相关文章

相似问题

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