我为Sidekiq构建了一个简单的测试作业,并将其添加到Sidekiq Cron的schedule.yml
文件中。
这是我的测试工作:
module Slack
class TestJob < ApplicationJob
queue_as :default
def perform(*args)
begin
SLACK_NOTIFIER.post(attachments: {"pretext": "test", "text": "hello"})
rescue Exception => error
puts error
end
end
end
end
这里的SLACK_NOTIFIER
是我在启动时初始化的Slack的简单API客户端。
在我的schedule.yml
中:
test_job:
cron: "* * * * *"
class: "Slack::TestJob"
queue: default
description: "Test"
所以我想让它每分钟运行一次,并且它的运行完全符合我的预期。
但是,我现在已经删除了作业文件,并从schedule.yml
中删除了该作业,它仍然尝试每分钟运行一次作业。我已经进入了sidekiq仪表板,并且看到大量重试该工作的信息。不管我杀了他们多少次,它们都会一直来。
我已经尝试多次关闭redis服务器和sidekiq。我尝试关闭计算机(当然,在杀死服务器之后)。它仍然会继续安排这些作业,并打断我的其他作业,因为它会引发以下异常:
NameError: uninitialized constant Slack::TestJob
我已经在项目范围内搜索“ TestJob”,但没有结果。
我只用大约10分钟的时间打开了Redis服务器并完成了这项工作...
redis数据库中是否可能有残留?我研究了redis-cli
文档,但我认为没有任何帮助。
答案 0 :(得分:2)
尝试在redis客户端中致电$ FLUSHALL
...
除此之外...
sidekiq-cron documentation似乎希望您明确检查schedule.yml
的存在...
#initializers/sidekiq.rb
schedule_file = "config/schedule.yml"
if File.exist?(schedule_file) && Sidekiq.server?
Sidekiq::Cron::Job.load_from_hash YAML.load_file(schedule_file)
end
答案 1 :(得分:0)
Sidekiq的默认值为retry a failed job 25 times。因为工作不存在,所以每次都会失败。 Sidekiq只知道作业失败(因为尝试执行不存在的作业会引发异常),因此将其标记为重试... 25次。由于您每分钟都在计划该作业,因此可能有大量的这些失败的作业排队等待重试。您可以: