Firebase 佇列和工作人員

你可以將任務或資料推送到 firebase 實時資料庫並執行一個偵聽 firebase 佇列的 worker 來執行一些後臺處理

設定 firebase

  1. 如果你還沒有 Firebase 專案,請在 Firebase 控制檯中建立 Firebase 專案。如果你已有與你的應用相關聯的現有 Google 專案,請點選匯入 Google Project。否則,單擊建立新專案

  2. 單擊設定圖示,然後選擇許可權。

  3. 從左側選單中選擇服務帳戶。

  4. 單擊建立服務帳戶。

    輸入服務帳戶的名稱。

    你可以選擇自定義從名稱自動生成的 ID。

    從 Role 下拉選單中選擇 Project> Editor。

    選擇提供新的私鑰,並將金鑰型別保留為 JSON。

    不選擇啟用 Google Apps 域範圍的委派。

    單擊建立

  5. 建立服務帳戶時,將為你下載包含服務帳戶憑據的 JSON 檔案。你需要這個來初始化伺服器中的 SDK。

設定伺服器

在 nodejs app 中使用 npm 安裝 firebase-queue

npm install firebase firebase-queue --save

一旦安裝了 firebase 和 firebase-queue,就可以開始建立新的 Queue 並將其傳遞給 Firebase 引用和處理函式。

現在,我們可以在建立新使用者時從應用程式建立一個 firebase 佇列任務,並將 worker 設定為偵聽 firebase-queue 任務並向建立的使用者郵件傳送電子郵件。

* server.js

var app=express();
var Queue = require('firebase-queue'),
    Firebase = require('firebase');

更新 Firebase 專案憑據和 Firebase 資料庫 URL

var firebase = Firebase.initializeApp({
    serviceAccount: "path/to/serviceAccountCredentials.json",
  databaseURL: "https://databaseName.firebaseio.com"
});

或者你可以直接輸入 firebase 憑據,如下所示

var firebase = Firebase.initializeApp({ 
    serviceAccount: {
        projectId: "projectId",
        clientEmail: "foo@projectId.iam.gserviceaccount.com",
        privateKey: "-----BEGIN PRIVATE KEY-----\nkey\n-----END PRIVATE KEY-----\n"
    },
    databaseURL: "https://databaseName.firebaseio.com"
});

var refQueue = firebase.database().ref("queue/tasks");

createUser =  funtion(email, password){
    var user = {
        username: email,
        password: password
    };
    user = new db.users(user);
    user.save(function(err, user){
        if(!err){
            refQueue.push({case: "NEW_USER", data: user});
        }
    })
}

createUser("abc@abc.com", "password");

* worker.js

var Queue = require('firebase-queue'),
    Firebase = require('firebase');

//Update your Firebase Project Credentials and Firebase Database URL by one of the way specified in server.js
var firebase = Firebase.initializeApp({
    serviceAccount: "path/to/serviceAccountCredentials.json",
  databaseURL: "https://databaseName.firebaseio.com"
});

var refQueue = firebase.database().ref("queue");

var queue = new Queue(refQueue, function(data, progress, resolve, reject) {
    switch(data.case){
        case "NEW_USER":
            sendMail(data.data.email);
            console.log("user created");
            //sendMail function is not an inbuilt function and will not work unless you define and implement the function
            break;

    // Finish the task asynchronously
    setTimeout(function() {
        resolve();
    }, 1000);
});

單獨執行伺服器和工作程式並使用 firebase 佇列進行測試

node server.js

node worker.js