kafka-node,如何在代理关闭时保持nodejs连接?

时间:2015-05-27 15:00:53

标签: node.js apache-kafka

我使用的是Ubuntu 14.04。我只是在npm安装kafka-node并使用kafka_0.9.2-0.8.2.1。我有一个nodejs和两个代理,kafka1,kafka2。动物园管理员在kafka1。在nodejs client中执行以下代码:(在node_js_machine中)。当我杀死nodejs当前连接的kafka进程时。 nodejs粉碎并退出。主要问题在于错误处理,如果我按如下方式评论4行(问题行),那么即使我杀死borker,节点也不会崩溃。我想知道连接的代理nodejs何时关闭,如何捕获此事件并重新连接到另一个代理?我的错误处理是否正确?

var csUtil        = require('cs-js-common');
var kafka = require('kafka-node'),
    Producer = kafka.Producer,
    KeyedMessage = kafka.KeyedMessage,
    client = new kafka.Client('kafka1:2181/','AppAnalyzerStorm'),
    producer = new Producer(client),
    km = new KeyedMessage('key', 'message');
var kafkaConnected = false;

producer.on('ready',function(){
    kafkaConnected = true;
    log.info("kafka producer is connected");
     console.log("kafka producer is connected");
});


producer.on('error',function(err){
    log.error("error in producer on error"+err);
    console.log("producer error is invoked");

    kafka = require('kafka-node');                                             ===========problem line 1                                      
    Producer = kafka.Producer;                                                ===========problem line 2 
    client = new kafka.Client('kafka1:2181/','AppAnalyzerStorm');  ======problem line 3
    producer = new Producer(client);                                                          ======problem line 4
});


producer.send(xxxx) 

1 个答案:

答案 0 :(得分:0)

将此行添加到结尾,,,

process.on('uncaughtException', function (err) {
    console.log(err);
}); 

通过这个,如果有任何未捕获的例外,客户端将不会停止。

但是,要连接到error上的其他代理,必须更改上面kafka.Client (problem line number - 3)中使用的代理IP地址。