如何通过重新出现在仪表板中获得 sidekiq 重试作业?
How do I get a sidekiq retry job from re-appearing in the dashboard?
好像我有一个工作失败了,但当它失败时它仍然存在,然后创建另一个与它自己相同的工作。请注意,在我的屏幕截图中,顶部项目和底部项目是相同的,参数为“836898”。这是我需要更改的某种配置吗?
我指的是出现的重复条目,不一定是禁用重试。
NickM 的回答是正确的。但是,它将禁用所有 sidekiq worker 的重试。根据每种情况,我建议在每个 class 中禁用它,例如:
class NonRetryableWorker
include Sidekiq::Worker
sidekiq_options retry: false
def perform
end
end
或者,也许只是限制重试次数,例如:
class LessRetryableWorker
include Sidekiq::Worker
sidekiq_options retry: 5
def perform
end
end
您可以查看更多信息here
我认为你应该首先包括 gem 'sidekiq-unique-jobs'
那么你的工人应该是这样的
class CleanupWorker
include Sidekiq::Worker
sidekiq_options queue: :cleanup, unique: :until_executed, retry: 4, failures: :exhausted, backtrace: true
sidekiq_retry_in do |count|
10 * (count + 1)
end
def perform(args)
end
end
unique: :until_executed
这意味着作业必须是唯一的,只要它仍在队列中或正在执行。 retries: 4
和 unique: :until_executed
之间的组合就可以了。因为据我所知,如果重试不为假,当作业崩溃时,作业将返回队列。
这是这个独特工作的 link gem 回购
重试中有两个条目,因为它们是两个不同的作业。您可以创建仅内部作业 ID 不同的 "identical" 个作业(具有相同的 class 和参数)。
好像我有一个工作失败了,但当它失败时它仍然存在,然后创建另一个与它自己相同的工作。请注意,在我的屏幕截图中,顶部项目和底部项目是相同的,参数为“836898”。这是我需要更改的某种配置吗?
我指的是出现的重复条目,不一定是禁用重试。
NickM 的回答是正确的。但是,它将禁用所有 sidekiq worker 的重试。根据每种情况,我建议在每个 class 中禁用它,例如:
class NonRetryableWorker
include Sidekiq::Worker
sidekiq_options retry: false
def perform
end
end
或者,也许只是限制重试次数,例如:
class LessRetryableWorker
include Sidekiq::Worker
sidekiq_options retry: 5
def perform
end
end
您可以查看更多信息here
我认为你应该首先包括 gem 'sidekiq-unique-jobs'
那么你的工人应该是这样的
class CleanupWorker
include Sidekiq::Worker
sidekiq_options queue: :cleanup, unique: :until_executed, retry: 4, failures: :exhausted, backtrace: true
sidekiq_retry_in do |count|
10 * (count + 1)
end
def perform(args)
end
end
unique: :until_executed
这意味着作业必须是唯一的,只要它仍在队列中或正在执行。 retries: 4
和 unique: :until_executed
之间的组合就可以了。因为据我所知,如果重试不为假,当作业崩溃时,作业将返回队列。
这是这个独特工作的 link gem 回购
重试中有两个条目,因为它们是两个不同的作业。您可以创建仅内部作业 ID 不同的 "identical" 个作业(具有相同的 class 和参数)。