当前位置: 首页 > 面试题库 >

Sidekiq工作条件

宰父熙云
2023-03-14
问题内容

在我的应用程序中,我有25个工作人员,这些工作人员被不同用户的操作随机使用。

每个用户只允许同时进行一项(活动/忙碌)工作。

不能在控制器上将其阻止,因为其思想不是阻止动作的创建。需要创建动作,但动作要排队,直到处理同一用户的所有previos请求,然后才为该同一用户(重新)分配一个工作程序。

同时,如果另一个用户请求创建作业,则在剩余的24个工人中至少有一个可用时,它应该立即启动。

有什么方法可以查找队列行并使用其参数来建立处理条件?

谢谢


问题答案:

您可以使用Sidekiq Unique Jobs

通过这种方法,将仅同时显示具有相同参数的一项工作。

所以创建模型

class UserJobs
  belongs_to :user
end

class User
  has_many :user_jobs
end

class Worker
  sidekiq_options unique: true

  def perform params
    user = User.find(params[:id])
    user.user_jobs.order('id asc').each do |job|
      job.worker_class.constantize.new.perform(job.params)
      job.destroy
    end
  end
end

而不是您需要为用户运行任何作业时:

user.user_jobs.create worker_class: Klass, params: params
Worker.perform_async(user_id: user.id)


 类似资料:
  • 问题内容: 我有一个使用Sidekiq连接到我的另一个服务的后台作业,如下所示: 有时,此ABCClient关闭了,在这种情况下,我想重新安排“执行”作业。像这样: 问题答案: https://github.com/mperham/sidekiq/wiki/Scheduled- Jobs

  • Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 使用方法: 1. 首先将 worker 类放到 app/workers: class HardWorker  include Sidekiq::Worker  def perform(name, count)    # do something  endend 2. 在控制器 action 或者 model 中调用 Hard

  • 我有如下代码: 在我的属性文件中,我有: 这不起作用,parseFooBar在第一秒每分钟都被执行。 但是,如果我添加字段: 所以我可以做一个日志,看看它是什么,parseFooBar不会被执行。移除注入的字符串会再次看到parseFooBar执行。我做错了什么? 编辑:这是使用Spring 4.1.5,Spring Boot 1.2.1和JDK 8 编辑2:将注释移动到类型也有效。(无需强制使用

  • 问题内容: 我正在将广泛的后台任务推算给sidekiq工作者(第一次使用sidekiq)。 我已经能够使其正常运行。 但是我不确定如何检查sidekiq工作程序的进度-检查工作程序是否已通过perform_async函数完成的最佳方法是什么? AutoWorker sidekiq任务: 从我的控制器调用: 问题答案: 将以下扩展gem检出到sidekiq:https : //github.com/

  • 我希望你能帮忙。我试图写一个htaccess文件做以下事情。 1)重定向到www.地址 2) 从url中删除.php 3) 如果文件不存在,则使用filechecker.php?page=filename 1.我能忍受 RewriteCond%{HTTP_HOST}^example.com$ *)http://www.example.com/1美元[R=301, L] 2) 我受够了 Rewrit

  • 我带着我的下一个问题来找你xd这是我的JS: 为什么不使用“addClass(”d-block“)函数呢?但是我的”else“很好。 这是我的HTML