繁体   English   中英

Rails 6如何检查sidekiq作业是否正在运行

[英]Rails 6 how to check if sidekiq job is running

在我的 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进程是否未完成?

也许这对某人有用。 Sidekiq 使用Sidekiq::Workers https://github.com/mperham/sidekiq/wiki/API#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?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM