【发布时间】:2017-06-13 09:54:45
【问题描述】:
我在 Rails 中创建了一个查询资源。发布查询后,我创建查询记录并使用 Sidekiq 在后台解雇 2 个任务工作者。
我的查询模型除了具有查询参数外,还包含每个任务工作者的状态。在创建查询时,每个任务的状态都设置为“已创建”。
@query = Query.create(param1: parameter1, param2: parameter2, task1_status: "created", task2_status: "created")
Task1Worker.perform_async(@query.id)
Task2Worker.perform_async(@query.id)
Task1 worker 使用查询参数执行一些处理,并根据结果将 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!
Task2 worker 等待 Task1 完成后才开始处理
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 秒后从未看到更新和超时,没有处理。有什么我在这里想念的吗。有一个更好的方法吗?
【问题讨论】:
标签: ruby-on-rails activerecord sidekiq