【发布时间】:2016-04-26 22:00:32
【问题描述】:
Sidekiq Enterprise 包括对 Periodic Jobs 的支持,并包括一个使用初始化程序注册作业的示例:
Sidekiq.configure_server do |config|
config.periodic do |mgr|
# see any crontab reference for the first argument
# e.g. http://www.adminschoice.com/crontab-quick-reference
mgr.register('0 * * * *', SomeHourlyWorkerClass)
mgr.register('* * * * *', SomeWorkerClass, retry: 2, queue: 'foo')
mgr.register(cron_expression, worker_class, job_options={})
end
end
注册工作后,如何删除/取消注册工作?例如,如果工人不再使用并且不应该再运行,你如何安全地从 Redis 中删除已注册的作业?从初始化程序中删除它并重新启动 Sidekiq 并没有这样做,并且 API 似乎没有提供删除功能,而是说 Periodic API 允许您列出已注册的定期作业并查看排队历史。
有一个用于删除常规队列中的作业的 API:
queue = Sidekiq::Queue.new("mailer")
queue.each do |job|
job.klass # => 'MyWorker'
job.args # => [1, 2, 3]
job.delete if job.jid == 'abcdef1234567890'
end
但尝试将其调整为定期作业 API:
Sidekiq::Periodic::LoopSet.new.each do |lop|
lop.delete
end
...引发错误:
NoMethodError: undefined method `delete' for #<Sidekiq::Periodic::Loop:0x007fff0a48dbe8>
Redis db 显示 Sidekiq 为每个循环创建了一个 loop-uniqueid 键,以及一个 loop-history-uniqueid 键和 loops-uniqueid 键。我应该销毁所有这些密钥吗?是否最好销毁所有这些密钥,然后重新注册所有当前作业?
【问题讨论】:
标签: ruby-on-rails ruby sidekiq