Ich habe eine MongoDB-Instanz und zwei JavaScript-Dienste auf einem Linux-Server. Der erste Dienst, moscaService.js, überwacht MQTT-Themen auf dem Server und zeichnet auf, was in einer MongoDB-Sammlung gesendet wird. Der zweite Dienst, integrationService.js, wird jede Sekunde ausgeführt und liest Daten aus derselben MongoDB-Sammlung. Wenn ein neues oder mehrere neue Register vorhanden sind, wird er an Ubidots gesendet.Wie wird eine MongoDB-Clientverbindung bei einem Fehler ordnungsgemäß beendet?
Das Problem ist, dass beide Dienste auf der gleichen IP/Port arbeiten: localhost: 27017; und wenn es eine Gelegenheit gibt, bei der beide gleichzeitig aktiv sind (zB moscaService.js zeichnet etwas auf und dann versucht der integrationService.js eine Verbindung herzustellen), wird ein Verbindungsfehler auftreten und der Dienst wird neu gestartet.
Hier sind die Verbindungsteile beiden Dienste:
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://127.0.0.1:27017/myGateway';
//integrationService.js
var job1 = new CronJob('*/1 * * * * *', function() {
MongoClient.connect(url, function(err, db) {
if(err != null) {
logger.error({message: 'Connection error: ' + err});
process.exit(0);
} else {
executeService();
}
function executeService() {
// execution block
}
});
}, null, true, timeZone);
//moscaService.js
server.on('published', function(packet, client) {
//the packet is read here
MongoClient.connect(url, function(err, db) {
if(err != null) {
logger.error({message: 'Connection error: ' + err});
process.exit(0);
} else {
executeService();
}
function executeService() {
// execution block
}
});
});
Was ich brauche, ist ein Weg, um richtig die err
zu behandeln, anstatt nur den Dienst austreten, denn wenn es neue Nachrichten veröffentlicht werden, während der Dienst Neustart, sie werden verloren gehen. So etwas wie testen, ob der Port vor dem Verbinden geöffnet ist, oder einen anderen Port öffnen.
Ich habe versucht, eine andere Instanz von MongoDB auf einem anderen Port zu erstellen, damit jeder Dienst auf einen hört, aber es sieht so aus, als ob Mongo mehr als eine Instanz sperrt, wenn es versucht, sich mit derselben Datenbank zu verbinden.
Die Codeausschnitte hier sind nur ein kleiner Teil; Wenn jemand mehr Antworten benötigt, sag es einfach und ich füge sie hinzu.