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数据库显示Sidekiq为每个循环创建了一个loop-uniqueid
密钥,以及一个loop-history-uniqueid
密钥和loops-uniqueid
密钥。我应该销毁所有这些钥匙吗?是否最好销毁所有这些密钥,然后重新注册所有当前的工作?
答案 0 :(得分:1)
Sidekiq企业领导者角色由辅助服务器持有。持有领导者角色时,定期作业将被锁定且无法修改。关闭所有Sidekiq服务器,包括领导者,然后重新启动Sidekiq以清除并重新注册初始化程序中的所有作业。
无需使用API删除定期作业。
答案 1 :(得分:0)