以下は標準コードで、タスクをキューに追加すると、ワーカー プールがタスクを処理します。私が混乱しているのは、このコードが複数の node.js プロセスを開始するとは思わないため、キューに複数のワーカーがあることの意味です。
var Queue = require('firebase-queue');
var firebase = require('firebase');
firebase.initializeApp({
// propriety data
});
var promise = firebase.auth().signInWithEmailAndPassword(process.env.EMAIL, process.env.PASSWORD);
promise.then(function () {
return createQueue();
}, function (error) {
console.error(error);
});
var queue;
function createQueue() {
var db = firebase.database();
var ref = db.ref('quote-request-queue');
var tasks = db.ref('quote-request-queue/tasks');
tasks.push({'foo': 'bar'});
tasks.push({'foo': 'bar'});
tasks.push({'foo': 'bar'});
const opts = {
};
queue = new Queue(ref, opts, function (data, progress, resolve, reject) {
// Read and process task data
console.log(data);
// Do some work
progress(50);
// Finish the task asynchronously
setTimeout(function () {
resolve();
}, 100);
});
console.log('worker count:', queue.getWorkerCount());
}
私の質問は - キュー内の次のアイテムが別のワーカーによって処理される前に、 resolve() を呼び出す必要がありますか?
ワーカーを相互にブロックする方法 (DB の原子性のために) と、ワーカーが別々のタスクで並行して作業する方法を知りたいです。(処理関数で I/O が発生している場合、それらは並行して/同時に動作します)。
Firebase でブロッキング/非ブロッキング ワーカー キューを制御するにはどうすればよいですか?