去抖是推迟函数/作业执行直到经过一定时间之后的常用方法。
用例:来自多个用户的活跃聊天对话,他们不应该收到每条键入消息的电子邮件通知。但很可能在几分钟的静默后,如果消息未读,用户应该会看到一条通知。
延迟作业
没有解决方案,有相关问题:https://github.com/collectiveidea/delayed_job/issues/72 https://github.com/collectiveidea/delayed_job/issues/72
Sidekiq
https://github.com/hummingbird-me/sidekiq-debounce https://github.com/hummingbird-me/sidekiq-debounce
做自己也没有那么糟糕。
class AdminJob
def self.debounce(job, args={})
handler = YAML.dump(job)
count = Delayed::Job.where(handler: handler).where('locked_at IS NULL').delete_all
Rails.logger.info("deleted: #{count} jobs")
Delayed::Job.enqueue(job, args)
end
end
而不是写:
Delayed::Job.enqueue(YourJobName.new(account_id), {run_at: 10.minutes.from_now})
你现在写:
AdminJob.debounce(YourJobName.new(account_id), {run_at: 10.minutes.from_now})
延迟作业将您的作业参数序列化为YAML
然后将其保存到数据库中handler
。所以如果你打电话AdminJob.debounce(...)
连续10次,每次都会删除之前的。
确保给自己时间(5分钟等)让用户继续采取行动。如果您在 1 秒后运行作业,它们很可能会继续采取操作并再次触发。
是的,三年后我正在回答我自己的问题......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)