我在rails中創建了一個查詢資源。查詢發佈後,我使用Sidekiq在後臺創建查詢記錄並激發2個任務工作人員。
除查詢參數外,我的查詢模型還包含每個任務工作人員的狀態。在創建查詢時,每個任務的狀態都設置爲「已創建」。Sidekiq的活動記錄問題
@query = Query.create(param1: parameter1, param2: parameter2, task1_status: "created", task2_status: "created")
Task1Worker.perform_async(@query.id)
Task2Worker.perform_async(@query.id)
任務1工人使用的查詢參數進行一些處理,並根據結果更新task_status要麼「已完成」或「失敗」
q = Query.find(query_id)
status = process_task1()
if status == SUCCESS
q.task1_status = "completed"
else
q.task1_status = "failed"
end
q.save!
任務2工人等待前完成任務1起動處理
q = Query.find(query_id)
count = 1
while q.task1_status == "created"
if count == 3
logger.error("Task1 state change timed out")
return
end
sleep(5)
q = Query.find(query_id)
end
status = process_task2()
if status == SUCCESS
q.task2_status = "completed"
else
q.task2_status = "failed"
end
q.save!
任務1需要爲處理約4秒,並將狀態設置爲「已完成」或「失敗」。但是任務2在10秒後從未看到更新&超時,沒有處理。有什麼我在這裏失蹤。有一個更好的方法嗎?
第二種選擇是當然更好,OP應該試試.. –
工作就像一個魅力。謝謝塞爾吉奧。 – railsnube