私はMongoDBインスタンスと2つのJavaScriptサービスをLinuxサーバー上で実行しています。最初のサービスmoscaService.jsは、サーバー上のMQTTトピックをリッスンし、MongoDBコレクションに送信される内容を記録します。 2番目のサービス、integrationService.jsは毎秒実行され、同じMongoDBコレクション上のデータを読み込み、新しいレジスタ(またはそれ以上)があればそれをUbidotsに送信します。エラー時にMongoDBクライアント接続を正しく終了する方法は?
問題は、両方のサービスが同じIP /ポートで動作することです。localhost:27017;両方が同時にアクティブになっている場合(たとえば、moscaService.jsが何かを記録していて、次にintegrationService.jsが接続しようとする)、接続エラーが発生し、サービスが再開します。ここで
は、両方のサービスの接続部です:存在する場合、サービスがある一方で、新しいメッセージが公開されているので、私は必要なもの
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
}
});
});
は、適切にだけではなく、サービスを終了するerr
を処理する方法であります再起動すると、それらは失われます。接続する前にポートが開いているかどうかをテストしたり、別のポートを開いたりするようなものです。
私は別のポートでMongoDBの別のインスタンスを作成しようとしましたが、それぞれのサービスをリスンするようにしましたが、Mongoは同じデータベースに接続しようとすると複数のインスタンスをロックしているようです。
ここのコードスニペットはほんの一部です。誰かが答えるためにもっと多くの部品を必要とするならば、そう言いましょう。私はそれらを追加します。