Изящно обрабатывать исключения в Nodejs

Я использую nodejs для создания автономной системы кэширования для веб-службы. По сути, он время от времени опрашивает публичные методы веб-сервиса и кэширует данные в memcached. Работает просто отлично.

Тем не менее, я хочу, чтобы он был пуленепробиваемым и выдерживал любые необъяснимые исключения, которые приводили к остановке сервера. Я читал о различных подходах и считаю, что кластерный модуль действительно хорош для моих нужд. Однако я не буду использовать все ядра ЦП для своих целей, так как у меня работает только 1 поток и обновляется кеш.

Единственная причина, по которой я буду его использовать, - это возможность грациозного убийства рабочего и легкое разветвление нового.

var memwatch = require('memwatch'),
    cluster = require('cluster');

if (cluster.isMaster) {

    console.log('start cluster with 1 workers');
    cluster.fork();
    cluster.on('exit', function(worker) {
        console.log('worker %s died. restart...', worker.process.pid);
        cluster.fork();
    });
} else {
    var http = require('http'),
        app = require("./app.js");
    http.createServer().listen(9000);
    app.init();
}

process.on('uncaughtException', function (err) {
    console.error((new Date).toUTCString() + ' uncaughtException:', err.message)
    console.error(err.stack)
    process.exit(1)
})

memwatch.on("leak", function(){
    console.log("leak detected");
});

Считаете ли вы это правильным подходом к моей проблеме?

Спасибо

1 ответ

Решение

Если вы работаете только с одним работником, проще использовать forever или же pm2, они специально написаны для этой задачи. Если вы планируете добавить больше работников и использовать балансировку нагрузки кластера, то да, это, несомненно, правильный подход.

Другие вопросы по тегам