Wir haben einen einfachen node.js-Dienst, der auf einem Standby-Server ausgeführt wird, um Abfragen hoher Anzahl von einer Anwendung zu behandeln, um die Last auf dem Apache-Hauptserver zu entlasten.Node.js mysql-Abfrage wird nicht ausgeführt
Einer der ausgeführten Anrufe führt eine Abfrage für den anderen Server aus, führt die Abfrage jedoch manchmal nicht aus. Der Code ist hier:
app.get(/^\/rest\/[0-9]*\/*/, function (req, res) {
... get controller from url
if (controller=='appListEvents'){
console.log("appListEvents from "+req.connection.remoteAddress+" eid="+eid+" at "+getNow());
var sql="SELECT * from updates where status='PENDING' and eid = "+eid+" order by stamp, id";
connection.query(sql, function (error, rows, fields) {
res.type('application/xml');
if (error) {
console.log("appListEvents Query error is "+error);
res.send('<root><response>AppListEvents Query Error</response></root>');
return;
}
var xml = eventsToXml(rows);
res.send(xml);
console.log("appListEvents from "+req.connection.remoteAddress+" eid="+eid+"return XML" + xml);
return;
})
console.log("appListEvents Out of connection, from "+req.connection.remoteAddress+" eid="+eid);
}
Meiner Meinung nach sollte die aus der Verbindung Nachricht nie angezeigt - entweder gibt es Daten aus der Abfrage, wobei in diesem Fall einige xml zurück gesendet wird, oder es gibt keine Daten, in dem Fall Der exentsToXml gibt XML ohne Daten zurück.
Dies passiert, wie ich gerade beschrieben habe, aber SOMETIMES Anrufe an den Dienst auszulösen die Out-of-Connection-Nachricht. Die Fehlerbehandlung im if (error) Teil wird nie ausgelöst.
Alles, was ich denken kann, ist, dass Abfragen gelöscht werden, weil ich die Datenbank überlasten möchte: Wie schütze ich mich vor allem, was schief läuft?
Also, auf dieser Basis sollte Out of connection * immer * (mit beliebiger Verzögerung) entweder durch den console.log Fehler oder die console.log Erfolgsmeldung folgen? (Wenn der asynchrone Callback schließlich ausgeführt wird) –
Ich denke, es wird immer so funktionieren –