node.js and zookeeper
发布于 3年前 作者 vincentking 2544 次浏览

node-zookeeper运行在node0.8.2上好像有问题,还是哪个版本都有问题,谁玩过吗?指教一下啊。

12 回复

我正在用,0.8.1,目前来看正常,会报一个Warn:

ZOO_WARN@zookeeper_interest@1557: Exceeded deadline by 6667ms

目前来看没问题。

我说清楚点吧 node.js 0.8.2 zookeeper 默认配置 node-zookeeper里面有个example.js,只是把zk.close ();给注释了,然后起一个http端口,让server一直保持在线。运行之后,zookeeper是会建立一个临时节点,但node.js并没有关闭,临时节点几秒钟之后就会消失。同样的zookeeper用java就没有任何问题。 我当中出什么错了吗?

function ZkClient(hosts){

    this.zk = newZk(hosts, this);//

}



function newZk(hosts, zkClient){

    var zk = new ZOOKEEPER();

    var timeout = 60000;

    var options = {connect:hosts, timeout:timeout, debug_level:ZOOKEEPER.ZOO_LOG_LEVEL_INFO, host_order_deterministic:false};

    zk.init (options);

    zk.on('connect', function(zkk){

        console.log('zk session established, id = %s', zkk.client_id);

    });

    zk.on('close',function(zkk){

        console.log("zk session close...");

        //zkClient.zk = newZk(hosts, zkClient);

    });



    return zk;

}





var zk = new ZkClient(hosts).zk;



/**

  * @path /thrift_services/nodis

  * @node 192.168.126:9998

  */

exports.registerService = function(path, node){

    // EPHEMERAL:创建临时节点,ZooKeeper在感知连接机器宕机后会清除它创建的瞬节点

    zk.a_create(path + '/' + node, '', ZOOKEEPER.ZOO_EPHEMERAL, function (rc, error, path)  {

        if (rc != 0){//error occurs

            console.log('node create result: %d, error: "%s", path: %s', rc, error, path);

        }

        else{

            console.log('node create result: ok, path: %s', path);

        }

    });

};

节点不会消失。。。

我在写java和node.js使用thrift通信,用zookeeper协同,稍后放出

就这么看,这段代码和例子没多大区别,明天回公司试,现在好累,谢谢你的代码。

@vincentking 注意timeout时间的设置,以及zookeeper本身的参数设置。从java的源码看,这个timeout很坑爹。node-zookeeper使用的是c的client,没看过源码,实现应该差不多。

2012-07-26 11:11:32,023:26169:ZOO_ERROR@handle_socket_error_msg@1719: Socket [127.0.0.1:2181] zk retcode=-4, errno=112(Host is down): failed while receiving a server response 2012-07-26 11:11:32,023:26169:ZOO_ERROR@zk_io_cb@247: yield:zookeeper_process returned error: -4 - connection loss

google了下,果然是 connection loss 的问题,问题是你怎么没有啊???你的zk的配置是怎么样的?

@vincentking

//The number of milliseconds of each tick
tickTime=2000
//The number of ticks that the initial 
//synchronization phase can take
initLimit=10
//The number of ticks that can pass between 
//sending a request and getting an acknowledgement
syncLimit=5
//the directory where the snapshot is stored.
dataDir=../../data
//the port at which the clients will connect
clientPort=2181

你试试看,这个是测试机上的,还没出过问题

@sumory 我也是这样的配置,现在又莫名的可以了,越搞越乱了,这样我都不知道要不要相信zk了。

@vincentking 哈哈,zk很多公司都在用啊

@sumory 你说的对,既然用了就好好用,有问题解决就行了,一直到现在都正常,先不管了,呵呵。

回到顶部