我在 Firestore 集合中添加任務作為檔案。在后端,我有多個處理這些任務的 NodeJs 無狀態實體。所有實體都在監聽集合中的實時變化
firestore().collection('Tasks').onSnapshot(startTask, one rror);
在這種情況下,添加任務時將通知所有 NodeJs 實體。我怎樣才能確保他們中只有一個人處理任務?我雖然關于使用firebase-queue但似乎該專案已過時。有沒有辦法在沒有額外模塊的情況下做到這一點?將 NodeJs 作為 Firebase 函式運行對我來說不是一個選項。
uj5u.com熱心網友回復:
一種可能的解決方案是通過Transaction向 Firestore 檔案添加“處理過的”標志。
一個給定的 Node.js 實體應該只在它沒有被標記為已處理的情況下處理這個任務(例如,你在事務開始時檢查該欄位treated是否設定為true,如果是你拋出錯誤的情況,請參閱示例)。在成功處理它之后,Node.js 實體應將檔案標記為已處理(當然在同一個事務中)。
由于您使用 Node.js 服務器(即您使用 Node.js 服務器客戶端庫),因此事務會鎖定它正在讀取的任務檔案,因此其他實體無法修改該檔案。這樣您就可以確定它只會被處理一次。
檔案中有關服務器客戶端庫中資料爭用的更多詳細資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/474075.html
標籤:javascript 节点.js 火力基地 谷歌云火库
下一篇:即使在“回傳”之后回圈也不會終止
