ruby-on-rails - 如何按作业类、队列名称和参数查询 Sidekiq 队列?
问题描述
在再次入队之前,我必须检查是否已将相同的作业添加到队列中。
目前我使用这段代码,但效率很低,因为它将所有对象加载到内存中。有没有办法像普通的活动记录一样查询?
理想情况下,我会喜欢
Sidekiq::Queue.where(job_class: "SyncJob", queue_name:"high", arguments: [1,2,3])
当前代码:
def list_queued_jobs(job_class, queue_name, arguments)
found_jobs = []
queues = Sidekiq::Queue.all
queues.each do |queue|
queue.each do |job|
job.args.each do |arg|
if arg['job_class'].to_s == job_class.to_s && arg['queue_name'] == queue_name && ActiveJob::Arguments.deserialize(arg['arguments']) == arguments
found_jobs << job
end
end
end
end
return found_jobs
end
解决方案
检查现有作业称为“独特作业”。Sidekiq Enterprise 提供此功能,一些 3rd 方 gem 也提供此功能。
实现和使用您描述的代码是一个非常糟糕的主意。
推荐阅读
- r - 如何从 R 中的两个数据帧中提取三元组?
- ios - UIButton 边框中的生涩渐变
- angular - Angular/NgRx - 在 Guards 中组合 2 个选择器
- python - Python函数从两个不同的函数中获取输入并返回一个连接的字符串
- c# - 我有实体框架 6.2 我正在尝试查找表中具有日期时间类型的所有列
- php - 使用 Solarium php 的建议查询中的 HTTP 错误问题
- mysql - 带有 FULLTEXT 过滤的子查询会中断 MYSQL 连接
- c# - AddCors 到 .Net Core 的正确顺序是什么?
- c# - Microsoft CRM:如何通过代码重新打开机会?SetStateRequest 已弃用,更新不起作用
- apache-spark - 如何在 Spark 结构化流中使用连接池覆盖 ForeachWriter