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?
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