Я пытаюсь установить систему, которая может быть горизонтально масштабирована за балансировщиком нагрузки.
Вот базовая архитектура:
Когда я добавляю более одного экземпляра Node JS, я получаю несколько дополнений к таблице SQL.
Например, я добавляю 1000 сообщений навалом к / messages_out, и два (или более) экземпляра узла предназначены для удаления записи из firebase, а также для ее сохранения в таблице SQL в качестве транзакции.
Я предполагаю, что мое использование обещаний / общего подхода неверно, но я пробовал различные "цепочки" и искал методы и примеры для firebase и не могу заставить его работать. Это мое первое знакомство с Node / JS / Firebase ...
Любая помощь будет принята с благодарностью.
const log4js = require('log4js');
const logger = log4js.getLogger();
logger.level = 'debug';
var admin = require('firebase-admin');
var Sequelize = require('sequelize');
const sequelize = new Sequelize('lachat', 'la-admin', 'password', {
host: '10.5.11.43',
dialect: 'mysql',
pool: {
max: 100,
min: 5,
acquire: 30000,
idle: 10000
}
});
const InboundMessage = sequelize.define('inbound_message', {
sender: {
type: Sequelize.STRING
},
message: {
type: Sequelize.STRING
},
target: {
type: Sequelize.STRING
}
});
watcher = admin.database().ref('/messages_out').on('child_added', (snap) => {
logger.debug(`GOT MESSAGE IN => ${JSON.stringify(snap.val())}`);
//Grab it and delete...
//Persist it
const snapshot = snap.val();
admin
.database()
.ref(snap.ref)
.transaction(() => {
return admin.database().ref(snap.ref).remove();
})
.then(() => {
return InboundMessage.create({
sender: snapshot.sender,
message: snapshot.message,
target: snapshot.target
});
})
.then((persisted) => {
logger.debug('SUCCESS');
})
.catch((err) => {
return Promise.reject(err);
});
});
exports.watcher = watcher;