在我的应用程序中,我有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