我使用的是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)
答案 0 :(得分:0)
将此行添加到结尾,,,
process.on('uncaughtException', function (err) {
console.log(err);
});
通过这个,如果有任何未捕获的例外,客户端将不会停止。
但是,要连接到error
上的其他代理,必须更改上面kafka.Client (problem line number - 3)
中使用的代理IP地址。