сервер nodejs восстанавливается после сбоя - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь создать отказоустойчивые и отказоустойчивые сервисы. В качестве теста я намеренно заставляю его аварийно завершать работу с неопределенной переменной вне блока try-catch.

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

При первой ошибке ECONNRESET

{
    "code": "ECONNRESET",
    "message": "socket hang up",
    "stack": "Error: socket hang up\n    at createHangUpError (_http_client.js:323:15)\n    at Socket.socketOnEnd (_http_client.js:426:23)\n    at Socket.emit (events.js:203:15)\n    at endReadableNT (_stream_readable.js:1145:12)\n    at process._tickCallback (internal/process/next_tick.js:63:19)"
}

Повторный вызов той же службы ECONNREFUSED

{
    "code": "ECONNREFUSED",
    "message": "connect ECONNREFUSED 172.20.0.4:3000",
    "stack": "Error: connect ECONNREFUSED 172.20.0.4:3000\n    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:14)"
}

Микросервис - код с преднамеренной ошибкой

function getEmployee() {
    return new Promise(function (resolve, reject) {
        let sql = "SELECT * FROM employee";
        db.query(sql, function(error, result){
            console.log(a); // undefined var
            try {
                if(error) {
                    reject({status: 500, result: error});
                } else {
                    resolve({status: 200, result: result});
                }
            } catch(err) {
                reject({status: 500, result: err});
            }
        });
    });
};

Код, вызывающий конечную точку микросервиса

function getEmployee() {
    return new Promise(function (resolve, reject) {
        http.request({
            method: "GET",
            hostname: "localhost",
            port: 3000,
            path: "/employees"
        }, function(response){
            let buffers = [];
            response.on("data", buffers.push.bind(buffers));
            response.on("end", function(){
                let data = JSON.parse(Buffer.concat(buffers).toString());
                response.statusCode == 200 ? resolve(data) : reject(data);
            });
        }).on("error", reject).end();
    });
};

Вопрос в том, как мне приблизиться к тому, чтобы сервер nodejs восстанавливался после ошибок и проходили последующие вызовы к этой конечной точке или другим конечным точкам?

...