2017-01-25 3 views
1

Ich versuche einen Mosca MQTT Broker innerhalb einer Node.js Umgebung mit seinem MongoDB Backend in der Microsoft Azure Cloud zu betreiben. Der DocumentDB-Speicher verfügt über eine MongoDB-API.Mosca MQTT Broker (node.js) mit MongoDB Backend in Azure Cloud

Zuerst kopierte ich den Beispielcode aus der Mosca Website https://github.com/mcollina/mosca/wiki/Mosca-basic-usage#lets-put-it-all-together-now

var mosca = require('mosca') 

var ascoltatore = { 
    type: 'mongo',   
    url: 'mongodb://localhost:27017/mqtt', 
    pubsubCollection: 'ascoltatori', 
    mongo: {} 
}; 

var moscaSettings = { 
    port: 1883, 
    backend: ascoltatore, 
    persistence: { 
     factory: mosca.persistence.Mongo, 
     url: 'mongodb://localhost:27017/mqtt' 
    } 
}; 

var server = new mosca.Server(moscaSettings); 
server.on('ready', setup); 

server.on('clientConnected', function(client) { 
    console.log('client connected', client.id);  
}); 

server.on('published', function(packet, client) { 
    console.log('Published', packet.payload); 
}); 

function setup() { 
    console.log('Mosca server is up and running') 
} 

..., die mit einem lokal installierten MongoDB-Server funktioniert gut.

Dann ersetzte ich die beiden url: Vorkommen mit der Verbindungszeichenfolge Node.js, die aus dem Azure-Portal abgerufen werden kann. Danach wird die Verbindung zu dem Azure DocumentDB failes mit dem folgenden Fehler:

$ node index.js 
/[...]/node_modules/mongodb/lib/utils.js:98 
process.nextTick(function() { throw err; }); 
          ^
Error: Cannot recover. Collection is not capped. 
at /[...]/node_modules/ascoltatori/lib/mongo_ascoltatore.js:241:26 
at handleCallback (/[...]/node_modules/mongodb/lib/utils.js:95:56) 
at /[...]/node_modules/mongodb/lib/collection.js:1559:5 
at handleCallback (/[...]/node_modules/mongodb/lib/utils.js:95:56) 
at /[...]/node_modules/mongodb/lib/collection.js:1528:5 
at handleCallback (/[...]/node_modules/mongodb/lib/utils.js:95:56) 
at /[...]/node_modules/mongodb/lib/cursor.js:852:16 
at handleCallback (/[...]/node_modules/mongodb-core/lib/cursor.js:171:5) 
at setCursorDeadAndNotified (/[...]/node_modules/mongodb-core/lib cursor.js:506:3) 
at nextFunction (/[...]/node_modules/mongodb-core/lib/cursor.js:652:7) 
at Cursor.next [as _next] (/[...]/node_modules/mongodb-core/lib cursor.js:693:3) 
at fetchDocs (/[...]/node_modules/mongodb/lib/cursor.js:848:10) 
at /[...]/node_modules/mongodb/lib/cursor.js:871:7 
at handleCallback (/[...]/node_modules/mongodb-core/lib/cursor.js:171:5) 
at nextFunction (/[...]/node_modules/mongodb-core/lib/cursor.js:683:5) 
at /[...]/node_modules/mongodb-core/lib/cursor.js:594:7 
at queryCallback (/[...]/node_modules/mongodb-core/lib/cursor.js:253:5) 
at /[...]/node_modules/mongodb-core/lib/connection/pool.js:457:18 
at nextTickCallbackWith0Args (node.js:419:9) 
at process._tickCallback (node.js:348:13) 

Jede Idee, was hier fehlen würde?

Antwort

0

Ich weiß es nicht genau, aber ich nehme an, dass Azure DocumentDB nicht alle Funktionen von MongoDB implementiert, sondern nur die gleiche Netzwerk-API, sodass Sie die vorhandenen Clients verwenden können, um mit ihm zu kommunizieren.

In diesem Fall scheint es nicht zu unterstützen (die im Grunde wie Ringpuffer sind), die Mosca verwenden wird, um die Menge der Daten zu begrenzen, die es in der Datenbank speichert. Mosca testet die Sammlung, die es erstellt und findet, dass es nicht so eingerichtet ist, wie es erwartet und ausbucht. Möglicherweise können Sie diesen Test entfernen, aber der Code wird wahrscheinlich bedeuten, dass Sie eine schnell wachsende Sammlung werden, die erwartet, dass die Datenbank alte Datensätze automatisch entfernt.

+0

Vielen Dank für Ihre Antwort. Ich habe das gerade in den Microsoft-Dokumenten gefunden: "Die DocumentDB-Protokollunterstützung für MongoDB ist auf Kompatibilität mit MongoDB ausgelegt. Sie können Ihren vorhandenen Code, Anwendungen, Treiber und Tools für die Arbeit mit DocumentDB verwenden." ... das klingt, als ob es gesockelte Kollektionen unterstützt. Microsoft selbst hat meine Frage noch nicht beantwortet. – Bugfinger

Verwandte Themen