首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails 6如何检查sidekiq作业是否正在运行

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

Stack Overflow用户
提问于 2022-05-25 11:46:48
回答 1查看 1.4K关注 0票数 0

在我的Rails 6API唯一的应用程序中,我有一个FetchAllProductsWorker后台作业,大约需要1h30m。

代码语言:javascript
运行
复制
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,但是这些方法都不适合我,即使工人已经启动并运行了:

代码语言:javascript
运行
复制
# endpoint method to check sidekiq status
def status
  ss = Sidekiq::ScheduledSet.new

  render json: ss.scan('FetchAllProductsWorker') { |job| job.present? }
end

控制台向我展示:

代码语言:javascript
运行
复制
> ss.scan("\"class\":\"FetchAllProductsWorker\"") {|job| job }
=> nil
> ss.scan("FetchAllProductsWorker") { |job| job }
=> nil

如何检查特定的侧边处理是否未完成?

EN

Stack Overflow用户

回答已采纳

发布于 2022-05-26 11:20:38

也许这对某人有用。Sidekiq使用Sidekiq::Workers https://github.com/mperham/sidekiq/wiki/API#workers提供对当前活动工作人员的编程访问。

因此,基于此,我们可以这样做:

代码语言:javascript
运行
复制
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?
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72377044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档