gpt4 book ai didi

ruby-on-rails - Sidekiq:确保队列中的所有作业都是唯一的

转载 作者:数据小太阳 更新时间:2023-10-29 06:44:10 26 4
gpt4 key购买 nike

我有一些更新触发器可以将作业推送到 Sidekiq 队列中。因此在某些情况下,可以有多个作业来处理同一个对象。

有几个唯一性插件( "Middleware"Unique Jobs ),它们的文档记录不多,但它们似乎更像是防止重复处理的节流器;我想要的是一个阻止重复创建相同作业的节流器。这样,对象将始终以其最新状态进行处理。有这方面的插件或技术吗?


更新:我没有时间制作中间件,但我最终得到了一个相关的清理函数来确保队列是唯一的:https://gist.github.com/mahemoff/bf419c568c525f0af903

最佳答案

简单的客户端中间件怎么样?

module Sidekiq
class UniqueMiddleware

def call(worker_class, msg, queue_name, redis_pool)
if msg["unique"]
queue = Sidekiq::Queue.new(queue_name)
queue.each do |job|
if job.klass == msg['class'] && job.args == msg['args']
return false
end
end
end

yield

end
end
end

注册一下

  Sidekiq.configure_client do |config|
config.client_middleware do |chain|
chain.add Sidekiq::UniqueMiddleware
end
end

然后在你的工作中,需要时在 sidekiq_options 中设置 unique: true

关于ruby-on-rails - Sidekiq:确保队列中的所有作业都是唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20473471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com