2017-02-14 23 views
4

試圖找出如何使重試工作。firebase隊列 - 重試不起作用?

這是我的FB排隊的樣子:

{ 
    "specs" : { 
    "default_spec" : { 
     "retries" : 3, 
     "timeout" : 60000 
    } 
    }, 
    "tasks" : { 

    } 
} 

,這是我正在測試,如果試運行:

const queue = new Queue(getFirebaseRef(),{'numWorkers': 10} , function (data, progress, resolve, reject) { 
     console.log('processing queue message:' + JSON.stringify(data)); 
     progress(50); 

     setTimeout(()=>{ 
      reject(new Error("error while processing blabla")); 

     },2000); 
    }); 

所以當我推新任務排隊,這是怎麼看起來我的工作人員處理後:

{ 
    "-KcsTIDBAq1S_fdiwsv6" : { 
    "_error_details" : { 
     "attempts" : 1, 
     "error" : "error while processing blabla", 
     "error_stack" : "Error: error while processing blabla\n at Timeout.setTimeout ..., 
     "previous_state" : "in_progress" 
    }, 
    "_progress" : 50, 
    "_state" : "error", 
    "_state_changed" : 1487089675432, 
    "body" : { 
     "testing" : "this_is_a_test_task" 
    } 
    } 
} 

所以我希望嘗試是3,我也沒有秈稻在處理3個任務的服務中。

問題是,我怎樣才能讓重試工作。 值得一提的是,這是我閱讀後做的documentation

回答

1

最終是什麼@Caerbannog編寫並加入組合代碼中的default_spec,而不是直接將其插入到Firebase控制檯中。

所以回顧一下那些是我的變化:

var options = { 
    'specId': "default_spec", 
    'numWorkers': 10 

}; 

var queueRef = getFirebaseRef(); 
var specs = { 
    "default_spec": { 
     "start_state": null, 
     "in_progress_state": "in_progress", 
     "finished_state": null, 
     "error_state": "error", 
     "timeout": 60000, 
     "retries": 50 
    } 
}; 
queueRef.child('specs').set(specs); 
1

您的default_spec目前沒用。 您需要在隊列中選擇添加此下聯:

{ 
    'numWorkers': 10, 
    'specId': "default_spec" 
} 

請仔細閱讀下面火力隊列問題:

https://github.com/firebase/firebase-queue/issues/106#issuecomment-279975546

+0

謝謝回答,對不起,不寫我也試圖在選擇發送「規範ID」,但是當我試過這個工人只是沒有處理任何物品。 但我找到了你鏈接的github問題的解決方案。 我現在寫答案。 再次感謝 –