在我的 Rails 6 API only 應用程式中,我有FetchAllProductsWorker大約需要 1 小時 30 分鐘的后臺作業。
module Imports
class FetchAllProductsWorker
include Sidekiq::Worker
sidekiq_options queue: 'imports_fetch_all'
def perform
# do some things
end
end
end
在此期間,前端應用程式向 BE 上的端點發送請求,該端點檢查作業是否仍在運行。我需要發送true/false那個程序。根據檔案,有一種掃描方法 - https://github.com/mperham/sidekiq/wiki/API#scan但即使工人啟動并運行,這些方法都不適合我:
# endpoint method to check sidekiq status
def status
ss = Sidekiq::ScheduledSet.new
render json: ss.scan('FetchAllProductsWorker') { |job| job.present? }
end
控制臺向我顯示:
> ss.scan("\"class\":\"FetchAllProductsWorker\"") {|job| job }
=> nil
> ss.scan("FetchAllProductsWorker") { |job| job }
=> nil
如何檢查特定的sidekiq行程是否未完成?
uj5u.com熱心網友回復:
也許這對某人有用。Sidekiq 使用https://github.com/mperham/sidekiq/wiki/API#workers提供對當前活動作業者的編程訪問Sidekiq::Workers
因此,基于此,我們可以執行以下操作:
active_workers = Sidekiq::Workers.new.map do |_process_id, _thread_id, work|
work
end
active_workers.select do |worker|
worker['queue'] == 'imports_fetch_all'
end.present?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/482386.html
