3

以下は標準コードで、タスクをキューに追加すると、ワーカー プールがタスクを処理します。私が混乱しているのは、このコードが複数の 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 でブロッキング/非ブロッキング ワーカー キューを制御するにはどうすればよいですか?

4

0 に答える 0