【问题标题】:Distributed lock of Hazelcast using nodejs使用nodejs的Hazelcast的分布式锁
【发布时间】:2018-05-05 00:04:14
【问题描述】:

我的 Hazelcast 集群服务器运行在 172.30.56.60、61、62

 [ 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 分布式锁定,

    // 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 建立分布式锁。

【问题讨论】:

    标签: node.js locking hazelcast distributed-system distributed-cache


    【解决方案1】:

    自己找到了答案,没意识到promise的回报,我的错(nodejs新手)

      // 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');
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多